当前位置:网站首页>五子棋人机对战实现
五子棋人机对战实现
2022-07-27 21:02:00 【biyezuopin】
五子棋人机对战实现
项目构思:
- 我们将五子棋游戏的实现分为两部分实现
- 可视化界面(GUI)
- 人机对战算法实现
- 可视化界面我们选择了 Java.swing 包内的 API 和 Graphics 类里的绘图工具进行开发
- 人机对战的算法实现我们参考了 Fucking Algorithm 算法库,主要采取局部暴力搜索算法。
环境部署
- 编译语言:Java
- 编译器:Eclipse
项目实现:
可视化界面
① 用 JFrame 和 JPeal 设置整个下棋界面和右侧控制界面。

② 用 JButton 添加开始新游戏,认输,悔棋的功能,并将按 钮添加到右侧控制界面上去。

③ 增加一个选择棋盘样式的 JComboBox 选项按钮,并在选择框前面用 JLabel 加上功能只是功能指示文字。

④ 将所有的按键都添加到 ButtonListener 里边来控制完成相关操作。

⑤ 将上述按键在 ButtonListener 中通过重写 actionPerformed 函数赋予其相应功能用 if else、e.getActionCommand().equals()和 getSelectedItem().equals 来判断所操作的按键是进行的那个功能。其中在“开始新游戏”这个选项功能里边还用 JOptionPane.showInputDialog()和 JOptionPane.showMessageDiaog()来可视化了模式输入选择框来选择要进行“人人对战”还是“人机对战”并且有防止错误输入的循环输入输入模式。
⑥ 通过 frameListener 类来构建一个游戏并通过 paint 函数来将右边的画面呈现。其中在 paint 类中会根据相关变量来选择所要呈现的棋盘类型,最终将所选棋盘呈现。
人机对战算法实现
algorithmA 的参数为棋子颜色(1 为黑子,2 为白子),用于实现需求:能够随机指定黑方和白方。

先计算不同落子位置权值(基于 map 权值表以及 unoinWeight 赋权计算)赋值方案(基于棋谱),此处主要以先手开局棋谱为例

代码实现赋值(基于 map 权值表以及 unoinWeight 赋权计算)


搜索方法:局部暴力搜索法,基于此棋子位置,分别向上、下、左、右、左上、右下、右上、左下八向搜索,根据落子此处位置处于不同的活眠状态追加权值,若此处已有棋子(即 gf.isAvail[i][j]==0)则跳过此向搜索。

对存储权值的数组 weightArray 内的元素进行判断

⑥ 落子后要注意重置权值数组 weightArray,每次落子对棋局形式都有不同的影响,故棋盘每处的权值是动态变化的,所以每次落子后都要重新搜索计算 新一轮的权值。


边栏推荐
- JUC工具包学习
- Common Taylor expansion
- 低代码开发前景如何,大家都真的看好低代码开发吗?
- [elm classification] classification of UCI data sets based on nuclear limit learning machine and limit learning machine, with matlab code
- Join hands with Changjiang storage, jiangbolong launches the world's smallest expansion card
- 软件测试功能测试全套常见面试题【功能测试】面试总结4-2
- 【C语言】通讯录(动态版本)
- Learn more about xxE injection
- CaEGCN: Cross-Attention Fusion based Enhanced Graph Convolutional Network for Clustering 2021
- ZCMU--1720: 死亡如风,我要装逼
猜你喜欢

小程序容器技术超有料,可以让移动研发效率大幅提升

Spark 离线开发框架设计与实现

Reinforcement learning - pytorch realizes advantage actor critical (A2C)

2022 summer vacation daily question (5)

强化学习——PyTorch 实现 Advantage Actor-Critic (A2C)

Huawei Hongmeng 3 was officially released, and this security feature has solved a major pain point

iMeta | 国际标准刊号ISSN印刷版正式确认,双ISSN申请完成

他山之石 | 蚂蚁超大规模知识图谱构建及应用

怎么使用C# Winform实现复制文件显示进度

【C语言】通讯录(动态版本)
随机推荐
The share price soared 180.46%! Shanghai silicon industry, the leader of domestic large silicon wafers, is listed: the cumulative net profit in recent four years is less than 60million
真的很难理解?RecyclerView 缓存机制到底是几级缓存?
Nature review: preferential effects in the formation of microbial communities
重新定义分析 - EventBridge 实时事件分析平台发布
进制转换方法
Normality of confidence interval
My annual salary is 1million, and I don't have clothes more than 100 yuan all over my body: saving money is the top self-discipline
2019年全球十大半导体厂商:英特尔重回第一,苹果逆势大涨
Your list is too laggy? These four optimizations can make your list silky smooth
Socket interaction process of three handshakes
疫情之下,台积电一季度增长超预期,7nm占比35%!二季度或创新高
钉钉报警工具
携手长江存储,江波龙推出全球最小扩展卡
图基本知识代码
总投资600亿!富士康半导体高端封测项目正式落户青岛
Starfish Os X MetaBell战略合作,元宇宙商业生态更进一步
What are the advantages of Tita's OKR system over other similar products or shared documents?
QT with OpenGL(Shadow Mapping)(平行光篇)
7.6万人停工!东芝宣布关闭日本所有工厂
Nail alarm tool