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

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.. 😛 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. =)

139 comentarios
  1. Hola a a todos necesito el codigo en java del juego el gato y el raton es donde lo gatos tratan d atrapar al raton es en un tablero de 8×8

  2. me preguntaba si me puede ayudar a realizar el juego,, pero en el programa llamado lpp
    apenas estoy empezanso en esto de la programacion… de antemano mucha gracias..
    ha y si me puedieran explicar algo de matricez majicas??

  3. hola alguien me podria ayudar a crear un programa en bluej class matrices
    sobre 3 en raya porfa necesito presentarlo para dar un examen final

  4. Hola que tal disculpa la molestia….. no se si me podrias decir dond puedo modificar el arbol para que no lo realize completo……. espero me puedas responder y si no es molestia lo mas pronto posible porfavor…. y muchas grax

  5. para insertar un jlabel dentro de otro solo le tienen que dar clic derecho al jframe y le dan diseño nulo

  6. Hola!!!soy esther,de nuevo jejejeje.
    porfis,necesito ayuda urgente, sigo sin encontrar nada, y sin salirme nada del proyecto(k es peor aun)si podeis ayudar enviarme informacion o algo a mi correo trabajoyjuego@hotmail.com,
    muchisimas gracias!!!
    bss

  7. Hola necesitaria que me pasaras el codigo del tetris en eclipse o bluej para ver como lo has programado ya que hace unas semanas pense en aprender a programar en Java y pense en un tetris ya que el jueog me gusta bastante. Gracias mery_623@hotmail.com

  8. hola!!!soy nuevo en programacion de java, con netbeans y eclipse, y necesito urgente ayuda, he estado un mes comiendo la cabeza con el proyecto que decidi hacer, y no me sale!!!snif…se trata de un catalogo (puede ser interactivo o no) en java con eclipse o netbeans, y nose que hacer, estoy deseperado, si alguien me puede ayudar, o enviarme algun link de alguna pagina con algun ejemplo que se le parezca a mi aplicacion o algo, se lo agradece eternamente!!!
    muchas gracias!!!
    un saludo

  9. hola Francisco.. me encanto tu programa del gato ..
    esta genial y me sirvio mucho pa enterder mas de programacion..
    en este momento quisiera pedirte un poco de ayuda con un informacion de graficas de funciones en netbeans… tengo q hacer una tarea de un ejemplo de graficas pero no se como hacerlo y no encuentro ningun ejemplo para hecerlo..
    por fa si puedes hechame una mano con eso ….
    gracias de antemano …
    xD

  10. hola amigo quisiera saber si tu juego se puede aplicar en un celular, la verdad es que no se nada de programación pero lo necesito para un trabajo de la escuela y si se puede modificar no se si me prodrias decir como hacerlo gracias mi correo es aztecawin@hotmail.com

  11. Oye tu trabajo me parece muy bien, ojala pudieras decirme como es que en el netbeans lograste colocar un jlabel sobre otro. Te agradeceria mucho..

    Gracias….

  12. La aplicación está bien comprensible man…. es perfecto para aprender a programar un juego entre adversarios, podemos aprender haciendo pero tambien viendo …… Good! 😀

  13. wow son buenos!!!… por casualidad tienen un juego de la tortuga y la liebre!? mi prima lo necesita, y pues yo no tengo idea de como agregar todo eso!!! creen q me pueden facilitar un codigo por lo menos parecido: es merament por cuestiones de estudio!… es para el 15 d nov. Se los agradeceria. De todas formas gracias esto d porsi fue util!!! mi correo es : gerardo.erazo@yahoo.com

  14. hey holax
    necesitohacer un gato (tic tc toe, o 3 en raya) en visual basic vrsion 2008
    alguien ke m pueda ayudar

  15. 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.

  16. 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 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»);
    }

  17. 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

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

Los comentarios están cerrados.