我编写了一个与AI对战的井字游戏(我目前正在改进AI):
Matrix = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]Matrix_2 = [[" ", " ", " "], [" ", " ", " "], [" ", " ", " "]]def turnX(): Player1_row = int(raw_input("P1 What row do you want?")) Player1_row = Player1_row - 1 Player1_column = int(raw_input("P1 What column do you want?")) Player1_column = Player1_column - 1 if Player1_row > Matrix: turnX() if Player1_column > Matrix: turnX() if (1 == Matrix[Player1_column][Player1_row] or 500 == Matrix[Player1_column][Player1_row]): print "This is an invaild move!" turnX() else: Matrix[Player1_column][Player1_row] = 1 Matrix_2[Player1_column][Player1_row] = "X"def turnY(): global Player1_row Player2_row = int(random.randint(1, boardX)) Player2_row = Player2_row - 1 Player2_column = int(random.randint(Player1_row, boardY)) Player2_column = Player2_column - 1 if (1 == Matrix[Player2_column][Player2_row] or 500 == Matrix[Player2_column][Player2_row]): turnY() else: print "AI Turn:" Matrix[Player2_column][Player2_row] = 500 Matrix_2[Player2_column][Player2_row] = "O"
但我遇到了这个错误:
NameError: global name 'Player1_row' is not defined`.
我正在尝试让AI阻止玩家的最后一步棋。
回答:
Player1_row 不是全局变量,而是一个局部变量,仅在 turn_X 函数中有效。
要解决这个问题,可以尝试在 turn_X 函数中将 Player1_row 设置为全局变量。