Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Julio 24, 2008, 08:16:30
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación (Moderador: programas gratis)  |  Tema: 4 Reto de programacion 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: 1 2 3 [4] Ir Abajo Imprimir
Autor Tema: 4 Reto de programacion  (Leído 1547 veces)
Espectro Infernal
Moderación
Colaborador
*****
Desconectado Desconectado

Mensajes: 797



Ver Perfil
« Respuesta #75 en: Marzo 01, 2008, 05:19:19 »

No me paso purgo, hay muchos algoritmos que funcionen bien  Wink No soy nadie importante,
simplemente conseguí ver uno. Al decir perfecto me refería a que funcionaba bien.
Seguro que más users trabajaron otros metodos en el que la IA e sperfecta
y no da error, porque ese es la intención del reto.

No me paso, mi code se puede mejorar bastante, pero no he tenido tiempo suficiente para ahcerlo.

Pido perdon por si no quedó clara mi intención en el post anterior. Wink

Bytes, Espectro Infernal.
En línea





.::MDavidMR::.
Colaborador
*****
Desconectado Desconectado

Mensajes: 481


moy.david@live.com
Ver Perfil Email
« Respuesta #76 en: Marzo 01, 2008, 06:48:02 »

No habia visto este post xDD

Hola gente!!!, bueno me gustaría apuntarme al Reto, ya tengo el kode y subo mi .exe para que lo vean, después cuando el reto termine subo el código fuente completo, esta hecho en Vb 6.0.
Estuve viendo y es virtualmente imposible ganar pero...... no se.
me gustaría que lo prueben ustedes, yo ya estuve molestando a unos amigos.
Nos vemos salu2

LINK: AQUI

« Última modificación: Marzo 01, 2008, 06:48:58 por .::MDavidMR::. » En línea

Nada es Verdad, Nada es mentira... Todo depende del cristal con que se mira...




Espectro Infernal
Moderación
Colaborador
*****
Desconectado Desconectado

Mensajes: 797



Ver Perfil
« Respuesta #77 en: Marzo 02, 2008, 07:53:27 »

Seh, ese es a lo que me referia, que si usas esta jugada:

 1-2-3
 4-5-6
 7-8-9

tu: 6
pc: 5
tu: 8
pc: 1
tu: 9
-Con eso le amenazas en dos lineas. Esperemos que puedas haber arreglado el code Wink

Bytes, Espectro Infernal.
En línea





Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1357


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« Respuesta #78 en: Marzo 03, 2008, 11:01:36 »

bueno...., posteo el codigo directamente aca xD:
Código:
/*ta te ti, 3 en raya o como quieran llamarlo xD
by Ni0

***************************

explico ahora como funciona mi IA, para que tengan una idea

lo que hago es poner en un tateti aparte (llamado calculo)
un numero en cada casilla, la que tenga el mayor numero va
a ser la "elegida", como obtiene ese numero? bueh, al
principio pone todo en 0, despues se fija en cada columna
y fila y diagonales la cantidad de espacios libres y se
lo suma a los espacios vacios, ejemplo:
si en la primera fila esta:
(vacio) | X | (vacio)
a 0; 0 se le va a poner sumar 2, a 1; 0 se deja en 0 y a
2;0 se le suma 2, y lo mismo para cada fila columna, etc.
pero hay un "bonus", este bonus es para que si hay 2 fichas
de la pc juntas la ponga a continuacion para ganar, sino, la
pondria en un espacio libre xD, este bonus tambien es para
cuando hay fichas del jugador, para que no gane, como funciona
el bonus? por cada ficha enemiga que haya a su vez se le suma
(aparte de 1 por cada libre) el valor de USM, asi digamos que
le aumenta el valor para que prefiera ponerla ahi, y por cada
ficha de la PC le suma PCM, que tiene un valor mayor
(asi tiene prioridad de ganar xD)a su vez, si hay una ficha
del jugador y en la misma fila columna o diagonal una de la pc
pone al espacio vacio en 1 (ya que si lo pusiera no podria ganar
ni perder xD), a su vez, para corregir algunas estupideces que
hacia el programa, hice que si hay 2 fichas enemigas, al espacio
vacio le suma USM * USM (osea USM al cuadrado xD) y lo mismo para
la pc, cuando hay 2 de la pc en la misma fila o columna o diagonal
le suma PCM * PCM (osea PCM al cuadrado xD)
otra cosa mas, para que no pase que el usuario haga algo como:


O |1;0|2;0
-----------
0;1| X |2;1
-----------
0;2|1;2| O


y que la pc ponga en 0;2 por lo que el usuario tiene que poner en 2;0
y la pc pierda, puse un contador de jugadas, si se hicieron tres jugadas
y le toca a la PC, se fija si se dio una condicion como la anterior, si
se dio, pone la ficha en 1;0, para obligar al jugador a ponerla en 1;2
y asi la pc no perderia. Lo que acabo de decir, no se como corregirlo en
la IA, ya que si fuera por la IA, la pc pondria la ficha en 2;0...

espero que se haya entendido...*/

#include <stdio.h>
#define PC 10
#define US 1
#define SCALC 3 /*esto seria "Solo CALCulo, se usa en la
funcion vacia para indicar que solo vacie
calculo y no tateti*/
#define TODO 2 /*igual que el anterior pero para indicar que
vacie TODO*/
#define PCM 6
#define USM 4
int tateti[3][3];/*el tateti*/
int calculo[3][3];/*aca se hacen las cuentas de la pc*/

void mostrar(void)/*muestra el tateti, si es de la PC pone X, si puso el humano O y sino un espacio*/
{
int i, d;
printf("\n\n");
for(d = 0; d < 3; d++){
for(i = 0; i < 3; i++)
printf(" %c |", tateti[i][d] == PC ? 'X' : (tateti[i][d] == US ? 'O' : ' '));
printf("\n-----------\n");
}
}

void vacia(int op)/*por las dudas, para asegurarse de que esta en 0*/
{
int i, d;
for(d = 0; d < 3; d++){
for(i = 0; i < 3; i++){
if(op != SCALC)
tateti[i][d] = 0;
calculo[i][d] = 0;
}
}
}

int fin(void) /*calcula si alguien hiso TA TE TI*/
{
int cant = 0;
int x, y;
for(y = 0; y < 3; y++){
if(tateti[0][y] + tateti[1][y] + tateti[2][y] == (PC * 3))
return PC;
if(tateti[0][y] + tateti[1][y] + tateti[2][y] == (US * 3))
return US;
}
for(x = 0; x < 3; x++){
if(tateti[x][0] + tateti[x][1] + tateti[x][2] == (PC * 3))
return PC;
if(tateti[x][0] + tateti[x][1] + tateti[x][2] == (US * 3))
return US;
}
if(tateti[0][0] + tateti[1][1] + tateti[2][2] == (PC * 3))
return PC;
if(tateti[0][0] + tateti[1][1] + tateti[2][2] == (US * 3))
return US;
if(tateti[2][0] + tateti[1][1] + tateti[0][2] == (PC * 3))
return PC;
if(tateti[2][0] + tateti[1][1] + tateti[0][2] == (US * 3))
return US;
for(y = 0; y < 3; y++){
for(x = 0; x < 3; x++){
if(tateti[x][y] == US || tateti [x][y] == PC)
cant++;
}
}
/*no use ningun else porque cuando sea veradero algun if hay un return
por lo que es inecesario, aparte de que me parece recordar que los
else hace mas lento el codigo...*/
if(cant == 9)
return 5;
return 0;
}

void IA(int *xr, int *yr)/*va a elejir la mejor posicion y va a poner esa
posicion en xr y en yr, que van a ser x e y de
la funcion main*/
{
int co = 0;/*aca va un valor indicando que hay una ficha enemiga
o de la pc */
int max = 0;/*para saber cual es el valor maximo*/
int cant = 0;/*valor a sumarle en la casilla vacia de calculo*/
int x, y;
for(x = 0; x < 3; x++){ /*analiza las columnas*/
co = 0;
cant = 0;
for(y = 0; y < 3; y++){
if(tateti[x][y] == PC){/*si en esa pocicion hay una ficha
de la pc*/
if(co == US)/*si habia una ficha del usuario puesta
en la misma columna*/
cant = 1;/*pone en 1*/
else if(co == PC)/*si ya habia una de la pc*/
cant += PCM * PCM;/*le suma PCM al cuadrado*/
else /*si no habia nada mas puesto antes*/
cant += PCM;/*le suma PCM*/
co = PC;/*indica de que habia una ficha de la PC*/
}
else if(tateti[x][y] == US){/*si habia una del usuario...
lo mismo que el comentario
anterior, solo que con el
usuario*/
if(co == PC)
cant = 1;
else if(co == US)
cant += USM * USM;
else
cant += USM;
co = US;
}
else
cant++;/*si era un espacio vacio, le suma 1 a cant*/
}
for(y = 0; y < 3; y++){/*vuelve a analiza la columna pero esta vez
de tateti*/
if(tateti[x][y] == 0)/*si es un espacio vacio le suma cant*/
calculo[x][y] += cant;
}
}
for(y = 0; y < 3; y++){/*lo mismo que el anterior pero por fila*/
co = 0;
cant = 0;
for(x = 0; x < 3; x++){
if(tateti[x][y] == PC){
if(co == US)
cant = 1;
else if(co == PC)
cant += PCM * PCM;
else
cant += PCM;
co = PC;
}
else if(tateti[x][y] == US){
if(co == PC)
cant = 1;
else if(co == US)
cant += USM * USM;
else
cant += USM;
co = US;
}
else
cant++;
}
for(x = 0; x < 3; x++){
if(tateti[x][y] == 0)
calculo[x][y] += cant;
}
}
cant = 0;
co = 0;
for(x = 0, y = 0; x < 3; x++, y++){/*ahora analizamos la diagonal
que va de 0;0 a 2;2
y hacemos lo mismo que antes*/
if(tateti[x][y] == PC){
if(co == US)
cant = 1;
else if(co == PC)
cant += PCM * PCM;
else
cant += PCM;
co = PC;
}
else if(tateti[x][y] == US){
if(co == PC)
cant = 1;
else if(co == US)
cant += USM * USM;
else
cant += USM;
co = US;
}
else
cant++;
}
for(x = 0, y = 0; x < 3; x++, y++){
if(tateti[x][y] == 0)
calculo[x][y] += cant;
}
cant = 0;
co = 0;
for(x = 2, y = 0; y < 3; x--, y++){/*ahora con la diagonal de 2;0 a 0;2*/
if(tateti[x][y] == PC){
if(co == US)
cant = 1;
else if(co == PC)
cant += PCM * PCM;
else
cant += PCM;
co = PC;
}
else if(tateti[x][y] == US){
if(co == PC)
cant = 1;
else if(co == US)
cant += USM * USM;
else
cant += USM;
co = US;
}
else
cant++;
}
for(x = 2, y = 0; y < 3; x--, y++){
if(tateti[x][y] == 0)
calculo[x][y] += cant;
}
*xr = 0;
*yr = 0;
/*buscamos la posicion de calculo que tiene el mayor valor*/
for(x = 0; x < 3; x++){
for(y = 0; y < 3; y++){
if(calculo[x][y] >= max){/*si es mayor que el valor mayor
que se habia encontrado antes*/
max = calculo[x][y];/*le asigna ese valor a max*/
*xr = x;
*yr = y;
}
}
}
}

main()
{
int res;
char c;/*recive las opciones*/
int x, y;/*recive las coordenadas*/
do{
printf("\t\tTa Te Ti\n"
" By Ni0\n\n"
"1-nueva partida\n"
"2-salir\n");
c = getch();
}while(c != '1' && c != '2');/*para que no se ingresen valores
no deceados*/
if(c == '2')
exit(0);
do{
printf("\n\n1-Seder turno\n"
"2-ingresar coordenada\n"
"3-salir\n");
c = getch();
}while(c != '1' && c != '2' && c != '3');/*para que no se ingresen...*/
switch(c){
case '1':
vacia(TODO);/*solamente si va a jugar la vacia,
sino se estaria perdiendo tiempo...*/
tateti[1][1] = PC;/*para que no haga todas las cuentas
como es el mejor lugar...*/
c = 1;/*c va a pasar a ser un contador de jugadas*/
break;
case '2':
vacia(TODO);
c = 0;/*c va a pasar a ser un contador de jugadas*/
break;
case '3':
exit(0);
}
mostrar();
do{
do{
printf("\ningrese la coordenada(x y)(del 0 al 2): ");
scanf("%d %d", &x, &y);
}while(x > 2 || y > 2 || tateti[x][y] == PC || tateti[x][y] == US);
/*para que n o ponga una coordenada fuera de los limites ni que
ya este en uso*/
c++;
tateti[x][y] = US;
mostrar();
if((res = fin()) != 0)
break;
vacia(SCALC);
/*si se pusieron tres fichas, y...*/
if(c == 3 && ((tateti[1][1] == PC && tateti[0][0] == US && tateti[2][2] == US) || (tateti[1][1] == PC && tateti[2][0] == US && tateti[0][2] == US))){
tateti[1][0] = PC;/*para corregir algo de la IA que no se como
c++; hacer para que dentro de la ia se de cuenta xD*/
}
else{
IA(&x, &y);/*la famosa IA pone en X e Y donde va a jugar la PC*/
c++;
tateti[x][y] = PC;
}
mostrar();
}while((res = fin()) == 0);
if(res == PC)
printf("\n\t\tGAME OVER, PERDISTE");
else if(res == US)
printf("\n\t\tGANASTE, SOY UN PROGRAMADOR MALO :(");
else
printf("\n\t\tEMPATE");
getchar();
getchar();
}
hasta ahora no encontre forma de ganarle... xD

salu2!
En línea

Inside The Source Code



Linux Registred User #460377
milton19
Recien Llegado
*
Desconectado Desconectado

Mensajes: 1


Ver Perfil Email
« Respuesta #79 en: Junio 08, 2008, 09:52:38 »

hola nena
En línea
Espectro Infernal
Moderación
Colaborador
*****
Desconectado Desconectado

Mensajes: 797



Ver Perfil
« Respuesta #80 en: Julio 21, 2008, 04:00:15 »

El reto nunca llegó a acabar, que vas a hacer sami? Sad

Bytes, Espectro Infernal.
En línea





Deeo
Miembro
*****
Conectado Conectado

Mensajes: 127


Ozzy Slave.

MrRaiser@gmail.com
Ver Perfil Email
« Respuesta #81 en: Ayer a las 12:45:02 »

Si que paso con lo del reto aun tengo mi Tres en raya esperando para competir, espero que podamos continuar o que se empiese de buelta.  Grin
« Última modificación: Ayer a las 12:47:05 por Deeo » En línea

Páginas: 1 2 3 [4] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación (Moderador: programas gratis)  |  Tema: 4 Reto de programacion « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC