【问题标题】:Inputing "X/O" inTic Tac Toe Game in Python在 Python 井字游戏中输入“X/O”
【发布时间】:2015-04-13 12:00:14
【问题描述】:

我正在尝试为井字游戏编写代码,但在模板上打印“X”时遇到困难...我的板已设置为具有 x 轴和 y 轴,我正在尝试要求用户输入 x 值和 y 值并使用该 x 和 y 值在板的正确区域打印“X”...有人可以帮我吗?

def printboard(board):
    print("     0   1   2  ")
    print()
    print(" 0   " + board[0][0] + " | " + board[0][1] +" | " + board[0][2] +" ")
    print("    ---+---+---")
    print(" 1   " + board[1][0] + " | " + board[1][1] +" | " + board[1][2] +" ")
    print("    ---+---+---")
    print(" 2   " + board[2][0] + " | " + board[2][1] +" | " + board[2][2] +" ")
    print()


def isBoardFull(board):
    print(board)
    if board[0][0]== board[0][1] == board[0][2] != " "\
            or board[1][0]== board[1][1] == board[1][2] !=" "\
            or board[2][0]== board[2][1] == board[2][2] !=" "\
            or board[0][0]== board[1][0] == board[2][0] != " "\
            or board[0][1]== board[1][1] == board[2][1] !=" "\
            or board[0][2]== board[1][2] == board[2][2] !=" "\
            or board[0][0]== board[1][1]== board[2][2] !=" "\
            or board [0][2]== board[1][1]== board[2][0] !=" ":
        print("board is full")
        return isBoardFull==True
    else:
        return isBoardFull==False

def isHorizontalTicTacToe(board):
        if board[0][0]== board[0][1] == board[0][2] != " "\
        or board[1][0]== board[1][1] == board[1][2] !=" "\
        or board[2][0]== board[2][1] == board[2][2] !=" ":
            print("You won!")
#isHorizontalTicTacToe([[" "," ", " "],["X", "X", "X"],[" ", " ", " "]])

def isVerticalTicTacToe(board):
    if board[0][0]== board[1][0] == board[2][0] != " "\
    or board[0][1]== board[1][1] == board[2][1] !=" "\
    or board[0][2]== board[1][2] == board[2][2] !=" ":
        print("You won!")
#isVerticalTicTacToe([[" ","X", " "],[" ", "X", " "],[" ", "X", " "]])    




def isDiagonalTicTacToe(board):
    if board[0][0]== board[1][1]==board[2][2] !=" "\
        or board [0][2]== board[1][1]==board[2][0] !=" ":
            print("You won!")
#isDiagonalTicTacToe([[" "," ", "X"],[" ", "X", " "],["X", " ", " "]])





def playerMove(board):
    printboard([[" "," ", " "],[" ", " ", " "],[" ", " ", " "]])
    print("Player 1 will be X")
    print("Player 2 will be O")
    playerOneH=int(input("Player One, enter X coordinates of move "))
    playerOneV=int(input("Player One, enter Y coordinates of move "))
    printboard[playerOneH,playerOneV]="X"
playerMove(1)

def playOneGame():
    printboard([[" "," ", " "],[" ", " ", " "],[" ", " ", " "]])
    #playerOneH=input("Player One, enter a horizontal coordinates for the first move ")
    #playerOneV=input("Now enter a vertical coordinate for the first move ")

#playOneGame()

def main():
    # this function should contain a loop that runs playOneGame until the user says he does not want to play anymore
    pass

【问题讨论】:

  • 我注意到的一件事:return isBoardFull == True 可能不会像您认为的那样做。它将函数与布尔值 True 进行比较,并返回结果 (False)。只需适当输入return Truereturn False

标签: python input tic-tac-toe


【解决方案1】:

就您的错误而言,在您的 printBoard 函数中,您正在为函数分配一个值,但您想将其分配给数据结构(板)

printboard[playerOneH,playerOneV]="X"

应该是

board[playerOneH][playerOneV]="X"
printboard(board)

【讨论】:

    【解决方案2】:

    仔细考虑每个函数调用应该做什么,例如:它应该获取什么参数,以及它应该返回什么。 (并且,如果它应该创建输出或读取输入)。

    例子:

    def playerMove(board):
    

    什么是板子?我有点期待它是井字游戏的代表,例如三个列表的列表,每个列表三个字符。

    但是你用它来调用它

    playerMove(1)
    

    这是一个整数,不是棋盘表示。

    例如,您可能决定该函数应允许单个玩家在固定棋盘上进行单步移动。然后你会像这样定义它:

    def playerMove(board, player):
        x = int(input("Player {}, please enter x: ".format(player)))
        y = int(input("Player {}, please enter y: ".format(player)))
        # Check whether x, y is a valid choice, that is: not yet taken
        board[x][y] = 'X' if player == 1 else 'O'
    

    因为列表是可变的,所以板子会更新。然后你需要某种循环来玩游戏:

    def playGame():
        board = [[' ', ' ', ' '], [' ', ' ', ' '], [' ', ' ', ' ']]
        finished = False
        player = 1
        while not finished:
            printboard(board)
            playerMove(board, player)
            # Check for win/end, set finished accordingly
            player = 3 - player # Switches between 1 and 2
    

    【讨论】:

    • 非常感谢您!我还有一个简单的问题,当我调用 playerMove 函数时,我会将什么作为 board 的参数?
    • 加上你的印刷板套路,这两个套路已经是一个非常基本的井字游戏了。当然,您仍然需要获胜/结束条件并检查玩家是否进行了有效的移动。但我想让你做的是,在编写函数的第一行之前,仔细考虑每个函数的用途。对于playerMove 例程,它需要更新棋盘,所以它需要棋盘,它需要知道活跃玩家,所以它也需要它。所以参数是棋盘和玩家。
    • 要检查移动的有效性,您需要另一个函数。该函数应检查x, y 位置是否有board 中的空格。所以你需要boardxy。除了 playerMove 之外,它还需要返回一些东西,例如如果你可以去那里,则返回 True,如果你不能去那里,则返回 false(已获取位置,或在棋盘外)。
    • 好的,我已经设置好了,但是我无法让板子打印屏幕上的“X”.. 它只是在玩家 1 和玩家 2 之间不断切换,但屏幕上什么也没有打印
    • 打印板应该由您的printboard 例程完成。你是在播放循环中调用那个吗?
    猜你喜欢
    • 2014-04-04
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2013-12-21
    相关资源
    最近更新 更多