井字游戏检查胜利功能不起作用

时间:2020-08-17 02:53:38

标签: python python-3.x

所以我正在制作一个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

这两种方法看起来都应该起作用,但不起作用

这是整个代码https://pastebin.com/G7Stkk79

1 个答案:

答案 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))

使用这些选项,您可能可以减少代码来确定玩家是否获胜。

如果您想了解完整的实现,请告诉我。这可以帮助您查看实施解决方案的选项。