Gato, Tres en raya, Tic tac toe en Java.
Por Francisco I. Leyva en General, Java el 28.ago.2006
Esta 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..
si no me crees intenta ganarle. xD
Captura de Pantalla:
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. =)





inicio
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:
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
mi correo es pedrocity@hotmail.com
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
mi correo es yaha_perez@hotmail.com
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: