Tic Tac Toe 2 Chuyên gia phân công Python

Tôi đang tạo một trò chơi tic tac toe chỉ để tiếp thu tốt hơn các khái niệm mà tôi đang học với lập trình python

Tại một thời điểm trong mã của tôi, tôi đang cố gắng thay thế ký tự bằng chữ in hoa, bởi vì người dùng có thể đặt "meio-E" hoặc "meio-e" nhưng tôi vẫn gặp lỗi "TypeError. đối tượng 'str' không hỗ trợ gán mục"

Đây là phần tôi đang cố gắng thay đổi

# Função que coloca as peças X no tabuleiro
def coloca_pecas_X(tabuleiro):
    desenha_tabuleiro(o_tabuleiro)
    print("Faça sua Jogada (topo, meio, baixo)-(E, M, D). Ex: topo-M")
    jogada = input()
    jogada[-1] = jogada[-1].upper()
    
    tabuleiro[jogada] = " X "

Thông báo lỗi đầy đủ là như nó đi

    Traceback (most recent call last):
  File "D:\Usuário\Documents\Curso Python\jogo_da_veia.py", line 65, in 
    proxJogada()
  File "D:\Usuário\Documents\Curso Python\jogo_da_veia.py", line 57, in proxJogada
    coloca_pecas_X(o_tabuleiro)
  File "D:\Usuário\Documents\Curso Python\jogo_da_veia.py", line 33, in coloca_pecas_X
    jogada[-1] = jogada[-1].upper()
TypeError: 'str' object does not support item assignment

Tôi sẽ biết ơn nếu ai đó có thể giúp tôi

Mã đầy đủ

# Jogo da velha
# Autor: Arthur Silva
# Data: 11/08/2020

o_tabuleiro = {
    "topo-E": "  ",
    "topo-M": "  ",
    "topo-D": "  ",
    "meio-E": "  ",
    "meio-M": "  ",
    "meio-D": "  ",
    "baixo-E": "  ",
    "baixo-M": "  ",
    "baixo-D": "  ",
}

# Função que desenha o tabuleiro
def desenha_tabuleiro(tabuleiro):
    print(tabuleiro["topo-E"] + "|" + tabuleiro["topo-M"] + "|" + tabuleiro["topo-D"])
    print("--------")
    print(tabuleiro["meio-E"] + "|" + tabuleiro["meio-M"] + "|" + tabuleiro["meio-D"])
    print("--------")
    print(
        tabuleiro["baixo-E"] + "|" + tabuleiro["baixo-M"] + "|" + tabuleiro["baixo-D"]
    )


# Função que coloca as peças X no tabuleiro
def coloca_pecas_X(tabuleiro):
    desenha_tabuleiro(o_tabuleiro)
    print("Faça sua Jogada (topo, meio, baixo)-(E, M, D). Ex: topo-M")
    jogada = input()
    jogada[-1] = jogada[-1].upper()
    
    tabuleiro[jogada] = " X "
    desenha_tabuleiro(o_tabuleiro)
    print("\n\n\n\n")


# Função que coloca as peças O no tabuleiro
def coloca_pecas_O(tabuleiro):
    desenha_tabuleiro(o_tabuleiro)
    print("Faça sua Jogada (topo, meio, baixo)-(E, M, D). Ex: topo-M")
    jogada = input()
    jogada[-1] = jogada[-1].upper()
    
    tabuleiro[jogada] = " O "
    desenha_tabuleiro(o_tabuleiro)
    print("\n\n\n\n")


def proxJogada():
    contador = 1
    while contador == 1 or contador == -1:
        if contador == 1:
            print("Sua vez, X")
            coloca_pecas_X(o_tabuleiro)
            contador = contador * -1
        else:
            print("Sua vez, O")
            coloca_pecas_O(o_tabuleiro)
            contador = contador * -1


proxJogada()

Xin lưu ý rằng ghi chú vẫn chưa hoàn thành, vì tôi đang mong loại bỏ nghi ngờ này

Tic Tac Toe Python, là những gì chúng ta sẽ làm trong bài đăng này. Tic tac toe là một trò chơi đơn giản mà hầu hết nếu không phải ai cũng biết. Bạn cũng có thể gọi nó là trò chơi của X và O

Nó được chơi như thế nào

Hai người chơi trò chơi. Họ đặt một x hoặc một o trong một lưới ba nhân ba. Bạn giành chiến thắng bằng cách đặt chữ cái của mình lấp đầy một hàng hoặc cột hoàn chỉnh hoặc theo đường chéo trên trường sudoku

Chơi với máy tính

Chơi một trò chơi như vậy với máy tính liên quan đến việc triển khai một loại AI trong chương trình. AI thực hiện các bước di chuyển theo cách tương tự như ý muốn của con người và phải đủ đơn giản và hợp lý. Tóm lại, bạn sẽ đấu với một máy tính AI

Định nghĩa

Các chức năng được định nghĩa trong python bằng cách sử dụng từ 'def'. Chúng tôi sẽ sử dụng một số chức năng trong chương trình Tic Tac Toe Python của chúng tôi vì rất nhiều mã có thể tái sử dụng và thực sự sẽ được sử dụng lại nhiều lần để đảm bảo trò chơi chạy. Các chức năng như sau

1. bảng trống

Đây là một khai báo biến hơn là một hàm. Chúng tôi tạo một bảng trống với các khoảng trống để đặt “x's” và “o's”. Nó chủ yếu là một bảng ba nhân ba với các khe trống

board = [' ' for x in range(10)]

2. Chức năng in bảng

Chức năng này sẽ in ra bảng mỗi khi một chữ 'x' hoặc 'o' được đặt trên bảng. Bảng sẽ trông có thể hiển thị trên bất kỳ trình bao nào hoặc không hoạt động mà bạn chạy nó trên đó

def printBoard(board):
    print(" " + board[1] + "| " + board[2] + "| " + board[3])
    print("---------")
    print(" " + board[4] + "| " + board[5] + "| " + board[6])
    print("---------")
    print(" " + board[7] + "| " + board[8] + "| " + board[9])

Các biến bảng là các giá trị thực được lưu trong mảng bảng

3. Một chức năng để kiểm tra xem bảng đã đầy chưa

Chúng ta cần phải liên tục kiểm tra xem bàn cờ đã hoàn toàn chưa để kết thúc trò chơi. Nếu bàn đầy thì hòa. Bàn cờ có thể đầy mà không có người chiến thắng nào được tuyên bố và do đó có thể thực hiện một nước đi. Hàm này rất đơn giản và trả về giá trị đúng hoặc sai. Chức năng này sẽ được gọi mỗi lần trước khi di chuyển được thực hiện

def isBoardFull(board):
    if board.count(" ") > 1:
        return False
    else:
        return True

4. Một chức năng để kiểm tra nếu có một người chiến thắng

Nếu bảng không đầy, thì chúng tôi sẽ kiểm tra xem có người chiến thắng không. chúng tôi tuyên bố người chiến thắng nếu ba chữ “x” hoặc ba chữ “o” xuất hiện trong một hàng hoặc trong một cột hoặc theo đường chéo

def isWinner(bo, le):
    return (bo[7] == le and bo[8] == le and bo[9] == le) or 
           (bo[4] == le and bo[5] == le and bo[6] == le) or 
           (bo[1] == le and bo[2] == le and bo[3] == le) or 
           (bo[1] == le and bo[4] == le and bo[7] == le) or  
           (bo[2] == le and bo[5] == le and bo[8] == le) or 
           (bo[3] == le and bo[6] == le and bo[9] == le) or 
           (bo[1] == le and bo[5] == le and bo[9] == le) or  
           (bo[3] == le and bo[5] == le and bo[7] == le)
#Note that all this code falls on line. 
#Do not go to the next line.
#"bo" stands for the board.
#"le" stands for the letter or symbol we're checking.

5. Chức năng chèn ký tự

Chúng tôi đặt ra xu hướng rằng người dùng con người sẽ luôn là người đầu tiên bắt đầu và anh ta sẽ sử dụng 'x'. Sau đó, người dùng nên chèn một vị trí số trên bảng trong đó 'x' sẽ được đặt. Vị trí số tương tự như định dạng “T9” và do đó bạn chèn một số bao gồm từ một đến chín

def insertLetter(letter, pos):
    board[pos] = letter

Đây là một chức năng đơn giản chèn các chữ cái “x” và “o” vào vị trí do người dùng hoặc máy tính AI chọn

6. Một chức năng để kiểm tra xem vị trí là miễn phí

Chúng tôi xác định một chức năng kiểm tra xem vị trí được chọn bởi người dùng hoặc AI của máy tính có trống không. Đây là một hàm boolean và sẽ trả về true hoặc false tùy thuộc vào trạng thái của vị trí

________số 8

7. Một chức năng để người chơi di chuyển

Chức năng này nhắc người dùng nhập một vị trí trên bảng để đặt dấu x. Nó kiểm tra xem đầu vào của người dùng có hợp lệ không. Nếu đầu vào hợp lệ, vị trí đó sẽ được kiểm tra trạng thái của nó, có người sử dụng hoặc trống. Nó lưu chữ cái ở vị trí đó nếu nó kiểm tra với hai trường hợp. Nếu nó không vượt qua một trường hợp, thì một lỗi sẽ được trả lại tương ứng. Điều này có nghĩa là nếu nó bị chiếm dụng, người dùng sẽ được cảnh báo và yêu cầu chọn một số khác. Nếu người dùng nhập một số lớn hơn, họ sẽ được nhắc nhập một số hợp lệ

def playMove():
    run = True
    while run:
        move = input("Please select position for 'X'(1-9): ")
        try:
            move = int(move)
            if move > 0 and move < 10 :
                if spaceIsFree(move):
                    run = False
                    insertLetter("x", move)
                else:
                    print("Sorry this space is occupied")
            else:
                print("Please type the number within the range")
        except:
            print("Please type a number. ")

8. Chức năng AI cho máy tính

Đây là chức năng chọn ra phương án mà máy tính sẽ thực hiện. Đơn giản, trước tiên, nó sẽ kiểm tra các khoảng trống có sẵn và lưu trữ các vị trí trong một biến

Sau đó, nó sẽ kiểm tra xem nó có bất kỳ nước đi khả thi nào cho phép nó giành chiến thắng hay không. Nếu vậy thì nó sẽ đặt chữ cái của nó ở đó.
Nếu không, nó sẽ kiểm tra xem đối thủ, tức là bạn, có sắp thắng hay không và nếu có, nó sẽ phản công và đặt một lá thư để chặn bạn thắng.

Khi cả hai đều không đúng, thì bạn có thể tự do đặt một chữ cái ở bất kỳ đâu trong các ô có sẵn. Tuy nhiên, để làm cho nó có một số logic, nó sẽ đặt một chữ cái ngẫu nhiên ở các góc, nếu các góc đó trống. Nếu chưa sẽ tiến hành pick slot giữa nếu mở.
Khi không có trường hợp nào ở trên đúng thì nó sẽ chọn ngẫu nhiên một ô cạnh trống và đặt ký tự của nó vào đó.

    Traceback (most recent call last):
  File "D:\Usuário\Documents\Curso Python\jogo_da_veia.py", line 65, in 
    proxJogada()
  File "D:\Usuário\Documents\Curso Python\jogo_da_veia.py", line 57, in proxJogada
    coloca_pecas_X(o_tabuleiro)
  File "D:\Usuário\Documents\Curso Python\jogo_da_veia.py", line 33, in coloca_pecas_X
    jogada[-1] = jogada[-1].upper()
TypeError: 'str' object does not support item assignment
0

9. Chọn một chức năng ngẫu nhiên

Chức năng này chỉ đơn giản là chọn một vị trí ngẫu nhiên trên bảng để máy tính đặt chữ cái của nó. Điều này làm cho AI không thể đoán trước theo một nghĩa nào đó.
Nó được triển khai trong chức năng AI đã xác định trước đó. Để tạo ra một số ngẫu nhiên, chúng tôi sẽ sử dụng mô-đun ngẫu nhiên.

    Traceback (most recent call last):
  File "D:\Usuário\Documents\Curso Python\jogo_da_veia.py", line 65, in 
    proxJogada()
  File "D:\Usuário\Documents\Curso Python\jogo_da_veia.py", line 57, in proxJogada
    coloca_pecas_X(o_tabuleiro)
  File "D:\Usuário\Documents\Curso Python\jogo_da_veia.py", line 33, in coloca_pecas_X
    jogada[-1] = jogada[-1].upper()
TypeError: 'str' object does not support item assignment
1

10. chức năng chính

Chức năng chính gọi tất cả các chức năng khác theo thứ tự. Nó là xương sống của trò chơi và tạo thành một cú pháp theo trình tự thời gian của các hàm và các trường hợp được chọn khác

    Traceback (most recent call last):
  File "D:\Usuário\Documents\Curso Python\jogo_da_veia.py", line 65, in 
    proxJogada()
  File "D:\Usuário\Documents\Curso Python\jogo_da_veia.py", line 57, in proxJogada
    coloca_pecas_X(o_tabuleiro)
  File "D:\Usuário\Documents\Curso Python\jogo_da_veia.py", line 33, in coloca_pecas_X
    jogada[-1] = jogada[-1].upper()
TypeError: 'str' object does not support item assignment
2

Chức năng chính hơi phức tạp và yêu cầu bạn xem kỹ từng dòng, từng khối. Tất cả những gì chúng ta cần làm bây giờ là gọi chức năng chính của chúng ta để chạy trò chơi

def printBoard(board):
    print(" " + board[1] + "| " + board[2] + "| " + board[3])
    print("---------")
    print(" " + board[4] + "| " + board[5] + "| " + board[6])
    print("---------")
    print(" " + board[7] + "| " + board[8] + "| " + board[9])
0

Mã hoàn chỉnh cho Tic Tac Toe Python

Bây giờ chúng ta hãy xem mã đầy đủ của trò chơi được kết hợp thành một. tập tin py.
Hãy nhớ rằng bạn có thể lưu trữ các chức năng trong các tệp khác nhau nhưng bạn sẽ phải nhập chúng vào chức năng chính. Tuy nhiên, để trò chơi trở nên đơn giản và dễ đọc, chúng tôi lưu trữ tất cả mã trong một tệp

def printBoard(board):
    print(" " + board[1] + "| " + board[2] + "| " + board[3])
    print("---------")
    print(" " + board[4] + "| " + board[5] + "| " + board[6])
    print("---------")
    print(" " + board[7] + "| " + board[8] + "| " + board[9])
1

Để hiểu sâu hơn về cách tạo trò chơi tic-tac-toe trong python, hãy xem video bên dưới