¿Cómo crear un juego Tic-Tac-Toe en Python?
Publicado: 2021-08-19Creemos un juego sencillo de Tic Tac Toe en Python. Te ayudará a desarrollar la lógica del juego y a comprender cómo estructurar el código.
Los juegos son uno de los entretenimientos que tienen los humanos. Podemos encontrar diferentes tipos de juegos en la web, móvil, escritorio, etc. No estamos aquí para hacer uno de esos juegos pesados ahora. Vamos a crear un juego de tic-tac-toe CLI usando Python.
Si no está familiarizado con Tic Tac Toe, reprodúzcalo visualmente aquí para entenderlo. No te preocupes, aunque no lo entiendas, lo veremos.
Tic Tac Toe
El tutorial se divide en tres secciones diferentes. En la primera sección, aprenderá a jugar al tic-tac-toe. Después de eso, veremos un algoritmo que nos ayuda a idear la lógica del juego. Finalmente, veremos el código estructurado y su explicación.
Puede omitir la primera sección si ya sabe cómo jugar Tic Tac Toe.
Entonces, sin más preámbulos, profundicemos en nuestra primera sección.
Jugando Tic Tac Toe
Habrá dos jugadores en un juego. Dos carteles representan a cada jugador. Los signos generales utilizados en el juego son X y O. Finalmente, habrá un tablero con 9 cajas.
Vea visualmente el tablero de tic-tac-toe.

La jugabilidad será la siguiente.
- Primero, un usuario colocará su signo en una de las casillas vacías disponibles.
- A continuación, el segundo usuario colocará su inicio de sesión en una de las casillas vacías disponibles.
- El objetivo de los jugadores es colocar sus respectivos letreros completamente en filas, columnas o en diagonal.
- El juego continúa hasta que un jugador gana el juego o termina en empate al llenar todas las casillas sin una partida ganadora.
Veamos algunos juegos visualmente.

El jugador X gana el juego en el modo de juego anterior. Todos los cuadros se llenan diagonalmente con signos X. Entonces, el jugador respectivo gana el juego.
Hay un total de 8 formas de organizar el mismo cartel y ganar el juego. Veamos los 8 arreglos que pueden ganar el juego.

Y finalmente, un empate llena el tablero sin ningún arreglo ganador. Espero que entiendas cómo hacer Tic Tac Toe ahora.
Ahora, es hora de jugar para ti. Puedes ir aquí y jugarlo para comprender completamente el juego. Déjalo si ya lo tienes.
Ahora es el momento de mover la sección de algoritmos.
Algoritmo
Ahora discutiremos el algoritmo para escribir el código. Este algoritmo le ayudará a escribir código en cualquier lenguaje de programación de su elección. Veamos cómo se hace.
- Cree un tablero usando una matriz bidimensional e inicialice cada elemento como vacío.
- Puede representar vacío usando cualquier símbolo que desee. Aquí vamos a utilizar un guión.
'-'.
- Puede representar vacío usando cualquier símbolo que desee. Aquí vamos a utilizar un guión.
- Escribe una función para comprobar si el tablero está lleno o no.
- Itere sobre el tablero y devuelva
falsesi el tablero contiene un signo vacío o devuelvatrue.
- Itere sobre el tablero y devuelva
- Escribe una función para comprobar si un jugador ha ganado o no.
- Tenemos que comprobar todas las posibilidades que comentamos en el apartado anterior.
- Compruebe todas las filas, columnas y dos diagonales.
- Escriba una función para mostrar el tablero, ya que mostraremos el tablero varias veces a los usuarios mientras juegan.
- Escribe una función para iniciar el juego.
- Seleccione el primer turno del jugador al azar.
- Escribe un bucle infinito que se rompa cuando el juego termina (ya sea ganando o empatando).
- Muestre el tablero al usuario para seleccionar el lugar para el próximo movimiento.
- Pídale al usuario que ingrese el número de fila y columna.
- Actualiza el lugar con el signo del jugador respectivo.
- Compruebe si el jugador actual ganó el juego o no.
- Si el jugador actual ganó el juego, imprima un mensaje ganador y rompa el ciclo infinito.
- A continuación, compruebe si el tablero está lleno o no.
- Si el tablero está lleno, imprima el mensaje de dibujo y rompa el bucle infinito.
- Finalmente, muestre al usuario la vista final del tablero.
Es posible que pueda visualizar lo que está sucediendo. No se preocupe, incluso si no lo entendió completamente. Obtendrá más claridad una vez que vea el código.

Entonces, saltemos a la sección de código. Supongo que tiene Python instalado en su PC para probar el código.
Código
Revisa el siguiente código.
import random class TicTacToe: def __init__(self): self.board = [] def create_board(self): for i in range(3): row = [] for j in range(3): row.append('-') self.board.append(row) def get_random_first_player(self): return random.randint(0, 1) def fix_spot(self, row, col, player): self.board[row][col] = player def is_player_win(self, player): win = None n = len(self.board) # checking rows for i in range(n): win = True for j in range(n): if self.board[i][j] != player: win = False break if win: return win # checking columns for i in range(n): win = True for j in range(n): if self.board[j][i] != player: win = False break if win: return win # checking diagonals win = True for i in range(n): if self.board[i][i] != player: win = False break if win: return win win = True for i in range(n): if self.board[i][n - 1 - i] != player: win = False break if win: return win return False for row in self.board: for item in row: if item == '-': return False return True def is_board_filled(self): for row in self.board: for item in row: if item == '-': return False return True def swap_player_turn(self, player): return 'X' if player == 'O' else 'O' def show_board(self): for row in self.board: for item in row: print(item, end=" ") print() def start(self): self.create_board() player = 'X' if self.get_random_first_player() == 1 else 'O' while True: print(f"Player {player} turn") self.show_board() # taking user input row, col = list( map(int, input("Enter row and column numbers to fix spot: ").split())) print() # fixing the spot self.fix_spot(row - 1, col - 1, player) # checking whether current player is won or not if self.is_player_win(player): print(f"Player {player} wins the game!") break # checking whether the game is draw or not if self.is_board_filled(): print("Match Draw!") break # swapping the turn player = self.swap_player_turn(player) # showing the final view of board print() self.show_board() # starting the game tic_tac_toe = TicTacToe() tic_tac_toe.start()Consulte la salida de muestra del código.
$ python tic_tac_toe.py Player X turn - - - - - - - - - Enter row and column numbers to fix spot: 1 1 Player O turn X - - - - - - - - Enter row and column numbers to fix spot: 2 1 Player X turn X - - O - - - - - Enter row and column numbers to fix spot: 1 2 Player O turn XX - O - - - - - Enter row and column numbers to fix spot: 1 3 Player X turn XXO O - - - - - Enter row and column numbers to fix spot: 2 2 Player O turn XXO OX - - - - Enter row and column numbers to fix spot: 3 3 Player X turn XXOOX - - - O Enter row and column numbers to fix spot: 3 2 Player X wins the game! XXO OX - - XOAlgunos puntos importantes que le ayudarán a comprender la estructura del código.
- Hemos utilizado una clase para tener todos los métodos en un solo lugar. También puede ser fácilmente un paquete reutilizable en algún otro código.
- A continuación, hemos definido diferentes funciones para cada responsabilidad, aunque sea una tarea pequeña. Ayuda a mantener el código con facilidad.
- Los dos enfoques anteriores nos ayudan a actualizar la aplicación sin esfuerzo si queremos actualizar el juego.
No dude en adaptar la estructura y mejorarla en función de su proyecto. La estructuración del código no está limitada.
Ultimas palabras
¡Viva! Has creado un juego completamente desde cero. No es uno de los juegos visuales que jugamos a diario. Pero le ayuda a escribir lógica y mantener una estructura limpia en el código. Siga pautas similares para crear algunos juegos interesantes como este. Puedes encontrar juegos similares si te remontas algunos años a tu infancia.
¡Feliz codificación!
A continuación, explore cómo crear un juego de adivinanzas de números y pruebas unitarias con el módulo unittest de Python.
