Hoy vamos a ver un juego programado en Python sin usar librerías para el funcionamiento del mismo.
Se trata del juego Battleship, juego de los barquitos, hundir la flota, hundiendo barquitos o también llamado Batalla Naval programado totalmente en Python. Los requisitos del juego los veremos a continuación.
En este post te mostraré cómo programarlo, cómo jugarlo y dónde descargar el código fuente.
Nota: he usado PyGame únicamente para reproducir los sonidos; ya que todo el juego es código nativo y se desarrolla en la terminal. Así que necesitas instalar la librería de pygame con pip install pygame
.
Nota 2: este juego está basado altamente en mi juego de Batalla naval con Arduino. Obviamente el juego del post actual es mucho más fácil que el otro.
Vamos a tener varias funciones que reciben y devuelven una matriz, y esa matriz representa el tablero de un jugador. Con este paradigma podemos tener una batalla naval de infinitos jugadores.
Al inicio vamos a llenar la matriz con una constante de mar, que será un espacio vacío. Y luego en las funciones vamos a modificar esa matriz ya sea para colocar los barcos, ver si todos los barcos están hundidos, etcétera.
Todo está dividido en funciones que tienen un propósito y nombre que te ayudarán a entender el código.
Primero veamos las constantes que van a definir a los barcos, sonidos, filas, columnas, etcétera. Básicamente toda la configuración del juego:
Desde aquí puedes ver que estoy definiendo los tres tipos de “naves”: el submarino, el destructor horizontal y el destructor vertical.
También estoy iniciando los sonidos de PyGame que son para el disparo acertado y el disparo fallado.
Al inicio vamos a tener un tablero que solo tiene mar, así que lo iniciamos así:
Se nos pide que coloquemos las naves de ambos tableros en posiciones aleatorias. Entonces necesitamos varias funciones que nos permitan calcular coordenadas aleatorias, comprobar si hay mar en determinada coordenada, etcétera.
Aquí las tenemos:
Básicamente estas funciones calculan coordenadas aleatorias, verifican que haya mar en esas coordenadas y colocan el barco en cuestión.
Como siempre existe la posibilidad de que ya haya un barco ahí, hacemos un ciclo while que solo se detendrá hasta que termine de colocar los barcos.
Por cierto, recuerda que debe haber suficiente espacio en el tablero, ya que si no, se hará un ciclo infinito al tratar de colocar los barcos.
Nota: la colocación está en la función colocar_e_imprimir_barcos
.
Una parte importante de este juego de Battleship en Python es la de imprimir el tablero.
Obviamente no le vamos a mostrar los barcos al jugador al menos que el juego haya terminado, así que si detectamos un barco no imprimimos su verdadero carácter.
Recuerda que las filas se identifican por letras, y las columnas por números, así que hice una función que aumenta una letra en Python.
Hasta ahora ya estamos imprimiendo nuestro tablero de batalla naval pero no estamos dando la posibilidad de disparar.
Recuerda que esto es por turnos, así que en cada turno debemos recoger las coordenadas del jugador totalmente validadas:
Como puedes ver, la función va a devolver las coordenadas como números hasta que las mismas sean válidas. El usuario no puede ingresar coordenadas incorrectas o alguna letra incorrecta.
Ahora veamos la función que dispara. Esta función regresa un booleano indicando si el disparo fue exitoso:
Veamos la siguiente función que indica si un tablero ya tiene todos los barcos hundidos. Esto significa que toda la matriz está llena de disparos acertados o de mar:
Finalmente llegamos a la parte de este juego programado con Python. Simplemente hacemos un ciclo que se romperá cuando el jugador acierte o pierda, y eso lo comprobamos en cada iteración.
Espero que el código se explique por sí mismo:
Básicamente solicitamos el disparo dependiendo del jugador, disparamos, reproducimos el sonido, comprobamos si pierde o gana para ver si terminamos el juego, y si no se termina entonces le damos el turno al otro jugador para que se siga cumpliendo el ciclo.
Por cierto, no te mostré las funciones para reproducir los sonidos. Quedan así:
El código completo para descargar te lo dejo en GitHub. Es un simple archivo que más tarde puedes separar por módulos, pero lo dejo así por si lo actualizo más adelante.
Para terminar te dejo con más tutoriales, programas y juegos programados con Python.
En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…
Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…
Hoy vamos a ver programar la impresión de un PDF generado a partir de HTML…
En este tutorial básico de JavaScript con HTML vamos a ver cómo llenar una lista…
En este artículo se presenta una guía para imprimir un PDF a partir de una…
En este post voy a enseñarte cómo imprimir un PDF a partir de su representación…
Esta web usa cookies.
Ver comentarios
MIL GRACIAS SOS UN SOLASO I LOVE YOU
Excelente juego Luis! muchas gracias
Muy buen trabajo. Gracias,