Conecta 4 en C – Programación de juego

Conecta 4 – Juego programado en C sobre Linux Ubuntu

En este post te mostraré el juego Conecta 4 programado en C por consola. Se trata del juego que lleva el mismo nombre en donde se deben conectar cuatro fichas del mismo color de manera que formen una línea, ya sea horizontal, vertical o diagonal.

Las características del mismo son:

  • Al iniciar se elige un color aleatorio que inicia el juego, es decir, no siempre comienza el mismo jugador
  • Modo humano contra humano
  • Modo humano contra CPU (computadora); se ha programado una pequeña IA para jugar contra el humano
  • Modo computadora contra computadora (divertido de observar)
  • Opción para cambiar la longitud del tablero de juego
  • Se puede cambiar la cantidad de fichas que se conectan. Es decir, se puede jugar a conecta 3, conecta 5, conecta 6, etcétera.
  • Escrito totalmente en C y compilable para C++. Compila en Windows con gcc, en Linux Ubuntu con gcc e igualmente en Android con Termux (de nuevo, usando gcc).

A lo largo del post te mostraré cómo es que programé el juego, dónde se puede probar, descargar, etcétera.

Nota: mira este juego portado para JavaScript, es decir, en su versión web.

Configuración del juego

He definido el encabezado de todo el juego con el prototipo de las funciones así como con las constantes que ajustan el juego.

Lo que se puede cambiar (lo demás no lo recomiendo si no lo entiendes) es el número de filas y columnas para cambiar el tamaño del tablero de juego. Debido a que no he implementado un color para cada jugador, un color es la letra o y el otro color es la letra x.

Finalmente la constante de CONECTA indica cuántas piezas se deben conectar para ganar. Justo aquí se puede modificar para que se juegue a conecta 3, por ejemplo.

Además de los ajustes, se pueden ver todas las funciones del programa. A continuación iré explicando a las mismas.

Tablero de juego

Para mostrar el tablero de juego de Conecta 4 en C he decidido por usar una matriz de tipo char. Cada campo de la matriz tiene tres estados:

  • Vacío
  • Ocupado por jugador 1
  • Ocupado por jugador 2

Recuerda que igualmente la CPU se toma como el jugador 1, y la CPU 2 como el jugador 2. Al inicio del juego se debe limpiar el tablero, colocando los espacios en vacíos.

También tenemos otras funciones como colocarPieza que coloca la pieza en determinada columna y verifica que sea posible además de que sobre espacio.

Otra función interesante es obtenerFilaDesocupada que devuelve la fila en donde se debería colocar la pieza, normalmente debe ser en la primera desocupada de arriba hacia abajo, pero esta función también valida que haya espacio disponible.

Finalmente contamos con la función esEmpate que devuelve un booleano si ya no quedan espacios vacíos en el tablero.

Conteo de conexiones

En este juego de conecta 4 necesitamos contar cuántas piezas del mismo color hay en línea, y justo así se detecta si existe un ganador. Para ello simplemente hacemos ciclos y tomamos en cuenta las siguientes ubicaciones:

  • Arriba
  • Derecha
  • Arriba derecha
  • Abajo derecha

Esto es debido a que las otras ubicaciones ya son tomadas en cuenta con las anteriores. Por ejemplo, para saber si conecta hacia abajo, es lo mismo que conectar hacia arriba pero desde la fila inferior. Lo mismo para las demás.

Sé que debe existir una función que permita navegar de un punto a otro, de manera que elimine el código repetido, pero no he investigado.

Por cierto la función que cuenta regresa varios estados para saber si se conecta hacia determinado lugar (y así determinar el ganador).

Inteligencia artificial de CPU

Ahora veamos el montón de if’s que hacen que la CPU piense. Ya expliqué anteriormente el algoritmo, ahora vengo a mostrarlo convertido en código. Queda así:

Como puedes ver, todo se basa en clonar el tablero original, simular colocar las piezas y elegir el mejor camino además del balance entre la defensa y el ataque.

Funciones extra

Tenemos más funciones “misceláneas” por ejemplo para obtener un número aleatorio, solicitar una columna, etcétera.

Otra función interesante es la que devuelve el oponente del jugador actual, y aunque es simple, es muy útil para evitar repetición de código.

Juego y función principal

Ahora en la función main o principal iniciamos el juego dependiendo de lo que el usuario seleccione:

La función de juego simplemente recibe el modo de juego que puede ser humano contra humano, humano contra CPU, CPU contra CPU. Se ve así:

De este modo termina todo el código de este maravilloso juego.

Descargas y compilación

Compilar código fuente en C para Conecta 4 – Humano vs Humano

Ahora viene la parte interesante. Puedes descargar el código desde mi repositorio de GitHub (sígueme y déjale una estrella si quieres). Si te fijas, son varios archivos, pues he separado conceptos.

Yo recomiendo usar MinGW en Windows.

En la carpeta que lo has descargado ejecuta simplemente con gcc:

gcc main.c -o conecta4.exe

Y luego puedes ejecutar el archivo conecta4.exe. Si estás en Linux (Ubuntu en este caso) ejecuta:

gcc main.c -o conecta4

Después puedes ejecutar ./conecta4

También debería compilar como un encanto en otros compiladores decentes. Yo lo he probado en la nube con replit (que usa clang) y en local (con gcc); todo funciona de maravilla. Por cierto, si en tu caso quieres todo el código en un mismo archivo, mira el ejemplo en línea.

Vídeo con demo y explicación

He grabado un vídeo en donde explico igualmente las funciones del juego conecta 4 en C además de hacer una pequeña demostración.

Prueba en línea

Si quieres puedes jugar conecta 4 programado en C y compilable para C++ desde tu navegador web gracias al poder de repl.it.

El código fuente está aquí, y la demostración aquí.

Conclusión

Muy pronto traeré este juego portado a otro lenguaje y con interfaz gráfica.

Como siempre lo digo, escribo el código en C para que pueda portarlo a otros lenguajes de manera fácil, pues no hay algo en C que no exista en otros lenguajes (sin contar los macros o apuntadores, de los cuales solo usamos los primeros pero se pueden remplazar por constantes).

Por cierto, este no es el único videojuego que he creado. Aquí hay más.

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