所以我正在制作一个tic tac toe程序,而check win功能不起作用,似乎它跳过了即使它是真的
这是我写的一种新方法,它不起作用
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:
if row_1 or row_2 or row_3 == char:
status = True
check = True
elif row_1 or row_2 or row_3 == ai_char:
status2 = True
check = False
这是我无法使用的老方法
if board[0] == board[3] == board[6] == char:
status = True
check = True
if board[1] == board[4] == board[7] == char:
status = True
check = True
if board[2] == board[5] == board[8] == char:
status = True
check = True
if board[0] == board[3] == board[6] == ai_char:
status2 = True
check = False
if board[1] == board[4] == board[7] == ai_char:
status2 = True
check = False
if board[2] == board[5] == board[8] == ai_char:
status2 = True
check = False
这两种方法看起来都应该起作用,但不起作用
答案 0 :(得分:2)
为什么不使用它作为选项来简化它。
row1 = all(board[i] != '-' for i in [0,3,6])
您也可以尝试使用
row1 = all(board[i] != '-' for i in range(0,7,3))
上面的代码将按以下方式工作:
if board[0] != '-' and board[3] != '-' and board[6] != '-':
row1 = True
else:
row1 = False
在这种情况下,如果board[0]
,board[3]
,board[6]
中的任何值等于'-'
,则将导致其他False
True
。
在您的代码中,您正在检查整行。从0到8进行操作要容易得多,其中row1 =(0,1,2),row2 =(3,4,5)和row3 =(6,7,8)
如果要检查每行中的值是否不是'-',则此代码将起作用:
row_1_dash = all(board[i] != '-' for i in range(0,3))
row_2_dash = all(board[i] != '-' for i in range(3,6))
row_3_dash = all(board[i] != '-' for i in range(6,9))
如果要检查一行中的每个值是否相同,则可以进行以下检查:
row_1_same = all(board[i] == board[i+1] for i in range(0,2))
row_2_same = all(board[i] == board[i+1] for i in range(3,5))
row_3_same = all(board[i] == board[i+1] for i in range(6,8))
您还可以使用以下方法检查值是否相同且不等于“-”:
row_1_win = all(board[i] == board[i+1] and board[i] != '-' for i in range(0,2))
row_2_win = all(board[i] == board[i+1] and board[i] != '-' for i in range(3,5))
row_3_win = all(board[i] == board[i+1] and board[i] != '-' for i in range(6,8))
使用这些选项,您可能可以减少代码来确定玩家是否获胜。
如果您想了解完整的实现,请告诉我。这可以帮助您查看实施解决方案的选项。