优化井字游戏检查

Optimize tic tac toe checks

我的一个项目,我要做一个井字游戏求解器,我想寻求一些帮助优化一些代码。

任务:根据获胜者(x 或 o),return 适当的结果

我是怎么做到的:我检查了结果的水平、垂直和对角线策略

我需要什么帮助:我大部分时间都在重复相同的代码,但每种情况的 if 语句都不同,我只是想知道是否有更通用的方法来执行此操作。

当前代码: (对角线获胜)

 if diagcounter==size and (board[0][0]=="x") :
        print("Win Diagonally")
        return "X has won"
    elif diagcounter==size and (board[0][0]=="o"):
        print("Win Diagonally")

横向获胜:

 if vertcounter==size and board[0][x]=="x":
            print("Win vertically")
            return "X has won"
        elif vertcounter==size and board[0][x]=="o":
            print("Win vertically")
            return "O has won"

大家可以看到,差不多,但是因为要现场查信,不知道怎么优化

您可以为每个 row/column/diagonal 保存一个 索引 的列表。例如,第一行应该是 sequence_indices = [(0, 0), (0, 1), (0, 2)]。主对角线应该是 sequence_indices = [(0, 0), (1, 1), (2, 2)].

现在,每当您在代码中编写 vertcounterdiagcounter 时,都使用函数 counter(sequence_indices),而不是 board[0][x]board[0][0],使用

first_i, first_j = sequence_indices[0]
board[first_i][first_j]

另一种优化方法是像这样使用板:

如果单元格包含 x,则该单元格中的 board 应包含数字 1。如果单元格包含 o,则该单元格中的 board 应包含数字 -1,如果单元格为空,则应为 0.

现在要计算 rowcounter 或任何计数器,只需对这些单元格求和并将它们与 +sizex 获胜)或 -sizeo 胜)。

您可以创建一个函数来处理 "winning" 并让您的 if 语句调用它。

def win(method, team):
    print("Win "+method)
    return team+" has won"

if diagcounter==size and (board[0][0]=="x") :
    return(win("diagonally", "x"))
elif diagcounter==size and (board[0][0]=="o"):
    return(win("diagonally", "o"))
if vertcounter==size and board[0][x]=="x":
    return(win("vertically", "x"))
elif vertcounter==size and board[0][x]=="o":
    return(win("vertically", "o"))