player

这里通过遍历 board,统计 X 与 O 的数量来确定当前的回合的 player 是谁
copilot 在审查我的代码的时候给出了比较巧妙的统计方法,我其实对 python 的一些类的方法不是很熟悉,因此自己写的会比较笨

actions

这里依旧是遍历,然后把空的位置作为 action 给添加
按照要求,这里的 actions 应该是 set 类型

result

这里是通过当前的 boardaction,来返回 action 后的结果
按照文档的要求,需要对异常情况进行处理,但我一开始忽视了
同时,这里需要用到深度拷贝,防止更改原本的 board(需要导入 copy

winner

这里需要检查是否获胜,也就是某个方向能三个连起来
在检查的时候需要注意,在赋值给 symbol ,比较之前,需要查看是否为 empty,不然的话三个 empty 连着也会 return

terminal

这里是检查是否结束
有赢家的话,就结束
没赢家,且没空位,结束
没有加,有空位,没结束

utility

给分环节

minimax

这里是最重要的部分,也是最难的部分,需要实现 minimax
这里我根据课上给的伪代码,实现了min value max value 的函数,用于作为辅助函数帮着递归接下来的情况
对于 minimax 函数,需要根据 player 来分情况讨论
X 是追求 max,O 最求 min
这里由于要求是返回 action,而不是 value,因此我们在 minimax 中不能直接套用 min/max value
而是需要遍历 actions,在 value 改变时,同时改变 action 的值,实现记录,以便最终返回
Loading...