Πώς να δημιουργήσετε ένα παιχνίδι Tic-Tac-Toe στην Python;

Ας δημιουργήσουμε ένα απλό παιχνίδι Tic Tac Toe στην Python. Θα σας βοηθήσει να δημιουργήσετε τη λογική του παιχνιδιού και να κατανοήσετε πώς να δομήσετε τον κώδικα.

Το gaming είναι μια από τις ψυχαγωγίες που έχουν οι άνθρωποι. Μπορούμε να βρούμε διαφορετικούς τύπους παιχνιδιών στο διαδίκτυο, κινητά, επιτραπέζιους υπολογιστές κ.λπ. Δεν είμαστε εδώ για να φτιάξουμε ένα από αυτά τα βαριά παιχνίδια τώρα. Θα δημιουργήσουμε ένα παιχνίδι CLI tic-tac-toe χρησιμοποιώντας Python.

Εάν δεν είστε εξοικειωμένοι με το Tic Tac Toe, παίξτε το οπτικά εδώ να καταλαβεις. Μην ανησυχείτε, ακόμα κι αν δεν το καταλαβαίνετε, θα το δούμε.

Τρίλιζα

Το σεμινάριο χωρίζεται σε τρεις διαφορετικές ενότητες. Στην πρώτη ενότητα, θα μάθετε πώς να παίζετε το παιχνίδι τικ-τακ. Μετά από αυτό, θα δούμε έναν αλγόριθμο που μας βοηθά να καταλήξουμε στη λογική του παιχνιδιού. Τέλος, θα δούμε τον δομημένο κώδικα και την εξήγησή του.

Μπορείτε να παραλείψετε την πρώτη ενότητα εάν γνωρίζετε ήδη πώς να παίζετε Tic Tac Toe.

Έτσι, χωρίς περαιτέρω καθυστέρηση, ας βουτήξουμε στην πρώτη μας ενότητα.

Παίζοντας Tic Tac Toe

Θα υπάρχουν δύο παίκτες σε ένα παιχνίδι. Δύο σημάδια αντιπροσωπεύουν κάθε παίκτη. Τα γενικά σημάδια που χρησιμοποιούνται στο παιχνίδι είναι το X και το O. Τέλος, θα υπάρχει ένας πίνακας με 9 κουτιά.

Δείτε οπτικά τον πίνακα τικ-τακ.

Tic Tac Toe Board

Το gameplay θα είναι το εξής.

  • Αρχικά, ένας χρήστης θα τοποθετήσει το σήμα του σε ένα από τα διαθέσιμα κενά κουτιά.
  • Στη συνέχεια, ο δεύτερος χρήστης θα τοποθετήσει το σήμα του σε ένα από τα διαθέσιμα κενά κουτιά.
  • Ο στόχος των παικτών είναι να τοποθετήσουν τις αντίστοιχες πινακίδες τους εντελώς κατά σειρά ή στήλης ή διαγώνια.
  • Το παιχνίδι συνεχίζεται έως ότου ένας παίκτης κερδίσει το παιχνίδι ή κατέληξε σε ισοπαλία γεμίζοντας όλα τα κουτιά χωρίς νικηφόρο αγώνα.

Ας δούμε μερικά παιχνίδια οπτικά.

Tic Tac Toe Win Gameplay

Ο παίκτης Χ κερδίζει το παιχνίδι στο παραπάνω gameplay. Όλα τα κουτιά γεμίζουν διαγώνια με σημάδια Χ. Έτσι, ο αντίστοιχος παίκτης κερδίζει το παιχνίδι.

  Τι σημαίνει Share Focus Status στο iPhone;

Υπάρχουν συνολικά 8 τρόποι για να κανονίσετε το ίδιο ζώδιο και να κερδίσετε το παιχνίδι. Ας δούμε και τις 8 ρυθμίσεις που μπορούν να κερδίσουν το παιχνίδι.

Διακανονισμοί νικητήριου τικ Τακ

Και τέλος, μια ισοπαλία γεμίζει το ταμπλό χωρίς καμία νικηφόρα διάταξη. Ελπίζω να καταλάβατε πώς να κάνετε Tic Tac Toe τώρα.

Τώρα, είναι ώρα παιχνιδιού για εσάς. Μπορείς να πηγαίνεις εδώ και παίξτε το για να κατανοήσετε πλήρως το παιχνίδι. Αφήστε το αν το έχετε ήδη πάρει.

Τώρα, ήρθε η ώρα να μετακινήσετε την ενότητα του αλγορίθμου.

Αλγόριθμος

Θα συζητήσουμε τώρα τον αλγόριθμο για τη σύνταξη του κώδικα. Αυτός ο αλγόριθμος θα σας βοηθήσει να γράψετε κώδικα σε οποιαδήποτε γλώσσα προγραμματισμού της επιλογής σας. Ας δούμε πώς γίνεται.

  • Δημιουργήστε έναν πίνακα χρησιμοποιώντας έναν δισδιάστατο πίνακα και αρχικοποιήστε κάθε στοιχείο ως κενό.
    • Μπορείτε να αναπαραστήσετε το κενό χρησιμοποιώντας οποιοδήποτε σύμβολο θέλετε. Εδώ, θα χρησιμοποιήσουμε μια παύλα. ‘-‘.
  • Γράψτε μια συνάρτηση για να ελέγξετε εάν ο πίνακας είναι γεμάτος ή όχι.
    • Επαναλάβετε πάνω από τον πίνακα και επιστρέψτε το false εάν ο πίνακας περιέχει ένα κενό σύμβολο ή αλλιώς επιστρέψτε true.
  • Γράψτε μια συνάρτηση για να ελέγξετε εάν ένας παίκτης έχει κερδίσει ή όχι.
    • Πρέπει να ελέγξουμε όλες τις δυνατότητες που συζητήσαμε στην προηγούμενη ενότητα.
    • Ελέγξτε για όλες τις σειρές, τις στήλες και τις δύο διαγώνιες.
  • Γράψτε μια συνάρτηση για να εμφανιστεί ο πίνακας καθώς θα δείξουμε τον πίνακα πολλές φορές στους χρήστες ενώ παίζουν.
  • Γράψτε μια συνάρτηση για να ξεκινήσει το παιχνίδι.
    • Επιλέξτε την πρώτη στροφή του παίκτη τυχαία.
    • Γράψτε έναν άπειρο βρόχο που σπάει όταν τελειώσει το παιχνίδι (είτε νίκη είτε ισοπαλία).
      • Δείξτε τον πίνακα στον χρήστη για να επιλέξει το σημείο για την επόμενη κίνηση.
      • Ζητήστε από τον χρήστη να εισαγάγει τον αριθμό γραμμής και στήλης.
      • Ενημερώστε το σημείο με το αντίστοιχο σήμα του παίκτη.
      • Ελέγξτε αν ο τρέχων παίκτης κέρδισε το παιχνίδι ή όχι.
      • Εάν ο τρέχων παίκτης κέρδισε το παιχνίδι, τότε εκτυπώστε ένα νικητήριο μήνυμα και σπάστε τον άπειρο βρόχο.
      • Στη συνέχεια, ελέγξτε αν ο πίνακας είναι γεμάτος ή όχι.
      • Εάν ο πίνακας είναι γεμάτος, τότε εκτυπώστε το μήνυμα κλήρωσης και σπάστε τον άπειρο βρόχο.
    • Τέλος, δείξτε στον χρήστη την τελική άποψη του πίνακα.
  Φτιάξτε τα δικά σας παιχνίδια PS4: Ξεκινώντας με το "Dreams"

Ίσως μπορείτε να οραματιστείτε τι συμβαίνει. Μην ανησυχείτε, ακόμα κι αν δεν το καταλάβατε πλήρως. Θα έχετε περισσότερη σαφήνεια μόλις δείτε τον κώδικα.

Λοιπόν, ας μεταβούμε στην ενότητα κώδικα. Υποθέτω ότι έχετε εγκαταστήσει την Python στον υπολογιστή σας για να δοκιμάσετε τον κώδικα.

Κώδικας

Μεταβείτε στον παρακάτω κώδικα.

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

Ελέγξτε το δείγμα εξόδου του κώδικα.

$ 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

Μερικά σημαντικά σημεία που σας βοηθούν να κατανοήσετε τη δομή του κώδικα.

  • Χρησιμοποιήσαμε μια κλάση για να έχουμε όλες τις μεθόδους σε ένα μέρος. Μπορεί εύκολα να είναι μια επαναχρησιμοποιήσιμη δέσμη και σε κάποιον άλλο κώδικα.
  • Στη συνέχεια, έχουμε ορίσει διαφορετικές λειτουργίες για κάθε ευθύνη, ακόμα κι αν είναι μια μικρή εργασία. Βοηθά στη διατήρηση του κώδικα με ευκολία.
  • Οι παραπάνω δύο προσεγγίσεις μας βοηθούν να ενημερώσουμε την εφαρμογή χωρίς κόπο, αν θέλουμε να ενημερώσουμε το παιχνίδι.
  Ειδήσεις Google Συμβουλές SEO για την ενίσχυση της προβολής του ιστότοπου

Μη διστάσετε να προσαρμόσετε τη δομή και να τη βελτιώσετε με βάση το έργο σας. Η δόμηση του κώδικα δεν περιορίζεται.

Τελικές Λέξεις

Ούρα! 😎 Έχετε δημιουργήσει ένα παιχνίδι εντελώς από την αρχή. Δεν είναι από τα οπτικά παιχνίδια που παίζουμε καθημερινά. Αλλά σας βοηθά να γράφετε λογική και να διατηρείτε καθαρή δομή στον κώδικα. Ακολουθήστε παρόμοιες οδηγίες για να δημιουργήσετε μερικά ενδιαφέροντα παιχνίδια όπως αυτό. Μπορείτε να βρείτε παρόμοια παιχνίδια αν γυρίσετε κάποια χρόνια πίσω στην παιδική σας ηλικία.

Καλή Κωδικοποίηση! 👩‍💻

Στη συνέχεια, εξερευνήστε πώς να δημιουργήσετε παιχνίδι εικασίας αριθμών και Δοκιμή μονάδων με την ενότητα δοκιμής μονάδας Python.

Σας άρεσε να διαβάζετε το άρθρο; Τι θα λέγατε να μοιράζεστε με τον κόσμο;