Jugando Gato (tres en línea) programado con Java

Tres en línea en Java – Programación de juego

Hoy veremos cómo programar el juego de 3 en línea en Java. Este juego también es conocido como Tres en raya, ceros y cruces, triqui, gato, juego del gato, Gatos o gatitos, dependiendo del país.

Jugando Gato (tres en línea) programado con Java
Jugando Gato (tres en línea) programado con Java

El juego consiste en un tablero de 3 x 3 en donde se coloca un círculo o una cruz. El juego se desarrolla por turnos y cada jugador elige ser Cruz o Círculo. Gana el jugador que pueda conectar 3 símbolos formando una línea recta.

En el juego que vamos a programar en Java vamos a tener la opción de jugar contra un amigo (otro ser humano), contra el CPU (con una pequeña inteligencia artificial)  o enfrentar al CPU contra sí mismo.

Explicación general

Vamos a dividir todo el comportamiento del juego en métodos, de modo que cada función se encargue de una cosa y podamos repartir el trabajo de todo el juego.

El juego de Gato se desarrolla en una matriz en donde vamos a ir colocando las piezas del jugador, ya sea la O o la X. Básicamente vamos a ir colocando las piezas y comprobando si una de ellas forma una línea recta de más de 3 piezas seguidas.

Para saber si hay empate vamos a comprobar si todo el tablero tiene piezas. En cuanto al CPU vamos a usar un algoritmo muy parecido al de Conecta 4 para ver en qué lugar colocar la pieza.

Inicio del juego

Inicio del juego 3 en raya - Programación Java
Inicio del juego 3 en raya – Programación Java

Necesitamos el modo de juego para saber cómo jugar Tres en raya programado con Java. En este caso ya expliqué los 3 modos, así que lo solicitamos al inicio:

Fíjate en que estoy usando un Scanner y lo estoy cerrando al final de todo. Por cierto, estoy utilizando una función ya presentada en mi blog, misma que solicita un número válido:

Ahora veamos la verdadera función que inicia el juego, misma que es la que lleva todo el loop principal:

Como te puedes dar cuenta, el tablero de juego es un array de tipo char. Esto es porque lo he portado desde C en donde no es tan fácil manejar las cadenas. Y así de simple es todo este juego de Tres en línea con Java. Ahora profundizaremos en las funciones ayudantes.

Funciones del tablero

Tenemos la función que imprime el tablero de juego para informarle al usuario de la situación:

Simplemente aplicamos un formato y vamos imprimiendo todo con System.out.printf. También tenemos otra función que nos dice si el tablero está vacío en determinadas coordenadas (así sabemos si el usuario puede colocar la pieza en esa posición):

Hacer que CPU piense

Hacer que CPU elija coordenadas para el juego de Gato en Java
Hacer que CPU elija coordenadas para el juego de Gato en Java

Ya te lo dije antes: este juego de Gato en Java tiene un modo para jugar contra el CPU, así que debemos tener una función que elija la mejor posición para colocar la pieza. Para ello hacemos una simulación simple sin meternos en árboles de probabilidad.

Antes que nada, veamos la función que clona la matriz para simular y no afectar al tablero original:

Ahora vemos la función que se basa en que el CPU elige en el siguiente orden:

  1. Ganar si se puede
  2. Hacer perder al oponente si está a punto de ganar
  3. Tomar el mejor movimiento del oponente (en donde obtiene el mayor puntaje)
  4. Tomar mi mejor movimiento (en donde obtengo mayor puntaje)
  5. Elegir la de la esquina superior izquierda (0,0)
  6. Coordenadas aleatorias

Invocando a distintos métodos:

Mismas que vemos a continuación, poco a poco. Por ejemplo, la función que indica las coordenadas para ganar es la siguiente:

Si te fijas, esa función se llama dos veces en el código para que el CPU elija. La primera vez es para saber si el CPU puede ganar, y la segunda para saber si el oponente gana para poder evitarlo.

Ahora tenemos la función que te dice cuando obtienes el mayor puntaje. Es decir, puede que no ganes, pero al colocar tu pieza en ese lugar podrías obtener un mayor puntaje para ganar.

Se hace lo mismo: invocarla dos veces, una para el CPU y otra para el oponente:

Finalmente se elige la esquina superior izquierda o una aleatoria:

Funciones de conteo y saber si hay ganador

Saber si hay ganador - Tres en línea con Java
Saber si hay ganador – Tres en línea con Java

Analizando las demás funciones de Java para este juego de Tres en línea vemos las funciones de conteo que se encargan justamente de contar cuántas piezas están conectadas en una línea.

Se hace un ciclo for para ir de un lugar a otra, sin llegar a índices que no existen. Luego ocupamos estas funciones para saber si hay un ganador:

Métodos extra para juego programado en Java

Para terminar veamos las dos funciones que faltan. Son varios métodos que ayudan al programa devolviendo números aleatorios, el oponente de un jugador, indicando si hay un empate, etcétera. Queda así:

Poniendo todo junto

Te dejo el código completo a continuación:

Si quieres puedes importarlo a NetBeans, Eclipse, IntelliJ IDEA, etcétera. O puedes probarlo en línea en este enlace. También te cuento que ya he programado este juego en C.

Finalmente te dejo con más cosas interesantes sobre Java en el blog de Parzibyte.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario