2024-2025秋季学期中国科学院大学-C语言程序设计(齐洪钢班)-期末大作业-五子棋AI的C/C++实现
- 需实现两种对战模式:
- 人人对战
- 人机对战
- 应用的AI算法:
- Minimax(极大极小值搜索)算法
- Alpha-Beta剪枝优化
- 禁手信息:
- 只考虑双活三禁手
- 不考虑双活四禁手和长连禁手
这里的禁手信息仅参考2024-2025秋季学期齐洪钢老师班上的要求,其他老师班的要求有所不同。
因为代码中注释比较详细,笔者在这里不过多展示具体函数名,只是分模块简要介绍函数功能,便于读者理解学习。函数主要分为四部分:
-
基础设置函数:关于棋盘、落子、合法性判断、输赢判断等基础函数
-
AI算法实现函数:
- 统计和估价函数
- Minimax+α-β剪枝算法实现(AI核心函数)
-
下棋功能实现函数:包括人人对战、人机对战、悔棋、复盘等函数
-
图形化实现函数:包括绘制棋盘、绘制棋子、绘制按钮、显示文字及实时更新得分等函数
-
大二上期末月的众多DDL怪兽之中,五子棋可以说是最令人头疼的一只了。
-
齐老师的实验课上,人人对战的实现很快可以完成,然而更为困难的AI设计和实现却令人毫无头绪。
-
起初的半个多月中,我将所有时间花费于在各平台上(CSDN,B站,github等)查找资料,在了解各种算法逻辑之后选择了较易理解的Minimax算法以及Alpha-Beta剪枝优化;又经过半个多月的代码编辑后,我终于得到了第一版用于期末五子棋竞赛的代码,这期间,github各路大神的思路和代码给予了我莫大的帮助!
-
关于版本迭代:
version1.0:完成于2024.12.27(代码提交ddl前一天),该版本在次日齐洪钢班的五子棋竞赛中获得冠军。
version1.08:完成于2025.1.08(C语言期末笔试后),尝试在放宽步时限制的前提下将搜索深度提高到10层,同时优化赋分逻辑;增加AI评分显示功能。
version1.28:完成于2025.1.28(除夕日上午),增加了基于Easyx库的图形化界面,增加鼠标操作、鼠标落子等功能。
待更新版本:easyx版的悔棋和复盘功能还未开放。
-
五子棋是我完成的第一个项目,也是我和github相识的开始,笔者甚至为了写这篇readme.md专门去学了一下markdown笔记的语法,算是一个不错的开端吧,希望以后能在自己所热爱的道路上越走越远~
- 本项目凝聚了部分前人智慧和作者近两个月的心血,但未经过大量运行结果检验,故可能存在潜在的bug,欢迎随时Pull requests。
- 仅供参考学习使用,可以随意fork或download,代码里注释也写的很详细,尽量避免直接copy/paste。
- 如果本内容对你有帮助,可以为主播点个star~
- 一位github大佬的五子棋AI教程
- 20级武成岗班第一名
- 22级杨力祥班第一名
- 感谢GitHub Copilot与ChatGPT于整个过程中在思路提供、代码修改和答疑解惑等多方面给予我的支持与帮助!
- 再次表达衷心感谢!