我正在遵循python教程并制作井字游戏,在检查了谁赢了之后,我注意到,每当我检查对角线_1时,winner变量在应为X时都是一个破折号,对于所有在其他情况下,支票仍然有效。
# ---- Global Variables ----
# Game Board
board = ["-", "-", "-",
"-", "-", "-",
"-", "-", "-"]
# If game is still going
game_still_going = True
# Who won or tie
winner = None
# Whose turn is it
current_player = "X"
def display_board():
print(board[0] + " | " + board[1] + " | " + board[2])
print(board[3] + " | " + board[4] + " | " + board[5])
print(board[6] + " | " + board[7] + " | " + board[8])
def play_game():
# Display initial board
display_board()
while game_still_going:
handle_turn(current_player)
check_if_game_over()
flip_player()
# The game has ended
if winner == "X" or winner == "O":
print(winner + " won")
elif winner is None:
print("Tie.")
def handle_turn(player):
position = int(input("Choose a position from 1 to 9: ")) - 1
board[position] = "X"
display_board()
def check_if_game_over():
check_for_winner()
check_if_tie()
def check_for_winner():
# Set up global variable
global winner
row_winner = check_rows()
column_winner = check_columns()
diagonal_winner = check_diagonals()
if row_winner:
winner = row_winner
elif column_winner:
winner = column_winner
elif diagonal_winner:
winner = diagonal_winner
else:
winner = None
return
def check_rows():
global game_still_going
row_1 = board[0] == board[1] == board[2] != "-"
row_2 = board[3] == board[4] == board[5] != "-"
row_3 = board[6] == board[7] == board[8] != "-"
if row_1 or row_2 or row_3:
game_still_going = False
if row_1:
return board[0]
elif row_2:
return board[3]
else:
return board[6]
def check_columns():
global game_still_going
column_1 = board[0] == board[3] == board[6] != "-"
column_2 = board[1] == board[4] == board[7] != "-"
column_3 = board[2] == board[5] == board[8] != "-"
if column_1 or column_2 or column_3:
game_still_going = False
if column_1:
return board[0]
elif column_2:
return board[1]
else:
return board[2]
def check_diagonals():
global game_still_going
diagonal_1 = board[0] == board[4] == board[8] != "-"
diagonal_2 = board[2] == board[4] == board[6] != "-"
if diagonal_1 or diagonal_2:
game_still_going = False
if diagonal_2:
return board[2]
elif diagonal_1:
return board[0]
def check_if_tie():
return
def flip_player():
return
play_game()
这是游戏的所有代码。我一直在试图弄清为什么它无法按预期工作,但我无法弄清楚。
这也是我第一次使用Stack Overflow,如果格式不好,很抱歉,我还在学习。
答案 0 :(得分:0)
在检查行和列时,即使没有赢家,这些函数也会始终返回一个值。如果没有获胜者,他们将一事无成。
这是更新的代码:
def check_rows():
global game_still_going
row_1 = board[0] == board[1] == board[2] != "-"
row_2 = board[3] == board[4] == board[5] != "-"
row_3 = board[6] == board[7] == board[8] != "-"
if row_1 or row_2 or row_3:
game_still_going = False
if row_1:
return board[0]
elif row_2:
return board[3]
elif row_3:
return board[6]
# return nothing
def check_columns():
global game_still_going
column_1 = board[0] == board[3] == board[6] != "-"
column_2 = board[1] == board[4] == board[7] != "-"
column_3 = board[2] == board[5] == board[8] != "-"
if column_1 or column_2 or column_3:
game_still_going = False
if column_1:
return board[0]
elif column_2:
return board[1]
elif column_3:
return board[2]
# return nothing
def check_diagonals():
global game_still_going
diagonal_1 = board[0] == board[4] == board[8] != "-"
diagonal_2 = board[2] == board[4] == board[6] != "-"
if diagonal_1 or diagonal_2:
game_still_going = False
return board[4] # diagonal always crosses center
# return nothing