player
这里通过遍历
board,统计 X 与 O 的数量来确定当前的回合的 player 是谁copilot 在审查我的代码的时候给出了比较巧妙的统计方法,我其实对 python 的一些类的方法不是很熟悉,因此自己写的会比较笨
actions
这里依旧是遍历,然后把空的位置作为
action 给添加按照要求,这里的
actions 应该是 set 类型result
这里是通过当前的
board 和 action,来返回 action 后的结果按照文档的要求,需要对异常情况进行处理,但我一开始忽视了
同时,这里需要用到深度拷贝,防止更改原本的
board(需要导入 copy)winner
这里需要检查是否获胜,也就是某个方向能三个连起来
在检查的时候需要注意,在赋值给
symbol ,比较之前,需要查看是否为 empty,不然的话三个 empty 连着也会 returnterminal
这里是检查是否结束
有赢家的话,就结束
没赢家,且没空位,结束
没有加,有空位,没结束
utility
给分环节
minimax
这里是最重要的部分,也是最难的部分,需要实现
minimax这里我根据课上给的伪代码,实现了
min value 和 max value 的函数,用于作为辅助函数帮着递归接下来的情况对于
minimax 函数,需要根据 player 来分情况讨论X 是追求 max,O 最求 min
这里由于要求是返回
action,而不是 value,因此我们在 minimax 中不能直接套用 min/max value而是需要遍历
actions,在 value 改变时,同时改变 action 的值,实现记录,以便最终返回
