Skip to content

Java实现的五子棋,人机对战中包含Alpha-Beta剪枝极大极小博弈算法

Notifications You must be signed in to change notification settings

Jacka03/Java-Gobang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 

Repository files navigation

Java-Gobang

Java实现的五子棋游戏基本功能,人机对战中包含Alpha-Beta剪枝极大极小博弈算法

程序设计分析

在开始编写程序之前,我们应该先要对五子棋游戏要做的事进行剖析,明确设计任务,功能要求等等。通过程序要实现的功能,设定具体的每个模块所完成的每一个功能,然后连接每一个模块来实现所需要的功能设计。

画棋盘

绘制左侧的棋盘:绘制棋盘线、绘制天元和星、绘制预选框、绘制左侧数字和底下字母、绘制棋子、给棋子添加序号。 绘制右侧的功能区:添加显示棋子估值信息区域、模式:人人对战、人机对战、智能:估值函数、估值函数+搜索树、搜索树:搜索深度、每层节点、其他:显示落子顺序、悔棋、新游戏、人类先手、机器先手

添加事件

在下棋区域鼠标移动,预选框跟随鼠标移动、在交叉点点击落子、悔棋、新游戏、显示落子顺序、人类先手、机器先手、在棋子上点击鼠标右键显示估值

人人下棋

在交叉点落子的时候,判断输赢

人机下棋

估值函数、极大极小值搜索、Α-β剪枝优化。 估值函数:计算某个点的多价值有高。 首先设计好可能出现的棋型,并且根据会赢的概率给出相应的分值。 攻:对我自己有利的棋型的价值 守:对对方有利的棋型的价值 某个点的价值 = 攻价值+守价值 估值函数有个弊端,只考虑眼前的事

极大极小值搜索:

思想:轮到自己下棋的时候,找最大值。轮到对方下的时候,寻找最小值。但是这样计算量是比较大的。开始游戏有,棋盘上是有一个黑子。人工下一个白子。搜索5层。第一个层可选择位置:223。第二层:223x222。第三层 223 x 222 x 221 …… Α-β剪枝优化:Α-β是两个值,Α自己,β对手。初始值Α是无穷小的数。β是无穷大的数。A<β这个场景才会合法。否则这枝(树枝)将被剪掉(不进行遍历) 如果是自己的棋,得到得分以后,和Α进行比较,如果得分大于Α。Α=score 如果是对手的棋,得到得分以后,和β进行比较,如果得分小于β。Β=score

result image

About

Java实现的五子棋,人机对战中包含Alpha-Beta剪枝极大极小博弈算法

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages