1.项目分析
2.项目目标
AI的基础应用算法的设计和实现C语言的图形界面程序开发3.项目准备
VS/VC++(任意版本)easyx图形库(直接双击即可安装)领取素材(图片、音效)传送门4.创建项目
创建空项目。把素材拷贝到项目目录下5.画棋盘
画棋盘,播放开局提示、播放背景音乐
6.画棋子
鼠标点击后,在点击位置画棋子
效果:
黑色区域,透明背景的PNG图片显示不了。
解决方案:
导入工具库tools.h, tools.cpp修改代码
效果:
修改
看上去,很完美,但是有一个严重的BUG
当不在交叉点准确点击时,就会出现以上情况。
解决方案:
需要判断这个点击是否是合法未知的点击,并允许一定的偏差
7.判断有效的点击
定义数据模型
因为点击时,要判断是否在已经有棋子的位置上点击(不能在已经落子的位置点击)
所以需要定义一个数据模型,来表示当前的所有棋子数据。
【模块化开发思想】
创建ChessData.h, 并把main.cpp中的与围棋相关的全局数据,剪贴到ChessData.h中
ChessData.h
在main.cpp中添加围棋数据变量game
初始化数据模型
ChessData.h
ChessData.cpp
main.cpp
判断有效点击
判断原理
先计算出绿点,然后分别计算出3个黑点位置,计算当前位置离4个点的位置。
如果小于阈值(POS_OFFSET),就认为选择了哪个点。
在main.cpp中添加变量,存储有效点击的位置
判断是否是有效点击,如果是有效点击,返回true并把结果保存到全局变量clickPosRow、clickPosCol;
ChessData.h
实现有效点击
测试效果:
8.优化项目架构
封装画棋子的代码在ChessData.h中添加棋子类型在main.cpp封装“落子”代码落子2.优化项目架构
9.更新游戏数据
人(黑方)落子后,还没有修改底层的游戏数据。
在ChessDatat.h添加接口:
在ChessData.cpp中添加实现。
应用更新:
10.实现AI走棋
五子棋入门
连2
活3
死3
活4
死4
连5(赢)
AI走棋原理
计算每个合法的落子点的“权值”,然后再权值最大的点落子
以后,可以在这个基础之上,实现多个层次的计算.
对于每个空白点,分别计算周围的八个方向
因为在计算某个方向时,正向和反向需同时考虑,所以实际上只需计算4个方向即可:
如果黑棋走这个点
如果白棋AI走这个点
计算各点的“权值”
权值的计算,放在ChessData模块中。
ChessData.h
ChessData.cpp
AI思考落子点
在各落子点,找到分值最大的点。如果有多个分值相同的点,直接在其中取一个随机点。
在ChesssData模块实现。
ChessData.h
ChessData.cpp
实现AI落子
11判断棋局是否结束
在ChessData模块定义判断输赢的接口
原理分析:
在4个方向上搜索。
以右下方向为例:(黑色棋子表示刚下的棋子)
从当前棋子开始,向右下方数5个
从当前棋子的左上角开始,向右下方数5个
从当前棋子的左上第2个开始,向右下方数5个
从当前棋子的左上第3个开始,向右下方数5个
从当前棋子的左上第4个开始,向右下方数5个
ChessData.h
ChessData.cpp
调用AI接口
main.cpp
显示分数
在胜利窗口,或者失败窗口中,显示分数。
main.cpp
更新分数
ChessData.cpp
12.项目迭代
服务器端业务开发。
3.AI迭代
使用搜索树,提高算度。
C语言C++编程学习交流圈子,QQ群:1021486511【】
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
编程学习资料分享: