Làm thế nào để tạo một trò chơi Tic-Tac-Toe bằng Python?

Spread the love

Hãy để chúng tôi tạo một trò chơi Tic Tac Toe đơn giản bằng Python. Nó sẽ giúp bạn xây dựng logic trò chơi và hiểu cách cấu trúc mã.

Chơi game là một trong những trò giải trí mà con người có. Chúng tôi có thể tìm thấy các loại trò chơi khác nhau trên web, thiết bị di động, máy tính để bàn, v.v. Chúng tôi không ở đây để tạo một trong những trò chơi nặng đó. Chúng tôi sẽ tạo một trò chơi CLI tic-tac-toe bằng Python.

Nếu bạn chưa quen với Tic Tac Toe, hãy chơi trực quan nơi đây hiểu. Đừng lo lắng, ngay cả khi bạn không hiểu nó, chúng tôi sẽ xem nó.

TIC Tac Toe

Hướng dẫn được chia thành ba phần khác nhau. Trong phần đầu tiên, bạn sẽ biết cách chơi trò chơi tic-tac-toe. Sau đó, chúng ta sẽ thấy một thuật toán giúp chúng ta đưa ra logic trò chơi. Cuối cùng, chúng ta sẽ thấy mã có cấu trúc và giải thích của nó.

Bạn có thể bỏ qua phần đầu tiên nếu bạn đã biết cách chơi Tic Tac Toe.

Vì vậy, không cần biết thêm, hãy đi sâu vào phần đầu tiên của chúng tôi.

Chơi Tic Tac Toe

Sẽ có hai người chơi trong một trò chơi. Hai dấu hiệu đại diện cho mỗi người chơi. Các dấu hiệu chung được sử dụng trong trò chơi là X và O. Cuối cùng, sẽ có một bảng có 9 ô.

Xem bảng tic-tac-toe một cách trực quan.

Bảng Tic Tac Toe

Cách chơi sẽ như sau.

  • Đầu tiên, một người dùng sẽ đặt đăng nhập của họ vào một trong các ô trống có sẵn.
  • Tiếp theo, người dùng thứ hai sẽ đặt đăng nhập của họ vào một trong các ô trống có sẵn.
  • Mục tiêu của người chơi là đặt các dấu hiệu tương ứng của họ hoàn toàn theo hàng hoặc theo cột, hoặc theo đường chéo.
  • Trò chơi tiếp tục cho đến khi một người chơi thắng trò chơi hoặc kết thúc trò chơi hòa bằng cách điền vào tất cả các ô mà không có trận thắng.

Hãy xem một số gameplays một cách trực quan.

Tic Tac Toe Win Gameplay

  26 trò chơi Tycoon hay nhất trên Roblox

Người chơi X thắng trò chơi trong cách chơi trên. Tất cả các hộp điền dấu X theo đường chéo. Vì vậy, người chơi tương ứng sẽ thắng trò chơi.

Có tổng cộng 8 cách để sắp xếp cùng một dấu hiệu và giành chiến thắng trong trò chơi. Hãy xem tất cả 8 cách sắp xếp có thể giành chiến thắng trong trò chơi.

Sắp xếp chiến thắng Tic Tac Toe

Và cuối cùng, một trận hòa làm đầy bảng mà không có bất kỳ sự sắp xếp chiến thắng nào. Tôi hy vọng bạn hiểu làm thế nào để Tic Tac Toe bây giờ.

Bây giờ, đó là giờ chơi cho bạn. Bạn có thể đi nơi đây và chơi nó để hiểu hoàn toàn cách chơi. Để lại nó nếu bạn đã có nó.

Bây giờ, đã đến lúc chuyển phần thuật toán.

Thuật toán

Bây giờ chúng ta sẽ thảo luận về thuật toán để viết mã. Thuật toán này sẽ giúp bạn viết mã bằng bất kỳ ngôn ngữ lập trình nào bạn chọn. Hãy xem nó được thực hiện như thế nào.

  • Tạo bảng bằng mảng 2 chiều và khởi tạo mỗi phần tử dưới dạng trống.
    • Bạn có thể biểu diễn trống bằng bất kỳ biểu tượng nào bạn thích. Ở đây, chúng ta sẽ sử dụng dấu gạch nối. ‘-‘.
  • Viết một hàm để kiểm tra xem bảng đã được lấp đầy hay chưa.
    • Lặp lại trên bảng và trả về false nếu bảng chứa dấu trống hoặc nếu không trả về true.
  • Viết hàm để kiểm tra xem người chơi đã thắng hay chưa.
    • Chúng ta phải kiểm tra tất cả các khả năng mà chúng ta đã thảo luận trong phần trước.
    • Kiểm tra tất cả các hàng, cột và hai đường chéo.
  • Viết hàm hiển thị bảng vì chúng tôi sẽ hiển thị bảng nhiều lần cho người dùng khi họ đang chơi.
  • Viết một hàm để bắt đầu trò chơi.
    • Chọn ngẫu nhiên lượt đầu tiên của người chơi.
    • Viết một vòng lặp vô hạn ngắt khi trò chơi kết thúc (thắng hoặc hòa).
      • Hiển thị bảng để người dùng chọn vị trí cho nước đi tiếp theo.
      • Yêu cầu người dùng nhập số hàng và cột.
      • Cập nhật vị trí với dấu hiệu người chơi tương ứng.
      • Kiểm tra xem người chơi hiện tại có thắng trò chơi hay không.
      • Nếu người chơi hiện tại đã thắng trò chơi, sau đó in thông báo chiến thắng và phá vỡ vòng lặp vô hạn.
      • Tiếp theo, kiểm tra xem bảng đã được lấp đầy hay chưa.
      • Nếu bảng được lấp đầy, sau đó in thông báo vẽ và phá vỡ vòng lặp vô hạn.
    • Cuối cùng, hiển thị cho người dùng chế độ xem cuối cùng của bảng.
  Camera an ninh Wi-Fi nào cho phép bạn ghi cục bộ?

Bạn có thể hình dung những gì đang xảy ra. Đừng lo lắng, ngay cả khi bạn không hiểu nó hoàn toàn. Bạn sẽ hiểu rõ hơn khi bạn nhìn thấy mã.

Vì vậy, chúng ta hãy chuyển sang phần mã. Tôi giả sử bạn đã cài đặt Python trên PC của mình để thử mã.

Mã số

Đi qua đoạn mã dưới đây.

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

Kiểm tra đầu ra mẫu của mã.

$ 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

Một số điểm chính giúp bạn hiểu cấu trúc của mã.

  • Chúng tôi đã sử dụng một lớp để có tất cả các phương thức ở một nơi. Nó cũng có thể dễ dàng là một gói có thể tái sử dụng trong một số mã khác.
  • Tiếp theo, chúng tôi đã xác định các chức năng khác nhau cho từng trách nhiệm, ngay cả khi đó là một nhiệm vụ nhỏ. Nó giúp duy trì mã một cách dễ dàng.
  • Hai cách tiếp cận trên giúp chúng tôi cập nhật ứng dụng dễ dàng nếu chúng tôi muốn cập nhật trò chơi.
  7 khóa học trực tuyến bạn cần biết

Hãy tự do điều chỉnh cấu trúc và cải thiện nó dựa trên dự án của bạn. Cấu trúc mã không bị giới hạn.

Từ cuối cùng

Tiếng hoan hô! 😎 Bạn đã tạo một trò chơi hoàn toàn từ đầu. Nó không phải là một trong những trò chơi trực quan mà chúng ta chơi hàng ngày. Nhưng nó giúp bạn viết logic và duy trì cấu trúc sạch sẽ trong mã. Thực hiện theo các hướng dẫn tương tự để tạo một số trò chơi thú vị như thế này. Bạn có thể tìm thấy những trò chơi tương tự nếu bạn quay trở lại thời thơ ấu của mình.

Chúc bạn mã hóa vui vẻ! 👩‍💻

Tiếp theo, hãy khám phá cách tạo trò chơi đoán số và Thử nghiệm đơn vị với Mô-đun độc nhất của Python.

Rất thích đọc bài báo? Làm thế nào về việc chia sẻ với thế giới?

x