Python 游戏:重新设置棋盘问题(井字游戏)

问题描述 投票:0回答:1
board = ["0", "1", "2", "3", "4", "5", "6", "7", "8"]

def print_board():
    print(f"{board[0]} | {board[1]} | {board[2]}")
    print("----------")
    print(f"{board[3]} | {board[4]} | {board[5]}")
    print("----------")
    print(f"{board[6]} | {board[7]} | {board[8]}")

print_board()

def game():
    point_x = 0
    point_o = 0
    while True:
        player_x = input("Enter where you'd like to place X: ")
        position_x = int(player_x)
        if board[position_x] != "X":
            board[position_x] = 'X'
            print_board()
            print()
            if board[0] == board[1] == board[2] or board[3] == board[4] == board[5] or board[6] == board[7] == board[8] or board[0] == board[3] == board[6] or board[1] == board[4] == board[7] or board[2] == board[5] == board[8] or board[0] == board[4] == board[8] or board[2] == board[4] == board[6]:
                print("X won!")
                point_x = point_x + 1
                print(f"X has {point_x} points")
                play_game_again()
        else:
            print("That position is already taken.")
        
        player_0 = input("Enter where you'd like to place O: ")
        position_o = int(player_0)
        if board[position_o] != 'O':
            board[position_o] = 'O'
            print_board()
            print()
            if board[0] == board[1] == board[2] or board[3] == board[4] == board[5] or board[6] == board[7] == board[8] or board[0] == board[3] == board[6] or board[1] == board[4] == board[7] or board[2] == board[5] == board[8] or board[0] == board[4] == board[8] or board[2] == board[4] == board[6]:
                print("O won!")
                point_o = point_o + 1
                print(f"O has {point_o} points")
                play_game_again()
        else:
            print("That position is already taken.")

def play_game_again():
    global board 
    play_game = input("Would you like to play the game again? ")
    if play_game.lower() == "yes":
        board = ["0", "1", "2", "3", "4", "5", "6", "7", "8"]
        if 'X' or 'O' in board:
            def print_board():
                print(f"{board[0]} | {board[1]} | {board[2]}")
                print("----------")
                print(f"{board[3]} | {board[4]} | {board[5]}")
                print("----------")
                print(f"{board[6]} | {board[7]} | {board[8]}")
        print_board()
        game()
    else:
        print("Thanks for playing!")
        quit()

game()

我在重新设置主板时发现错误。它显示新板,但位置仍然被 X 或 O 占据。它在程序/输出中看不到,但可能在内存中。

有人可以在他们的机器上运行这个程序并让我知道如何重新设置棋盘以便用户可以再次玩游戏吗?

非常感谢!

我尝试在程序下方的某个位置重新设置棋盘(仅当用户想再次玩游戏时),但它不起作用。

我希望代码能够在用户想再次玩游戏时重新设置棋盘,以便用户可以将“X”或“O”的位置放置在之前使用过的位置。

棋盘显示就像重新设置一样,但例如:

当你第一次玩游戏时,将X放在位置0 - 这个位置现在已被占用。

现在,当你再次玩游戏时,当你进入位置0时,它仍然说该位置已被占用 - 这就是我面临的问题。

我希望它重新设置棋盘,以便你可以在你之前输入的位置再次输入X或O。

但在当前代码中,它不会发生。

python
1个回答
0
投票

我检查了您的代码,发现其中存在多个错误/错误。我将尝试列出以下所有功能 -

1.) 添加了绘图功能

2.) 添加了有效的移动功能,如果玩家选择已经发生的情况,那么他们需要选择另一个,如果不这样做,游戏将不会继续。

3.) 在 game() 中添加了 return 语句,并且还避免了当 iam 在 while True: 全局循环中运行 game() 时的递归。

4.) 添加了积分表

5.)修复了板子正确重置的问题,无需将其设置为全局,因为它是列表

6.)添加/修复了更多错误

board = ["0", "1", "2", "3", "4", "5", "6", "7", "8"]


def print_board():
    print(f"{board[0]} | {board[1]} | {board[2]}")
    print("----------")
    print(f"{board[3]} | {board[4]} | {board[5]}")
    print("----------")
    print(f"{board[6]} | {board[7]} | {board[8]}")


def check_draw():
    return all(position == "X" or position == "O" for position in board)


def game():
    global point_x, point_o
    while True:
        valid_move = False
        while not valid_move:
            player_x = input("Enter where you'd like to place X: ")
            position_x = int(player_x)
            if board[position_x] != "X" and board[position_x] != "O":
                board[position_x] = "X"
                valid_move = True
            else:
                print("That position is already taken. Try again.")

        print_board()
        print()
        if (
            board[0] == board[1] == board[2]
            or board[3] == board[4] == board[5]
            or board[6] == board[7] == board[8]
            or board[0] == board[3] == board[6]
            or board[1] == board[4] == board[7]
            or board[2] == board[5] == board[8]
            or board[0] == board[4] == board[8]
            or board[2] == board[4] == board[6]
        ):
            print("X won!")
            point_x = point_x + 1 
            return  

        if check_draw():
            print("It's a draw!")
            return

        valid_move = False
        while not valid_move:
            player_0 = input("Enter where you'd like to place O: ")
            position_o = int(player_0)
            if board[position_o] != "X" and board[position_o] != "O":
                board[position_o] = "O"
                valid_move = True
            else:
                print("That position is already taken. Try again.")
        print_board()
        print()
        if (
            board[0] == board[1] == board[2]
            or board[3] == board[4] == board[5]
            or board[6] == board[7] == board[8]
            or board[0] == board[3] == board[6]
            or board[1] == board[4] == board[7]
            or board[2] == board[5] == board[8]
            or board[0] == board[4] == board[8]
            or board[2] == board[4] == board[6]
        ):
            print("O won!")
            point_o = point_o + 1 
            return

        if check_draw():
            print("It's a draw!")
            return
        
def points_table():
    print(f"X has {point_x} points")
    print(f"O has {point_o} points")


first_time_play = True
point_x = 0
point_o = 0

while True:
    if first_time_play:
        first_time_play = False
        point_x = 0 
        point_o = 0
        print_board()
        game()
        points_table()
    else:
        play_game = input("Would you like to play the game again?\n Type Yes or No ")
        if play_game.lower() == "yes" or play_game.lower() == "y":
            board = ["0", "1", "2", "3", "4", "5", "6", "7", "8"]
            print_board()
            game()
            points_table()
        else:
            print("Thanks for playing!")
            quit()

请彻底检查一遍代码,这是我想到的一个幼稚的解决方案。如果我错过了什么,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.