Hvordan lage et Tic-Tac-Toe-spill i Python?

La oss lage et enkelt Tic Tac Toe-spill i Python. Det vil hjelpe deg å bygge opp spilllogikk og forstå hvordan du strukturerer kode.

Gaming er en av underholdningen som mennesker har. Vi kan finne forskjellige typer spill på nettet, mobil, desktop osv. Vi er ikke her for å lage et av de tunge spillene nå. Vi skal lage et CLI tikk-tac-toe-spill ved hjelp av Python.

Hvis du ikke er kjent med Tic Tac Toe, spill det visuelt her å forstå. Ikke bekymre deg, selv om du ikke forstår det, kommer vi til å se det.

Tre på rad

Opplæringen er delt inn i tre ulike deler. I den første delen vil du bli kjent med hvordan du spiller tic-tac-toe-spillet. Etter det vil vi se en algoritme som hjelper oss å komme opp med spilllogikken. Til slutt vil vi se den strukturerte koden og dens forklaring.

Du kan hoppe over den første delen hvis du allerede vet hvordan du spiller Tic Tac Toe.

Så, uten videre, la oss dykke inn i vår første del.

Spiller Tic Tac Toe

Det vil være to spillere i et spill. To tegn representerer hver spiller. De generelle tegnene som brukes i spillet er X og O. Til slutt vil det være et brett med 9 bokser.

Se tic-tac-toe-brettet visuelt.

Tic Tac Toe-brett

Spillet vil være som følger.

  • Først vil én bruker plassere skiltet sitt i en av de tilgjengelige tomme boksene.
  • Deretter vil den andre brukeren plassere tegnet sitt i en av de tilgjengelige tomme boksene.
  • Målet til spillerne er å plassere sine respektive tegn helt radvis eller kolonnevis, eller diagonalt.
  • Spillet fortsetter til en spiller vinner spillet eller det endte opp i uavgjort ved å fylle alle boksene uten en vinnende kamp.

La oss se noen spill visuelt.

Tic Tac Toe Win Gameplay

  Øk spillopplevelsen din med disse 9 budsjett-PC-ene og bærbare datamaskinene

Spilleren X vinner spillet i spillet ovenfor. Alle boksene fylles diagonalt med X-tegn. Så den respektive spilleren vinner spillet.

Det er totalt 8 måter å arrangere det samme skiltet og vinne spillet. La oss se alle de 8 arrangementene som kan vinne spillet.

Tic Tac Toe-vinnende arrangementer

Og til slutt fyller uavgjort brettet uten noen vinnerordning. Jeg håper du forstår hvordan du Tic Tac Toe nå.

Nå er det leketid for deg. Du kan gå her og spill det for å forstå spillingen fullstendig. La det stå hvis du allerede har det.

Nå er det på tide å flytte algoritmeseksjonen.

Algoritme

Vi skal nå diskutere algoritmen for å skrive koden. Denne algoritmen vil hjelpe deg å skrive kode i et hvilket som helst programmeringsspråk du ønsker. La oss se hvordan det gjøres.

  • Lag et brett med en 2-dimensjonal matrise og initialiser hvert element som tomt.
    • Du kan representere tom ved å bruke et hvilket som helst symbol du liker. Her skal vi bruke en bindestrek. «-«.
  • Skriv en funksjon for å sjekke om tavlen er fylt eller ikke.
    • Iterer over brettet og returner false hvis brettet inneholder et tomt tegn eller returner true.
  • Skriv en funksjon for å sjekke om en spiller har vunnet eller ikke.
    • Vi må sjekke alle mulighetene som vi diskuterte i forrige avsnitt.
    • Se etter alle rader, kolonner og to diagonaler.
  • Skriv en funksjon for å vise brettet siden vi vil vise brettet flere ganger til brukerne mens de spiller.
  • Skriv en funksjon for å starte spillet.
    • Velg den første runden til spilleren tilfeldig.
    • Skriv en uendelig løkke som brytes når spillet er over (enten vinn eller uavgjort).
      • Vis brettet til brukeren for å velge stedet for neste trekk.
      • Be brukeren angi rad- og kolonnenummer.
      • Oppdater stedet med det respektive spillerskiltet.
      • Sjekk om gjeldende spiller vant spillet eller ikke.
      • Hvis den nåværende spilleren vant spillet, skriv ut en vinnermelding og bryte den uendelige løkken.
      • Deretter sjekker du om brettet er fylt eller ikke.
      • Hvis brettet er fylt, skriv ut trekningsmeldingen og bryte den uendelige løkken.
    • Til slutt, vis brukeren den endelige visningen av tavlen.
  Få Google Nå Hotword Detection i Apex, Nova, TouchWiz og Sense

Du kan kanskje visualisere hva som skjer. Ikke bekymre deg, selv om du ikke forsto det helt. Du vil få mer klarhet når du ser koden.

Så la oss hoppe inn i kodedelen. Jeg antar at du har Python installert på PC-en din for å prøve koden.

Kode

Gå gjennom koden nedenfor.

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()

Sjekk ut eksempelutgangen til koden.

$ 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

Noen hovedpunkter som hjelper deg å forstå strukturen til koden.

  • Vi har brukt en klasse for å ha alle metodene på ett sted. Det kan lett være en gjenbrukbar bunt i en annen kode også.
  • Deretter har vi definert ulike funksjoner for hvert ansvar, selv om det er en liten oppgave. Det hjelper å vedlikeholde koden på en enkel måte.
  • De to ovennevnte tilnærmingene hjelper oss med å oppdatere appen uten problemer hvis vi ønsker å oppdatere spillet.
  Slik viser du bilde EXIF-data

Tilpass gjerne strukturen og forbedre den basert på ditt prosjekt. Strukturering av koden er ikke begrenset.

Siste ord

Hurra! 😎 Du har laget et spill helt fra bunnen av. Det er ikke et av de visuelle spillene vi spiller daglig. Men det hjelper deg å skrive logikk og opprettholde ren struktur i kode. Følg lignende retningslinjer for å lage noen interessante spill som dette. Du kan finne lignende spill hvis du går noen år tilbake til barndommen.

Lykke til med koding! 👩‍💻

Deretter kan du utforske hvordan du lager tallgjetting og enhetstesting med Python unittest-modulen.

Likte du å lese artikkelen? Hva med å dele med verden?