Java实现的五子棋游戏基本功能,人机对战中包含Alpha-Beta剪枝极大极小博弈算法
在开始编写程序之前,我们应该先要对五子棋游戏要做的事进行剖析,明确设计任务,功能要求等等。通过程序要实现的功能,设定具体的每个模块所完成的每一个功能,然后连接每一个模块来实现所需要的功能设计。
绘制左侧的棋盘:绘制棋盘线、绘制天元和星、绘制预选框、绘制左侧数字和底下字母、绘制棋子、给棋子添加序号。 绘制右侧的功能区:添加显示棋子估值信息区域、模式:人人对战、人机对战、智能:估值函数、估值函数+搜索树、搜索树:搜索深度、每层节点、其他:显示落子顺序、悔棋、新游戏、人类先手、机器先手
在下棋区域鼠标移动,预选框跟随鼠标移动、在交叉点点击落子、悔棋、新游戏、显示落子顺序、人类先手、机器先手、在棋子上点击鼠标右键显示估值
在交叉点落子的时候,判断输赢
估值函数、极大极小值搜索、Α-β剪枝优化。 估值函数:计算某个点的多价值有高。 首先设计好可能出现的棋型,并且根据会赢的概率给出相应的分值。 攻:对我自己有利的棋型的价值 守:对对方有利的棋型的价值 某个点的价值 = 攻价值+守价值 估值函数有个弊端,只考虑眼前的事
思想:轮到自己下棋的时候,找最大值。轮到对方下的时候,寻找最小值。但是这样计算量是比较大的。开始游戏有,棋盘上是有一个黑子。人工下一个白子。搜索5层。第一个层可选择位置:223。第二层:223x222。第三层 223 x 222 x 221 …… Α-β剪枝优化:Α-β是两个值,Α自己,β对手。初始值Α是无穷小的数。β是无穷大的数。A<β这个场景才会合法。否则这枝(树枝)将被剪掉(不进行遍历) 如果是自己的棋,得到得分以后,和Α进行比较,如果得分大于Α。Α=score 如果是对手的棋,得到得分以后,和β进行比较,如果得分小于β。Β=score