python - 优化井字棋检查

标签 python optimization tic-tac-toe

对于我的一个项目,我必须做一个井字游戏求解器,我想请求一些帮助来优化一些代码。

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

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

我需要帮助:我主要重复相同的代码,但每种情况都有不同的 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"

正如你所看到的,它们几乎是一样的,但是由于我需要现场检查信件,所以我不知道如何优化它。

最佳答案

您可以保存每行/列/对角线的索引列表。例如,第一行应该是 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]

另一种优化方法是使用 board,如下所示:

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

现在要计算 rowcounter 或任何计数器,只需对这些单元格求和并将它们与 +size 进行比较(x 获胜),或者-size(o 获胜)。

关于python - 优化井字棋检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30156337/

相关文章:

java - Baum-Welch 实现示例

MySQL优化: LEFT JOIN

javascript - CSS 和 Javascript 优化(速度问题)

Javascript Tic-tac-toe,如何在模块之间通信 'move'

python - 如何在python中执行两条语句之间插入1秒的时间间隔

python - 在python和mysql中插入特定日期范围内的csv数据

python - 在 Pandas 的两列中按名称拆分和附加

java - 如何通过多种方法优化重复零件

c - 用 C 语言编写井字游戏并指定规范

java - java 中的 Tic Tac Toe 重置按钮