Tin tức và phân tích của tất cả các thiết bị di động

Làm cách nào để tạo trò chơi tic-tac-toe trong python?

Hãy 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 của mình và hiểu cách cấu trúc mã của bạn.

Trò chơi là một trong những trò tiêu khiển mà mọi 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 ra một trong những trò chơi nặng đó ngay bây giờ. Chúng tôi sẽ tạo một trò chơi tic tac toe trong CLI bằng python.

Nếu bạn không quen với trò chơi tic-tac-toe, hãy chơi trực quan tại đây để hiểu. Đừng lo lắng ngay cả khi bạn không hiểu nó, chúng ta sẽ thấy.

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ẽ học cách chơi nought và cross. Tiếp theo, chúng ta sẽ thấy một thuật toán giúp chúng ta tìm ra logic của trò chơi. Cuối cùng, chúng ta sẽ thấy mã có cấu trúc và phần giải thích của nó.

Bạn có thể bỏ qua phần đầu tiên nếu bạn đã biết chơi tic-tac-toe.

Vì vậy, không có gì khó chịu, hãy chuyển sang phần đầu tiên của chúng tôi.

trò chơi noughts and cross

Sẽ có hai người chơi trong trò chơi. Hai nhân vật đại diện cho mỗi người chơi. Các ký tự chung được sử dụng trong trò chơi là X và O. Cuối cùng, bảng z sẽ xuất hiện 9 lĩnh vực.

Trực quan nhìn thấy bảng tic-tac-toe.

Bàn Tic Tac Toe

Trò chơi sẽ như thế này.

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

Hãy xem một số giao diện trực quan.

Giành chiến thắng trong trò chơi noughts and crosses

Người chơi X thắng trò chơi trong trò chơi trên. Tất cả các ô vuông theo đường chéo được tô bằng chữ X. Vì vậy, người chơi chính xác sẽ thắng trò chơi.

Có một tổng số 8 cách để làm cho 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 kết hợp có thể giành chiến thắng trong trò chơi.

Chiến thắng kết hợp tic-tac-toe

Và cuối cùng, hòa sẽ lấp đầy bàn cờ mà không có ván bài nào thắng. Tôi hy vọng bây giờ bạn đã hiểu cách làm tic-tac-toe.

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

Bây giờ là lúc để di 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 một mảng sử dụng mảng hai chiều và khởi tạo mỗi phần tử là rỗng.
    • Bạn có thể đại diện trống với bất kỳ ký hiệu nào. Ở đây chúng ta sẽ sử dụng dấu gạch nối. ‘-‘.
  • Viết hàm kiểm tra mảng đã đầy hay chưa.
    • Lặp lại mảng và trả về false nếu mảng chứa ký tự trống hoặc trả về true.
  • Viết hàm kiểm tra xem một người chơi có thắng hay không.
    • Chúng ta cần 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 một chức năng để hiển thị bảng, vì chúng tôi sẽ hiển thị nó cho người dùng nhiều lần trong trò chơi.
  • Viết hàm chạy game.
    • 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 sẽ bị gián đoạn 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 nơi di chuyển tiếp theo.
      • Yêu cầu người dùng nhập số hàng và số cột.
      • Cập nhật vị trí với dấu người chơi thích hợp.
      • 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, hãy in thông báo chiến thắng và phá vỡ vòng lặp vô hạn.
      • Sau đó kiểm tra xem bảng đã được lấp đầy hay chưa.
      • Nếu bảng đầy, hãy in thông báo hòa 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 mảng.

Bạn có thể tưởng tượng những gì đang xảy ra. Đừng lo lắng, ngay cả khi bạn không hiểu đầy đủ về nó. Bạn sẽ hiểu rõ hơn khi xem mã.

Vì vậy, hãy chuyển sang phần mã. Tôi cho rằng bạn đã cài đặt Python trên máy của mình để thử mã.

Mã số

Đi qua 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ã ví dụ.

$ 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ể là một gói có thể tái sử dụng trong mã khác.
  • Sau đó, 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ỏ. Giúp bạn duy trì mã của mình 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 một cách liền mạch nếu chúng tôi muốn cập nhật trò chơi.

Bạn có thể tùy chỉnh cấu trúc và cải thiện nó dựa trên thiết kế của bạn. Cấu trúc mã không bị giới hạn.

những từ cuối

Tiếng hoan hô! 😎 Bạn đã tạo trò chơi hoàn toàn từ đầu. Đây 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 viết logic và giữ cho cấu trúc mã sạch sẽ. 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ư trò chơi này. Bạn có thể tìm thấy những trò chơi tương tự nếu bạn quay lại thời thơ ấu của mình vài năm.

Chúc mừng mã hóa! 👩‍💻

Sau đó, tìm hiểu cách tạo trò chơi đoán số và kiểm tra đơn vị với mô-đun unittest Python.

Thích bài viết? Làm thế nào về chia sẻ với thế giới?