Vota por nosotros en el ranking web que participamos
Bienvenido(a),
Visitante
. Favor de
ingresar
o
registrarse
.
¿Perdiste tu
email de activación?
- Octubre 11, 2008, 09:49:15
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
]
Autor
Tema: 4 Reto de programacion (Leído 2145 veces)
Espectro Infernal
T0 d0: -> Mejorar 3 en raya
Moderación
Colaborador
Desconectado
Mensajes: 869
ESPECTRO INFERNAL
Re: 4 Reto de programacion
«
Respuesta #75 en:
Marzo 01, 2008, 05:19:19 »
No me paso purgo, hay muchos algoritmos que funcionen bien
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.
Bytes, Espectro Infernal.
En línea
.::MDavidMR::.
Colaborador
Desconectado
Mensajes: 486
Re: 4 Reto de programacion
«
Respuesta #76 en:
Marzo 01, 2008, 06:48:02 »
No habia visto este post xDD
Cita de: Deeo en Diciembre 23, 2007, 10:59:48
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:
Necesitas ser usuario para ver los enlaces
Crear Usuario
Hacer Sesion
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
T0 d0: -> Mejorar 3 en raya
Moderación
Colaborador
Desconectado
Mensajes: 869
ESPECTRO INFERNAL
Re: 4 Reto de programacion
«
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
Bytes, Espectro Infernal.
En línea
Ni0
Gran Colaborador
Desconectado
Mensajes: 1362
Ni0-inside the source code
Re: 4 Reto de programacion
«
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
Necesitas ser usuario para ver los enlaces
Crear Usuario
Hacer Sesion
Linux Registred User #460377
milton19
Recien Llegado
Desconectado
Mensajes: 1
Re: 4 Reto de programacion
«
Respuesta #79 en:
Junio 08, 2008, 09:52:38 »
hola nena
En línea
Espectro Infernal
T0 d0: -> Mejorar 3 en raya
Moderación
Colaborador
Desconectado
Mensajes: 869
ESPECTRO INFERNAL
Re: 4 Reto de programacion
«
Respuesta #80 en:
Julio 21, 2008, 04:00:15 »
El reto nunca llegó a acabar, que vas a hacer sami?
Bytes, Espectro Infernal.
En línea
Deeo
Habitual
Desconectado
Mensajes: 206
Ozzy Slave.
Re: 4 Reto de programacion
«
Respuesta #81 en:
Julio 23, 2008, 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.
«
Última modificación: Julio 23, 2008, 12:47:05 por Deeo
»
En línea
Los seres queridos hacen que la vida valga la pena, los enemigos...que tenga sentido.
plof
Miembro
Desconectado
Mensajes: 92
Re: 4 Reto de programacion
«
Respuesta #82 en:
Julio 24, 2008, 01:30:37 »
¿¿Para cuándo un nuevo reto??
Propongo el juego del ahorcado para el siguiente.
SaLuDos.
En línea
Páginas:
1
2
3
[
4
]
Comunidad Underground Hispana
|
Programacion
|
Programación
(Moderador:
programas gratis
) | Tema:
4 Reto de programacion
« anterior
próximo »
Ir a:
Por favor selecciona un destino:
-----------------------------
Foros De Consulta General
-----------------------------
=> Novedades
=> Dudas, Comentarios Y Sugerencias
=> Top 100
=> Off-Topic
=> Revista E-Zine
===> Noticias
-----------------------------
Phreaking, Hacking y Seguridad
-----------------------------
=> HacK GeneraL
===> Ingenieria Inversa
===> Encriptacion, Cryptografia
===> TV HACK
===> Cursos y Ezines
=====> Trucos Internet
=====> Textos Hacking
===> Defacing
=> Seguridad
=> Phreaking
===> Moviles
=> Bug y Exploits
===> Directorio de Exploits
=> Wargames, Retos Hack
-----------------------------
Hack Novato
-----------------------------
=> Hack para newbies
=> Todo Messenger
=> Troyanos y virus
-----------------------------
Sistemas Operativos
-----------------------------
=> Windows y otros sistemas operativos no libres
===> Problemas Tecnicos Windows
=> Sistemas operativos libres.
===> GNU/Linux
===> Manuales y Tutoriales
===> Descargas
-----------------------------
Programacion
-----------------------------
=> Programación
===> Programación Basica
===> Otros Lenguajes
===> Visual Basic y Net
===> ASM
===> Programacion Shell
===> Perl
===> Carbide C/C#/C++
===> Batch
===> SQL
=> Programacion para webmasters
===> Consultas Generales
===> Php
===> Html, XHTML, CSS
===> Java - Java Script
===> CMS O Scripts Pre-Fabricados
===> Posicionamiento en buscadores
-----------------------------
Artes Graficas
-----------------------------
=> Diseño Grafico
===> Battle Arts
===> Flash
===> Tutoriales
===> Galerías
===> Software
-----------------------------
Area Tecnica
-----------------------------
=> Networking & Wireless
=> Overclocking, Refrigeracion y demas
=> Hardware
===> Biblioteca Tecnica
=> Electronica Y Robotica
-----------------------------
Programas
-----------------------------
=> Software
===> Configuraciones de software
===> Pedidos de software
=> Cracks & Serialz
=> P2p, Bittorrent, Elinks
-----------------------------
Multimedia Y Divx
-----------------------------
=> Juegos PC Y Consolas
===> Dudas ayudas y comentarios de juegos
===> Pedidos de juegos
===> Juegos de Consola
=> Mp3
=> Multimedia
=> Peliculas Divx
-----------------------------
Entretenimiento Y sitios de interes
-----------------------------
=> Juegos, Humor y Adultos. (Diversión)
===> Adultos
=> Paginas Webs Recomendadas
=> Videos
Powered by SMF 1.1.6
|
SMF © 2006-2007, Simple Machines LLC
Loading...