Geekflare cuenta con el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliados comprando enlaces en este sitio.
Comparte en:

¿Cómo crear un juego Tic-Tac-Toe en Python?

pitón tic tac toe
Escáner de seguridad de aplicaciones web Invicti – la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Creemos un juego sencillo de Tic Tac Toe en Python. Le ayudará a desarrollar la lógica del juego y 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, juegue visualmente aquí comprender. No se preocupe, aunque no lo entienda, 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 y  O. Finalmente, habrá un tablero con 9 cajas.

Vea visualmente el tablero de tic-tac-toe.

Tablero de Tic Tac Toe
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 un empate al llenar todas las casillas sin una partida ganadora.

Veamos algunos juegos visualmente.

Jugabilidad Tic Tac Toe Win
Jugabilidad Tic Tac Toe Win

El jugador gana el juego en el modo de juego anterior. Todos los cuadros se llenan diagonalmente con señales. Entonces, el jugador respectivo gana el juego.

Hay un total de 8 formas de organizar el mismo signo y ganar el juego. Veamos los 8 arreglos que pueden ganar el juego.

Arreglos ganadores de Tic Tac Toe
Arreglos ganadores de Tic Tac Toe

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. Tu puedes ir aquí y juegue 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 tu preferencia. Veamos cómo se hace.

  • Cree un tablero usando una matriz bidimensional e inicialice cada elemento como vacío.
    • Puede representar vacío utilizando 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.
    • Iterar sobre el tablero y volver false si el tablero contiene un letrero vacío o si no regresa true.
  • 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 tienes 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
X X -
O - -
- - -
Enter row and column numbers to fix spot: 1 3

Player X turn
X X O
O - -
- - -
Enter row and column numbers to fix spot: 2 2

Player O turn
X X O
O X -
- - -
Enter row and column numbers to fix spot: 3 3

Player X turn
X X O        
O X -        
- - O
Enter row and column numbers to fix spot: 3 2

Player X wins the game!

X X O
O X -
- X O

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

Palabras finales

¡Viva! 😎 Ha 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 juego de adivinanzas de números y Prueba unitaria con el módulo unittest de Python.

Gracias a nuestros patrocinadores
Más lecturas interesantes sobre el desarrollo
Impulse su negocio
Algunas de las herramientas y servicios para ayudar a que su negocio crezca.
  • Invicti utiliza Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en cuestión de horas.
    Prueba Invicti
  • Web scraping, proxy residencial, administrador de proxy, desbloqueador web, rastreador de motores de búsqueda y todo lo que necesita para recopilar datos web.
    Prueba Brightdata
  • Semrush es una solución de marketing digital todo en uno con más de 50 herramientas en SEO, redes sociales y marketing de contenido.
    Prueba Semrush
  • Intruder es un escáner de vulnerabilidades en línea que encuentra debilidades de ciberseguridad en su infraestructura, para evitar costosas filtraciones de datos.
    Intente Intruder