python - 我做了一个井字游戏,但当有人获胜时显示错误的玩家
问题描述
我在 python 中做了一个井字游戏,当 X 获胜时,它表明 O 已经获胜,当 O 获胜时,它表明 X 已经获胜。我很确定问题在于它改变了玩家,然后检查是否有人赢了,我试着让它在玩家切换之前切换,但它仍然不起作用。我还尝试在 is_win 函数中更改播放器,但这也没有解决它。有人可以看看这个并帮我解决这个问题。
initial_board = [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
board = initial_board
def empty_board(): #use board = empty_board() everytime you want to empty the board
board = [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
return(board)
def switch_turn(player): #use player = switch_turn(player) everytime you want to switch players
if player == 'X':
return 'O'
return 'X'
def print_board(board):
print(*board, sep = "\n")
def is_full(board):
return all('_' not in box for box in board)
def is_valid(board, row, col):
x = board[row]
if x[col] == '_':
return True
return False
def set_cell(board, row, col, player):
x = board[row]
if is_valid(board,row,col) is True:
x[col] = player
print_board(board)
else:
print("already taken")
def get_user_input():
while True:
while True:
row = int(input("Enter the row you want (0-2): "))
if row > 2 or row < 0:
print("The number you entered is not valid")
continue
break
while True:
col = int(input("Enter the column you want (0-2): "))
if col > 2 or col < 0:
print("The number you entered is not valid")
continue
break
if is_valid(board,row,col) is True:
return row,col
else:
print("This place is taken")
continue
def is_win(board,player):
row1 = board[0]
row2 = board[1]
row3 = board[2]
if row1[0] == row1[1] == row1[2] != '_':
print(player + " Has won!")
return True
elif row2[0] == row2[1] == row2[2] != '_':
print(player + " Has won!")
return True
elif row3[0] == row3[1] == row3[2] != '_':
print(player + " Has won!")
return True
elif row1[0] == row2[0] == row3[0] != '_':
print(player + " Has won!")
return True
elif row1[1] == row2[1] == row3[1] != '_':
print(player + " Has won!")
return True
elif row1[2] == row2[2] == row3[2] != '_':
print(player + " Has won!")
return True
elif row1[0] == row2[1] == row3[2] != '_':
print(player + " Has won!")
return True
elif row1[2] == row2[1] == row3[0] != '_':
print(player + " Has won!")
return True
else:
return False
def game():
player = 'X'
print_board(board)
while is_win(board, player) is False:
if is_full(board) is True and is_win(board, player) is False:
print("draw")
break
elif is_full(board) is True and is_win(board, player) is True:
print(is_win(board, player))
break
row, col = get_user_input()
set_cell(board, row, col, player)
player = switch_turn(player)
game()
解决方案
我认为这是因为,在你的游戏结束之前,玩家会在 game() 函数中切换。
player = switch_turn(player)
当 X 取得胜利时,玩家切换并且当前玩家现在是玩家“O”。一个想法可能是在切换之前检查 is_win 。
推荐阅读
- python - 将视口更改为全分辨率
- mongodb - 如何找到带有一些没有重复值的键的文档?
- c# - 在 UnityNetwork 中同步随机数
- c# - 排除异常:System.DllNotFoundException
- c# - WPF MenuItem 多添加。
- scala - 如何在Scala中找到函数的根源?
- c# - 解析 googlemap 链接时出现 Razor.Parse 错误
- tensorflow - 将 tfe.EagerVariableStore 与 tfe.Checkpoint 集成?
- javascript - agm 方向构建类型 r 错误
- ios - UIViewController 之外的当前位置