问题描述
我们的五子棋博弈实现的是双人的、完备信息的五子棋问题,即游戏规则为双方严格的轮流走步,且任何一方能完全知道对方已走过的步和以后可以走的所有步,当某方有在一条直线上连续的五子时,游戏结束。游戏模式可以分为人机对弈和双人对弈两种模式。双人对弈模式比较容易实现,程序只需要判断是否产生胜利者即可。人机对弈模式则需要我们的程序代码实现机器落子的位置的选择确定,本程序采用基于启发式 MAX/MIN 算法的 alpha-beta 剪枝技术来选择出最佳的机器落子位置。除此之外,我们还设置了残局闯关模式,在增加了游戏趣味性的同时给用户们带来了更好的游戏体验。
算法概述
我们的系统分为人机对弈与人人对弈。黑子白子双方轮流落子,当某一方完成落子后调用判断胜负的函数盘算是否结束游戏。若游戏结束,跳出某方胜利的弹窗,点击确定清空棋盘。
对于人机对弈我们设计了 AI 算法—基于 MAXMIN 的 α-β 剪枝算法,它对 AI 的走步给出最好的决策。算法思想是:首先,判断当前的深度是否是为 0,如果为 0 则结束回溯到上一层;若不为 0,则利用估值函数计算当前棋盘的得分,若当前棋盘的得分大于等于 9999 且递归深度小于最大深度 maxdepth(设定的值为 3)时,表示该走步最佳,AI 可胜利并返回这个最佳分数;若不满足则产生新的走法,将所有所有的没有棋子的位置都初步列为 AI 可落子的位置,枚举所有的走法:假设 AI 落子在该位置时,进入 MIN 层,分析人类会走的步,深度减一,递归调用分析得出人类最不利于 AI 的走步时以及棋盘的得分,若当前的得分大于 alpha,