Gato, Tres en raya, Tic tac toe en Java.

Por Francisco I. Leyva en General, Java el 28.ago.2006

JavaEsta vez he decidido publicar unos de los programas que me dejaron como proyecto en la Universidad, en palabras comunes el programa lo que permite es jugar al Tic tac toe, tres en raya o el gato como lo conocemos por acá.., puedes jugar contra otra persona o contra la máquina, tiene una interfaz de usuario simple y sonidos para hacer más llamativo todo el juego en sí. =)

En tecnisismos, lo que nos pidieron para realizar este programa fue primeramente en la parte visual o de interfaz de usuario:

  • Utilizar eventos para los componentes.
  • Menús, botones, gráficos, etc.

En lo que respecta a la parte programática:

  • Implementar el algoritmo Min-Max para simular la inteligencia artificial de la máquina.
  • Lograrlo mediante el uso de árboles y recursión.

El algoritmo del MiniMax como lo llamabamos es el que nos permite ponerle la inteligencia a la máquina al momento de mover las piezas, entre más grande hagamos el árbol de posibles movimientos, más inteligente será la maquina. En mi caso utilicé el árbol completo entonces es imposible vencer a la máquina en este programa.. :P si no me crees intenta ganarle. xD

Captura de Pantalla:

Gato..

Descarga el programa y el código fuente dando click aquí.

El programa está hecho usando el IDE Netbeans, pero dentro de la carpeta “dist” puedes encontrar el “ejecutable jar”(gato.jar) para correr el programa sin necesidad de tener Netbeans. =)

Espero que a alguien le llegue a servir de algo, cualquier duda o comentario es bien recibido. =)

Etiquetas: ,
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Meneame
  • Technorati
  • Twitter

110 Comentarios

catalina

11. oct, 2006

como puedo aplicar esta tecnica del minimax con el triqui en java, pues he tratado de bajar tu programa y no puedo. te agradeceria y me ayudes enviando el programa a mi correo.

Francisco I. Leyva

11. oct, 2006

Hola, no es necesario que te envie a tu correo el programa, lo bajas directamente de la siguiente dirección:

http://www.panchosoft.com/archivos/gato.zip

Para abrirlo sólo tienes que descomprimir este archivo a cualquier carpeta, vas a esa carpeta y buscas dentro de ella la carpeta de nombre “dist” y entras ahí, verás un archivo con nombre “Gato.jar” y solamente tienes que dar doble click en él para ejecutarlo.

Para ver el código fuente y el uso del minimax puedes buscar en las carpetas “src” y “build” los archivos con extensión “.java”, pero te recomiendo que descargues el IDE Netbeans(www.netbeans.org) y abras el proyecto con él, ya que ahí fue creado.

Saludos. ;)

William

13. nov, 2006

gracias por la aplicacion que genial esta

cristian p

01. dic, 2006

esta buenismo,con que lo isite jbuilder?

me gustaria saber como aplicastes los arboles,
resp porfa a polanquito-1@hotmail.com

suerte xauu

LILIANA

04. dic, 2006

Hola. me gustaria que me enviaras el diagrama de flujo y el algoritmo. si no es mucho pedir, ya que no se nada de esto y es para un trabajo final. gracias.

Francisco I. Leyva

08. dic, 2006

Hola, bueno diagrama de flujo no tengo, pero el algoritmo lo puedes encontrar fácilmente en Google, sólo poniendo como clave de búsqueda “Algoritmo Minimax”.

Encontrarás muchas explicaciones, ya que el algoritmo es el mismo en todos los programas que lo implementen.

En este programa se usa un árbol completo para hacer imposible que la computadora pierda.

Saludos. =)

Antonio

19. ene, 2007

Está muy bien todo eso que hablan, pero yo programé en un par de horas un tres en raya en el que la máquina era invencible sin tanta historia. Lo que quiero decir es que para que sirve realmente el algoritmo min max.

Pedro

20. ene, 2007

Oye me podria ayudar a hacer un gato para jugar en red con gui
ya tengo todo solo me falta la plantilla del juego como el tuyo para poder marcar los ganadores solo tengo la conexion y la vista, siquieres te mando el codigo a tu correo.Por favor

mari

25. ene, 2007

hola. conoces algun otro algoritmo para la simular la inteligencia artificial de la maquina?? alguno en el que no tenga q usar arboles!

mari

25. ene, 2007

esta bueno tu blog. espero tu respuesta. GRACIAS!!!

luis

12. mar, 2007

hola, podrias orientarme acerca de el juego de numeros de acomodarlos en orden cuando tienes solo un espacio, del 1 al 5, es para IA. gracias

Alberthoven

19. mar, 2007

Hola. En respuesta a quien programo un 3 en raya invencible en solo 2 horas, ¡enhorabuena, crack!, pero lo salgoritmos de busqueda (“tanta historia”, como tu dices) no solo son utiles sino IMPRESCINDIBLES a ciertos niveles. Piensa en esto: trata de implementar el Go-Moku (algo parecido al 5 en raya, pero en un tablero de 19 x 19) sin emplear un algoritmo de este tipo a ver cuantos años tardas… antes de cansarte y dejarlo.
Por favor, un respeto a la algoritmica que es lo que posibilita implementar problemas que de otra manera searia impensable.

carlos

28. mar, 2007

hola soy carlos y estoy buscando por la red algun programa de tres en raya para visual basic o similar. Para posteriormente realizar mediante un protocolo ethernet una conexion a un s7-300 (314 ifm)y hacer un tres en raya neumatico.
me gustaria si me pudieses dar mas imformación sobre el programa….gracias
un saludo!!!

Hector

19. abr, 2007

Hola oye quisiera saber en que parte del codigo haces el calculo de la funcion estatica y donde le das la profundidad del arbol porfavor te agradeceria que me contestaras a mi correo… blessed_skate@hotmail.com

Volaverunt

26. abr, 2007

Alguien ha programado un ajedrez con minimax ?? Bueno, es que en nuestro proyecto final, nos enfermamos queriendo hacer un ajedrez, pero aun no podemos implementar este metodo, alguien podria enviarme alguna sugerencia por favor ?

Francisco I. Leyva

27. abr, 2007

Hola, lamento no haber respondido antes. =)

El juego del gato también podría programarse utilizando condiciones y no inteligencia artificial, el beneficio de la IA no es poder hacer a la máquina invencible en el Gato es resolver otro tipo de problemas y situaciones mucho más complejas ,como bien menciona Alberthoven. En la universidad me pidieron que usara ese algoritmo y por eso lo hice así. =)

Información sobre el algoritmo la pueden encontrar fácilmente en Google pero de preferencia en inglés. =)

El código del Gato está hecho para generar el árbol de posibilidades completo, por esa razón no se le puede asignar profundidad. De hecho hice al principio un con profundidad de 2 pero por esa misma razón no era perfecto y podías vencer a la máquina.

Un ajedrez sería super difícil de implementar con este algoritmo, imagina como sería el árbol de las posibilidades de movimiento. Y aunque puedas utilizar técnicas como la poda alfa beta (Google) para no hacer mejores elecciones creo que es algo muy difícil de hacer. x_x

Mira, encontré esta página donde explican bien como hacerlo, aunque a estas fechas seguramente ya la miraste: :P

http://www.dcc.uchile.cl/~jegger/memoria/node36.html

Saludos. =)

pedro

02. may, 2007

hola porfa necesito el codigo en java del tres en raya applet

william

17. may, 2007

hola amigos quisiera que me hiciera llegar algoritmos para hacer juegos en netbeans ya que estoy aprendiendo se lo agraDECERIA INDEPENDENCIA620@HOTMAIL.COM

monika

31. may, 2007

hola!!! poes el programa esta muuuy bien hecho … gracias!!!

me sirvio mucho !!!!

Javier

02. jun, 2007

Hola, te cuento que tu implementación falla, de manera que si la maquina tiene posibilidad de ganar no lo hace, esto le sucede cuando se le presenta una oprtunidad de ganar en una diagonal.

ej: sigue esta jugada y te daras cuenta.

siendo el tableo asi:

012
345
678

juega estas posiciones. (no importa donde juega la maquina)
(*) son las posiciones a jugar

000
00*
000

000
*00
000

000
000
00*

aqui despues de la tercer jugada a la maquina se le presenta la oportunidad de ganar y no lo hace!!!!!

saludos!!!
Javier

Marco

03. jun, 2007

como implementar el juego de tres en raya o el gato con el metodo poda alfa-beta

mauro

05. jun, 2007

hola todos el programa de verdad esta muy bueno pero tengo una pregunta, donde se genera el arbol, es que me mandaron hacer el ejercicio y no se como generar el arbol.
pues el ejercicio q me mandaron hacer no es tan complicado puesto que no tiene q ser con graficos ni nada solo necesito los metodos para poder hacerlo en java.
te agradezco tu colaboracion y si puedes mandamelo a este mail.
vegamaur@gmail.com

mauro

05. jun, 2007

y si pudes lo mas pronto posible ya que es para el jueves en la noche
gracias y disculpa la molestia pero es que esto no lo entiendo muy bien

LGRodriguez

14. jun, 2007

hola todos el programa de verdad esta muy bueno pero tengo una pregunta, como podria hacer el juego del tres en raya pero en codigo de java eclipse…..pues el ejercicio q me mandaron hacer..no tiene q ser con graficos ni nada solo necesito los metodos para poder hacerlo en java eclipse.
Te agradezco de antemano tu colaboracion…gracias

josil

16. jun, 2007

hola necesitamos de tu ayuda requerimos el codigo fuente del juego del gato en java que no sea grafico osea que fubciones desde simbolo del sistema lo mas sencilo pero que funciones no se si puedas ayudar,

Francisco I. Leyva

31. jul, 2007

Que tal todos =) , el código lo pueden tomar directamente del programa. Las clases importantes están separadas de lo visual, sólo hay que estudiar un poco el código.

Esteban

21. ago, 2007

hola realmente este codigo esta demasiado chiva… buenisimo… mi consulta es que si no tienes uno un poco mas basico… aunque este es 100% comprendible.. creo que me seria de gran ayuda Gracias

daisy

12. oct, 2007

la implementacion esta interesante, me va ayudar mucho para crear un programa diferente, y felicitaciones por tu programa

lor

18. oct, 2007

holaa me gusto tu programa solo q yo necesito hacere un gato con graficos mas sencillos , y que solo aparezca una x y una o, como podria hacerlo?

«™Antonio ¤ Z.M.®»

23. oct, 2007

hola kisiera saber como se implementa el juego del gato en JGrasp pero sin utilzar applet y sin utilizar el arbol solo una matriz y ke lea un archivo .txt donde al estar en blanco se vera asi:
- – -
- – -
- – -

necesito ke lea el archivo ke tire luego se cierra el archivo y se abre otro y hace la sig. tirada y asi suscesivamente hay un programa ke ve kien gana pero ese no me interesa jajaja por fa ayudaaaa!!

JEsus..

23. oct, 2007

Alguien por favor me podria ayudar a hacer el juego de tetris en java netbeans..?….. si tiene el codigo fuente mucho mejor .. gracias..

Enrique

27. oct, 2007

Buenas , estoy haciendo un gato tridimensional , y bueno la clase ComputadoraIA me ha ayudado bastante , yo no quiero codigo ni mucho menos.

Solo si me podrias ayudar a empaquetar un .jar para hacer distribucion de mi proyecto , estoy manejando netbeans 5.5.1 y creo es muy parecido al 5.5 , he intentado en una maquina con arquitectura amd64 y lo creo , pero solo lo ejecuta en esa maquina , he leido que la JVM no es la misma para maquinas x86 y amd64, sabes algo de casualidad ?

Francisco I. Leyva

28. oct, 2007

No me ha tocado compilar en máquinas de 64 bits pero la lógica de Java es que el bytecode (nuestro programa) corre en cualquier máquina virtual sea en Windows/Linux/Mac 32/64 Bits.

Da más detalles del error =)

marcos

29. oct, 2007

una pregunta, me ayudsa a hacer el ta te ti pero con el visual basic, tenes idea de como se hace?

Enrique

30. oct, 2007

En realidad no me marca ningun error , solo que al hacer click en el .JAR no pasa nada.

Me podrias decir como empaqueste tu ?.

No escribi gracias en mi primer post asi que lo hago ahora .

GRACIAS !!

mario

06. nov, 2007

pasenme un juevo en java o eclipse y yo les pasare cono jakear tarejetas de celulares
lo necesito pronto para presentar como mi projet

mario

06. nov, 2007

tego de todo y para todos porfa mandemen el juego en java o esclipse co en codigo a mi correo
chau se cuidan

Puri

13. nov, 2007

Buenas:
Yo, estoy intentando hacer un tres en raya donde se pueda ganar al ordenador, pero no siempre.
Estoy haciendo los arboles, y utilizando las simetrias, es decir, la primera ficha solo tiene 3 posiciones y asi…
La cosa es que me parece mucho trabajo, y tal vez halla una forma más fácil de hacerlo.
Mi arbol tiene una profundidad de 6, para llegar a colocar todas las fichas.
Con lo cual de colocar esa primera ficha, salen un montón de ociones.
Si me pudieras decir si voy por el buena camino, te lo agradeceria.
Muchas gracias.

Puri

13. nov, 2007

Buenas, otra vez.
He estado mirando tu codigo, y bien, me he aclarado mucho.
Como yo queria hacer que no siempre gane ,estaba haciendo las opciones para decidir, pero veo que eso es mucho trabajo. y lo haré aleatoriamente o algo.
Muchas gracias. Me ha servido de mucho tu blog

Jose Luis

15. nov, 2007

Saludos: me gustaria saber como hiciste la funcion de evaluacion ,gracias

lino

23. nov, 2007

felicidades por tu juego me parece muy interesante globalmente pero me gustaria pedirte el favor de explicarme como crear el .jar
te agradezco que me respondas al correo
de nuevo felicidades

Edito

25. nov, 2007

Saludos, me hace falta con caracter urgente el codigo de este famoso programa(tic tac toe), si pudieran que sea en java, aunque en cualquier leguaje me gustaria, muchas gracias de antemano.

Carolina

28. nov, 2007

Como puedo ver el codigo del juego

Carolina

28. nov, 2007

hola me gustaria que el cogigo me lo dieras en c++

Francisco I. Leyva

28. nov, 2007

El código fuente está en el archivo .zip.

No dispongo del código en C++.

michael

04. dic, 2007

hola..
tienes disponible un modelo de clases para el juego??

Chavi

27. dic, 2007

Mil gracias, caballero.
A algunos nos has salvado la vida, y a otros estas a punto de salvársela.
Saludos desde España.

Francisco I. Leyva

28. dic, 2007

Hombre, es un orgullo saber que tanta gente ha descargado mi gato. =)

Ya me han tocado ver otros juegos que traen como base este juego y es muy muy satisfactorio sinceramente.

Saludos y gracias.

ZapataX

22. ene, 2008

buenas saludos al autor a todos los demas

me gustaria que me ayudaran a implementar este juego pero para usarlo en red

-Adriana

27. ene, 2008

Hola, esta bueno el juego, pero me gustaría saber como puedo hacer para aplicarlo para J2ME. Estoy haciendo mi tesis en J2ME, y es un juego en red para celulares.

Edwin

24. feb, 2008

Hola, te felicito por tu programa, es exactamente lo que necesito en este momento para mi proyecto, pero necesito ejecutarlo en JCreator, no en NetBeans (cosas de maestros) y compile todos los archivos .java de la carpeta src y algunos tiran errores y el main no encuntra la clase Gato. me puedes ayudar con este problema?

estela

29. feb, 2008

ummm……lamentablemente no he podido descargar tu super juego…ni por una ni por otra dirección… si puedes arreglarlo te lo agradecería…

joel

29. mar, 2008

Xvr haces bien amigo ahora solo tengo que estudiar los pasos que has hecho .
gracias brother

Hector Flores

20. abr, 2008

Está genial el prg, te felicito solo tiene la falla que te comentaron en unos comens atras, en el cual la maquina no gana.

carlex

25. abr, 2008

hola francisco megustaria saber como puedo implementar tu codigo de gato en jess para q sea un super sistema experto en el juego d tres en raya

María Magdalena

28. abr, 2008

Hola que tal. Alguien podría ayudarme a conseguir el codigo en java con interfaces graficas El juego del Gato?

Alexander

30. abr, 2008

Hola:
Le escribo desde Cuba. Estoy haciendo mi tesis sobre el algoritmo minimax, (como aplicarlo a diferentes juegos que se desarrollan en mi universidad) me gustaría que me ayudaran con cualquier bibliografía sobre el tema, si alguien tiene el juego en c++ y me lo pudiera facilitar le estaría muy agradecido.

Alexander

30. abr, 2008

Hola Carolina:

Si pudiste conseguir el codigo en c++, me lo podrias facilitar.
Si no es mucha molestia, me lo podrias a mandar a esta direccion:
asardina@estudiantes.uci.cu

JESUS

05. may, 2008

xevere, causa muchas gracias por los cods

david

12. may, 2008

hola francisco y todos los lectores
como bien dices en tu comentario sobre el programa, lo realizaste con el arbol completo…
yo tambien estoy haciendo un trabajo sobre algoritmos MiniMax pero necesito trabajar en una funcion de evaluacion que me permita no recorrer el arbol en toda su profundidad, saben algo de esto?
especialmente para el juego de los gatos y el raton.

Raidel

26. may, 2008

Yo también estoy trabajando en ese problema, pero ya el arbol de jugadas se hace “un poco” mas grande, pues el tablero es de 8 x 8 y se hace un tanto dificil buscar por todo el arbol de juegos, tal y como dice david, si pudieran darnos alguna idea de la función heuristica que pudieramos usar . . . .

joel

31. may, 2008

oy ya baje todo lo q tienes pero no lo puedo ejecutar o mas bien no se como hacerle. porfa ayudenme

david

03. jun, 2008

hola estoy programando un “Gatos y Raton” con minimax y Alfa – Beta too pero estoy atascado con la misma funcion heuristica, para evaluar las posiciones del juego.
SInceramente en la web no viene mucha informacion sobre esto, todo muy teorico y baba, pero mas nada,
agradeceria en el alma a quien me pueda ayudar,
David

Raidel

06. jun, 2008

weno hasta ahora yo lo ke me hice una funcion ke simplemente me contaba la cantidad de filas por las ke estaban repartidos los gatos, y la separacion de dichas filas, y mientras menos me de dicha función mas fuerte es la posicion en ese tablero, teniendo como resultado asi, ke la mejor posicion posible para los gatos es akella en la ke todos esten en una misma fila, haciendo imposible el paso del raton, pero esto es algo muy chapuzero, así que si se les ocurreo otra idea posteenla

Jaime david cruz sandoval

27. jun, 2008

oye quiero saber como se puede hacer en java un programa que reconozca un texto y lo haga en matriz y me diga cuantas filas y cuantas columans tiene el texto porfa es urgente gracias

Jose

27. jul, 2008

me puedes dar el codigo de funcione con el compilador JCreator Pro

michael

06. ago, 2008

copia las clases que estan en el src y pegalas en una nueva clase del IDE que estés usando.

Viviana

09. ago, 2008

Necesito ayuda, nos dejaron en la universidad hacer un juego parecido al gato, pero mas dificil, entonces para ver si me podria ayudar, gracias

Pedro

19. ago, 2008

Hola, me gustaria que me ayudases. Me baje el juego del gato que implementastes, y me gusta mucho, pero lo que quiero es el juego pero solo para dos jugadores. Quiero quitar la parte de jugar con la computadora, pero al hacerlo me salen muchos fallos.

Me puedes ayudar?
Es urgente.

Gracias

Pedro

19. ago, 2008

Eli

30. sep, 2008

gracias

Pau

09. oct, 2008

Hola me gustaria saber como se compila el juego desde Jcreator ya que solo funciona el .jar, cuado se hace directa la compilacion, marca muchos errores, ademas quisiera saber como se implementa con hilos. Si puedieran mandar la solucion a este correo pauly_54@hotmail.com.

Muchas gracioas.

yaha

04. nov, 2008

quisiera el codigo del juego del gato.Esta bueno.Felicitaciones.

yaha

04. nov, 2008

pablo alfonso gonzalez paez

25. nov, 2008

hoola mi estimado francisco lo que pasa esque quiero abrir y puues no puedo abrir el documento o mas biien para poder jugar y quiero pedirte que me mandes por favor la aplicacion porque no digo que no este correcta si no que yo no puedo abrirlo en mi PC pero por si puedes enviermelas este es mi correo sale pkso_10@hotmail.com

Daniel

12. dic, 2008

hola compadre muy buena la aplicacion, pero se podria aplicar este mismo juego a un celular. si se puede como lo ago.

juan carlos

21. ene, 2009

hola jeje yo necesito hacer un programar el juego del gato alguien me podrian decir cual es el codigo porfavor en verdad lo necesito se los agradecere bastante
si me lo puedes eviar mejor jiji mi correo es jcgodo89@hotmail.com

yuniel

04. feb, 2009

tengo una duda y espero que me lo expliquen, es sobre el algoritmo minimax. Yo entiendo más o menos cómo funciona, pero lo que no entiendo es cómo la máquina logra de todas las posibles jugadas que ella tenga escoger la mejor. Yo he intentado documentarme sobre eso pero no entiendo

yuniel

04. feb, 2009

tengo una duda y espero que me lo expliquen, es sobre el algoritmo minimax. Yo entiendo más o menos cómo funciona, pero lo que no entiendo es cómo la máquina logra de todas las posibles jugadas que ella tenga escoger la mejor. Yo he intentado documentarme sobre eso pero no entiendo. Me corresponde en mi universidad implementar el juego tic tac toe.

libia

14. feb, 2009

HOLA…EN EL JUEGO DE TRES EN RAYA (TRIQUI 3D) 1.cual seria la probalidad de ganar del jugador que comienza?.
2.establecer una estrategia 100% ganadora del jugador que comienza.

even perez

10. mar, 2009

hola hermano pues te felicito esta extraordinario, justo necesitaba ver algo nuevo pues ya lo vi gracias, y sigan adelante

luis

18. mar, 2009

hola que tal mira estube revisando tu programa y cuando le doy doble click en gato.jar no lo ejecuta solo me abre el winrar para descomprimir las carpetas como le puedo hacer para ejecutarlo sin tener que instalar en IDE Netbeans gracias por la ayuda

masoli

19. mar, 2009

alguien me puede ayudar para que corra mi programa. se los agradeceré

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.net.*;
import java.applet.*;
public
class asd extends Applet implements MouseListener {
/**
* White’s current position. The computer is white.
*/
int white;
/**
* Black’s current position. The user is black.
*/
int black;
/**
* The squares in order of importance…
*/
final static int moves[] = {4, 0, 2, 6, 8, 1, 3, 5, 7};
/**
* The winning positions.
*/
static boolean won[] = new boolean[1 << 9];
static final int DONE = (1 << 9) – 1;
static final int OK = 0;
static final int WIN = 1;
static final int LOSE = 2;
static final int STALEMATE = 3;
/**
* Mark all positions with these bits set as winning.
*/
static void isWon(int pos) {
for (int i = 0 ; i < DONE ; i++) {
if ((i & pos) == pos) {
won[i] = true;
}
}
}
/**
* Initialize all winning positions.
*/
static {
isWon((1 << 0) | (1 << 1) | (1 << 2));
isWon((1 << 3) | (1 << 4) | (1 << 5));
isWon((1 << 6) | (1 << 7) | (1 << 8));
isWon((1 << 0) | (1 << 3) | (1 << 6));
isWon((1 << 1) | (1 << 4) | (1 << 7));
isWon((1 << 2) | (1 << 5) | (1 << 8));
isWon((1 << 0) | (1 << 4) | (1 << 8));
isWon((1 << 2) | (1 << 4) | (1 << 6));
}
/**
* Compute the best move for white.
* @return the square to take
*/
int bestMove(int white, int black) {
int bestmove = -1;
loop:
for (int i = 0 ; i < 9 ; i++) {
int mw = moves[i];
if (((white & (1 << mw)) == 0) && ((black & (1 << mw)) == 0)) {
int pw = white | (1 << mw);
if (won[pw]) {
// white wins, take it!
return mw;
}
for (int mb = 0 ; mb < 9 ; mb++) {
if (((pw & (1 << mb)) == 0) && ((black & (1 << mb)) == 0)) {
int pb = black | (1 << mb);
if (won[pb]) {
// black wins, take another
continue loop;
}
}
}
// Neither white nor black can win in one move, this will do.
if (bestmove == -1) {
bestmove = mw;
}
}
}
if (bestmove != -1) {
return bestmove;
}
// No move is totally satisfactory, try the first one that is open
for (int i = 0 ; i < 9 ; i++) {
int mw = moves[i];
if (((white & (1 << mw)) == 0) && ((black & (1 << mw)) == 0)) {
return mw;
}
}
// No more moves
return -1;
}
/**
* User move.
* @return true if legal
*/
boolean yourMove(int m) {
if ((m 8)) {
return false;
}
if (((black | white) & (1 << m)) != 0) {
return false;
}
black |= 1 << m;
return true;
}
/**
* Computer move.
* @return true if legal
*/
boolean myMove() {
if ((black | white) == DONE) {
return false;
}
int best = bestMove(white, black);
white |= 1 << best;
return true;
}
/**
* Figure what the status of the game is.
*/
int status() {
if (won[white]) {
return WIN;
}
if (won[black]) {
return LOSE;
}
if ((black | white) == DONE) {
return STALEMATE;
}
return OK;
}
/**
* Who goes first in the next game?
*/
boolean first = true;
/**
* The image for white.
*/
Image notImage;
/**
* The image for black.
*/
Image crossImage;
/**
* Initialize the applet. Resize and load images.
*/
public void init() {
notImage = getImage(getCodeBase(), “images/not.gif”);
crossImage = getImage(getCodeBase(), “images/cross.gif”);
addMouseListener(this);
}
public void destroy() {
removeMouseListener(this);
}
/**
* Paint it.
*/
public void paint(Graphics g) {
Dimension d = getSize();
g.setColor(Color.black);
int xoff = d.width / 3;
int yoff = d.height / 3;
g.drawLine(xoff, 0, xoff, d.height);
g.drawLine(2*xoff, 0, 2*xoff, d.height);
g.drawLine(0, yoff, d.width, yoff);
g.drawLine(0, 2*yoff, d.width, 2*yoff);
int i = 0;
for (int r = 0 ; r < 3 ; r++) {
for (int c = 0 ; c < 3 ; c++, i++) {
if ((white & (1 << i)) != 0) {
g.drawImage(notImage, c*xoff + 1, r*yoff + 1, this);
} else if ((black & (1 << i)) != 0) {
g.drawImage(crossImage, c*xoff + 1, r*yoff + 1, this);
}
}
}
}
/**
* The user has clicked in the applet. Figure out where
* and see if a legal move is possible. If it is a legal
* move, respond with a legal move (if possible).
*/
public void mouseReleased(MouseEvent e) {
int x = e.getX();
int y = e.getY();
switch (status()) {
case WIN:
case LOSE:
case STALEMATE:
play(getCodeBase(), “audio/return.au”);
white = black = 0;
if (first) {
white |= 1 << (int)(Math.random() * 9);
}
first = !first;
repaint();
return;
}
// Figure out the row/column
Dimension d = getSize();
int c = (x * 3) / d.width;
int r = (y * 3) / d.height;
if (yourMove(c + r * 3)) {
repaint();
switch (status()) {
case WIN:
play(getCodeBase(), “audio/yahoo1.au”);
break;
case LOSE:
play(getCodeBase(), “audio/yahoo2.au”);
break;
case STALEMATE:
break;
default:
if (myMove()) {
repaint();
switch (status()) {
case WIN:
play(getCodeBase(), “audio/yahoo1.au”);
break;
case LOSE:
play(getCodeBase(), “audio/yahoo2.au”);
break;
case STALEMATE:
break;
default:
play(getCodeBase(), “audio/ding.au”);
}
} else {
play(getCodeBase(), “audio/beep.au”);
}
}
} else {
play(getCodeBase(), “audio/beep.au”);
}
}
public void mousePressed(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public String getAppletInfo() {
return “TicTacToe by Ishfaq Abida”;
}
}

masoli

19. mar, 2009

alguien me puede ayudar para que corra mi programa. se los agradeceré o alguien me puede enviar un código que corra.

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.net.*;
import java.applet.*;
public
class asd extends Applet implements MouseListener {
/**
* White’s current position. The computer is white.
*/
int white;
/**
* Black’s current position. The user is black.
*/
int black;
/**
* The squares in order of importance…
*/
final static int moves[] = {4, 0, 2, 6, 8, 1, 3, 5, 7};
/**
* The winning positions.
*/
static boolean won[] = new boolean[1 << 9];
static final int DONE = (1 << 9) – 1;
static final int OK = 0;
static final int WIN = 1;
static final int LOSE = 2;
static final int STALEMATE = 3;
/**
* Mark all positions with these bits set as winning.
*/
static void isWon(int pos) {
for (int i = 0 ; i < DONE ; i++) {
if ((i & pos) == pos) {
won[i] = true;
}
}
}
/**
* Initialize all winning positions.
*/
static {
isWon((1 << 0) | (1 << 1) | (1 << 2));
isWon((1 << 3) | (1 << 4) | (1 << 5));
isWon((1 << 6) | (1 << 7) | (1 << 8));
isWon((1 << 0) | (1 << 3) | (1 << 6));
isWon((1 << 1) | (1 << 4) | (1 << 7));
isWon((1 << 2) | (1 << 5) | (1 << 8));
isWon((1 << 0) | (1 << 4) | (1 << 8));
isWon((1 << 2) | (1 << 4) | (1 << 6));
}
/**
* Compute the best move for white.
* @return the square to take
*/
int bestMove(int white, int black) {
int bestmove = -1;
loop:
for (int i = 0 ; i < 9 ; i++) {
int mw = moves[i];
if (((white & (1 << mw)) == 0) && ((black & (1 << mw)) == 0)) {
int pw = white | (1 << mw);
if (won[pw]) {
// white wins, take it!
return mw;
}
for (int mb = 0 ; mb < 9 ; mb++) {
if (((pw & (1 << mb)) == 0) && ((black & (1 << mb)) == 0)) {
int pb = black | (1 << mb);
if (won[pb]) {
// black wins, take another
continue loop;
}
}
}
// Neither white nor black can win in one move, this will do.
if (bestmove == -1) {
bestmove = mw;
}
}
}
if (bestmove != -1) {
return bestmove;
}
// No move is totally satisfactory, try the first one that is open
for (int i = 0 ; i < 9 ; i++) {
int mw = moves[i];
if (((white & (1 << mw)) == 0) && ((black & (1 << mw)) == 0)) {
return mw;
}
}
// No more moves
return -1;
}
/**
* User move.
* @return true if legal
*/
boolean yourMove(int m) {
if ((m 8)) {
return false;
}
if (((black | white) & (1 << m)) != 0) {
return false;
}
black |= 1 << m;
return true;
}
/**
* Computer move.
* @return true if legal
*/
boolean myMove() {
if ((black | white) == DONE) {
return false;
}
int best = bestMove(white, black);
white |= 1 << best;
return true;
}
/**
* Figure what the status of the game is.
*/
int status() {
if (won[white]) {
return WIN;
}
if (won[black]) {
return LOSE;
}
if ((black | white) == DONE) {
return STALEMATE;
}
return OK;
}
/**
* Who goes first in the next game?
*/
boolean first = true;
/**
* The image for white.
*/
Image notImage;
/**
* The image for black.
*/
Image crossImage;
/**
* Initialize the applet. Resize and load images.
*/
public void init() {
notImage = getImage(getCodeBase(), “images/not.gif”);
crossImage = getImage(getCodeBase(), “images/cross.gif”);
addMouseListener(this);
}
public void destroy() {
removeMouseListener(this);
}
/**
* Paint it.
*/
public void paint(Graphics g) {
Dimension d = getSize();
g.setColor(Color.black);
int xoff = d.width / 3;
int yoff = d.height / 3;
g.drawLine(xoff, 0, xoff, d.height);
g.drawLine(2*xoff, 0, 2*xoff, d.height);
g.drawLine(0, yoff, d.width, yoff);
g.drawLine(0, 2*yoff, d.width, 2*yoff);
int i = 0;
for (int r = 0 ; r < 3 ; r++) {
for (int c = 0 ; c < 3 ; c++, i++) {
if ((white & (1 << i)) != 0) {
g.drawImage(notImage, c*xoff + 1, r*yoff + 1, this);
} else if ((black & (1 << i)) != 0) {
g.drawImage(crossImage, c*xoff + 1, r*yoff + 1, this);
}
}
}
}
/**
* The user has clicked in the applet. Figure out where
* and see if a legal move is possible. If it is a legal
* move, respond with a legal move (if possible).
*/
public void mouseReleased(MouseEvent e) {
int x = e.getX();
int y = e.getY();
switch (status()) {
case WIN:
case LOSE:
case STALEMATE:
play(getCodeBase(), “audio/return.au”);
white = black = 0;
if (first) {
white |= 1 << (int)(Math.random() * 9);
}
first = !first;
repaint();
return;
}
// Figure out the row/column
Dimension d = getSize();
int c = (x * 3) / d.width;
int r = (y * 3) / d.height;
if (yourMove(c + r * 3)) {
repaint();
switch (status()) {
case WIN:
play(getCodeBase(), “audio/yahoo1.au”);
break;
case LOSE:
play(getCodeBase(), “audio/yahoo2.au”);
break;
case STALEMATE:
break;
default:
if (myMove()) {
repaint();
switch (status()) {
case WIN:
play(getCodeBase(), “audio/yahoo1.au”);
break;
case LOSE:
play(getCodeBase(), “audio/yahoo2.au”);
break;
case STALEMATE:
break;
default:
play(getCodeBase(), “audio/ding.au”);
}
} else {
play(getCodeBase(), “audio/beep.au”);
}
}
} else {
play(getCodeBase(), “audio/beep.au”);
}
}
public void mousePressed(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public String getAppletInfo() {
return “TicTacToe by Ishfaq Abida”;
}
}

clanero

08. may, 2009

Hola, esta muy bueno este blog…. ahora lo k necesito de k si alguien a implementado el juego de los gatos y el raton o tiene algo parecido me lo envie a eramirezr@estudiantes.uci.cu gracias…..chao…..

Name (requerido)antonio

23. may, 2009

hola soy un amigo de chile y necesito hacer un programa pareceido para la universidad el programa se llama eclipse y tengo k programas un juego que simule un torneo de 4 jugadores con eliminacion directa de el juego del gato si me puedes ayudar seria de mucha ayuda
gracias de antemano

Miranda

27. may, 2009

Hola , necesito hacer un gato solo que en vez de 3X3 sea 5X5 y se ejecute desde consola no es necesario crear una interfaz grafica!! por favor quien me pueda ayudar a hacer se los agradeceria , mi mail es geli_1989_rbd@hotmail.es

GRACIAS!

Name (requerido)ghost

10. jun, 2009

por favor alguien tiene el codigo fuente del gato entre el usuario y el pc en bisual basic …….

Alicia Machado Desnuda

28. jun, 2009

hh… strange :)

Jesus

12. jul, 2009

Esta muy bueno tu programa aunque aun no entiendo como esta funcionando el maximo y minimo espero y me des alguna pista de como analizar esta parte el codigo para que me quede todo entendible

Jan

09. nov, 2009

La verdad agradezco mucho tu programa, porq m ayudo mucho. Pero tengo una duda y espero puedas ayudarm, como hago un codigo igual en netbeans para realizar solo los movimientos de un caballo de ajedrez en todo el tablero??? La verdad no tengo ni idea.

Espero puedas ayudarm y gracias…

lacc

22. nov, 2009

alguien de aki me podri pasar otro gato como ven este ya es muy famoso y ps kisiera encontrar otro para x fa si hay alguno mas me lo pasen x fa

flanders chino

01. dic, 2009

hola =)
si alguna chica se mete aesta pagina agregeme porfas bay
las kiero chicas

martin

08. dic, 2009

Oye mi amigo ¿como haces para insertar un jlabel dentro de otro? es decir el f3 dentro de tablero
Gracias

daniel

08. dic, 2009

hola soy un estudiante de la carrera informatica tengo un proyecto en cual devo realizar un programa, deve de ser un juego grafico sensillo no cuento con ejemplos de codigo fuente te agradeseria si pudieras enviarme oexplicarme como puedo desarrollar graficos y un ejemplo de codigo fuente sensillo,grasias

atte. danihcvivo

daniel

08. dic, 2009

se me olvido el correo
danihcvivo@hotmail.com

SilveR

09. dic, 2009

Buneas recontra bueno tu programita del tres en raya , ya que a mi tambien me pidieron en la actualidad hacer un tres en raya , en la cual la maquina sea invencible, ya que si le ganan me bajan puntos :) en nota :S:S:S, me podrias dar unas pautas o dudas que tenga ? aki te dejo mi msn gabino_147@hotmail.com

3l_2ra2

18. dic, 2009

Me parece muy interesante el tema, solo que quisiera saber si la interfaz del juego que se publica la brinda el mismo IDE Net Beans o es hecha con otro programa en especifico. Gracias de antemano

3l_2ra2

18. dic, 2009

Javier ciertamente probe lo que dijiste y me convenci de que el programa tiene un error

Anuki

16. ene, 2010

Yo necesito que alguien me pase el codigo en java de hundir la flota con un solo barco. Gracias

Barbara

17. ene, 2010

Hola me gustaria saber que función heurística utilizaste en el algortimo minimax para hacer la evaluación de los nodos mas prometedores.

Albita

16. mar, 2010

quisiera saber como hacer los recorridos de un arbol en java por fa me ppuedes ayudar

Sergio Rodriguez

20. mar, 2010

hola, he mirado tu algoritmo y valla que es demasiado bueno…me ha impresionado jeje…bueno resulta que tengo un proyecto… pero no se como implementarlo…lo que pasa es que necesito que el maximizador o el primero que juega que es uno solo pueda jugar una ves…y de hay en adelante juegue la maquina contra la maquina…aparte de eso sacar el arbol de posibles trayectorias antes de escoger una….lo de las trayectorias yo las puedo implementar pero me gustaria si me puedes hacer el favor de apsarme el algoritmo de maquina vs maquina despues de una jugada por parte del usuario…y si pueideras con comentarios explicado…te lo agrade ceria muchisimo. gracias de antemano

Chivis

26. mar, 2010

Oye que bien, me sirve de mucho justo necesitaba algo como esto gracias

Hector hung

29. mar, 2010

Hola, tengo una duda como puedo hacer? que las estadisticas funcionen, ya que cundo le gano nunca me la anota

fredy

09. abr, 2010

me podrias enviar el algoritmo , pseudocodigo y el codigo por favor es para un trabajo

chocobomix

12. abr, 2010

como, puedo hacer que las estadisticas las escriba bien el archibo txt?

Valeria

15. abr, 2010

Como paso un programa de lenguaje c a vb6.0? alguien me puede ayudar??….ya lo intente y no me sale…=S…
… esto tengo que entregarlo el lunes…=S….
Alguien puede ayudarme??

/*Busqueda del primero en profundidad*/
#include “stdio.h”
#define MAX 100

/*Estructura de la base de datos vuelos */
struct VL {
char desde [20];
char hacia [20];
int distancia;
char visitado; /*usado en el retroseguimiento*/
} ;

struct VL vuelos [MAX]; /* array de estructuras de la bd*/

int pos_ult=0; /*numero de entradas en la bd vuelos*/
int encuentra_pos=0;/*indice de busqueda en la bd vuelos*/

int cabeza_pila=0; /*cabeza de la pila */
struct pila {
char desde [20];
char hacia [20];
int dist;
};
struct pila pila_rt[MAX]; /*pila de vuelta atras*/

main ()
{
char desde[20], hacia[20];

inicia();

printf (“desde? “);
gets (desde);
printf (“hacia? “);
gets (hacia);
}

inicia ()

{
declara_vuelo (“Nueva York”,”Chicago”, 1000);
declara_vuelo (“Chicago”,”Denver”,1000);
declara_vuelo (“Nueva York”,”Toronto”, 800);
declara_vuelo (“Nueva York”,”Denver”, 1900);
declara_vuelo (“Toronto”,”Calgary”, 1500);
declara_vuelo (“Toronto”,”Los Angeles”, 1800);
declara_vuelo (“Toronto”,”Chicago”, 500);
declara_vuelo (“Denver”,”Urbana”, 1000);
declara_vuelo (“Denver”,”Houston”, 1500);
declara_vuelo (“Houston”,”Los Angeles”, 1500);
declara_vuelo (“Denver”,”Los Angeles”, 1000);
}

/*colocacion de datos dentro de la bd vuelos*/
declara_vuelo (desde,hacia,dist)
char *desde,*hacia;
int dist;
{

if (pos_ult<MAX) {
strcpy(vuelos [pos_ult].desde,desde);
strcpy(vuelos [pos_ult].hacia,hacia);
vuelos[pos_ult].distancia=dist;
vuelos[pos_ult].visitado=0;
}
else printf ("Base de datos Vuelos llena. \n");
}

/*muestra la ruta y la distancia */
ruta (hacia)
char *hacia;
{
int dist, t;
dist=0;
t=D;
while (t0) {
/*vuelta atras*/
saca_pila (desde,hacia,&dist);
hay_vuelo (desde,hacia);
}
}

/*rutina de pila*/
mete_pila (desde,hacia,dist)
char *desde, *hacia;
int dist;
{
if(cabeza_pila 0) {
cabeza_pila–;
strcpy (desde, pila_rt[cabeza_pila].desde);
strcpy (hacia, pila_rt[cabeza_pila].hacia);
*dist=pila_rt[cabeza_pila].dist;
}
else printf (“Pila vacía. \n”);
}

Cecilia

11. jun, 2010

hola!! de casualidad la tecnica que usaste para este juego es de backtracking?????

Aaron

01. jul, 2010

jejeje.
Minimax :p
Como se menciono bastantes veces.
El backtracking es un metodo de busqueda para problemas de satisfaccion de restricciones, pero desde el formulamiento del problema se tiene que plantear como un problema satisfacible. En el cual llegaras a un punto donde no es posible satisfacer alguna restriccion y ahi es donde entra el backtrackin, regresando pasos y tomando otro camino para ser si logra el objetivo.

Dejar comentario:

ir al inicio inicio