C++实现贪吃蛇游戏,非常适合C++初学者入门的项目!
这是一款容易上手的游戏,我相信大家都不会陌生,至少这款游戏是我曾经的回忆。
直到今天。。。。。
下面是小编整理好的一套C/C++系统性学习的资料,加小编C/C++学习群(825414254)获取C/C++一整套学习教程哦!
image我用C++开发了一个简单的自动寻路贪吃蛇游戏:功能和界面比较的单一
功能:
1.自动寻路:开始游戏后小蛇无需人工操作,小蛇自动寻路,吃掉食物
小蛇起始位置10*10坐标(3节蛇)
食物起始位置由食物算法决定
界面:easyx图形库
1.600*600大小的地图
2.背景: 黑色 正方形
3.蛇: 黄色 正方形
4.食物: 红色 矩形
知识点:
对整个贪吃蛇游戏框架需要有一个基本的概念
(1)环境:
1.win10搭建VS2013。
2.VS2013的基本使用。
(2)软件:
1.C++基本的语法与算法。
2.C++类的创建及简单使用。
3.C++多线程。
4.C++定时器与回调函数的简单使用。
5.C++所需要用到的API的简单使用。
创建一个类,所有的函数实现封装在这个类里面,应用层调用即可。
image线程实现的思路
image多线程:不同的线程负责做不同的事,防止出现单线程系统中的卡死现象,提高实时性。
(线程一)的实现
1.初始化地图。
2.判断游戏是否正常启动(线程开启)。
3.监听键盘是否按下(启动游戏相关操作)。
4.检测蛇是否撞自己或者撞墙(死亡)。
5.绘制小蛇与显示小蛇的移动。
6.判断蛇是否吃到食物。
7.游戏难度系数处理。
image(线程二)的实现
- 判断线程与游戏是否正常启动。
- 判断地图上面是否有食物
- 没有食物(食物被吃掉),则开始计算食物坐标位置,计算坐标时根据游戏难度系数来控制食物的位置,食物不能出现在蛇身上,地图范围以外,等等。
- 计算完坐标后,绘制食物,绘制完成后,再次检测地图上面是否有食物,有就将标志位开启,说明有食物。
(线程三)的实现
1.判断线程与游戏是否正常启动。
2.监听图形界面中的数据,将监听到的数据与正确的数据对比,如果一致说明正常,如果不一致,说明显示的数据有误,开始对显示有误的数据清除并再次显示与再次判断,直到与正确数据一致为止。
image(线程四)的实现
1.判断线程与游戏是否正常启动。
2.输入计数值,1000/ms=1秒。
3.启动定时器,开始监听。
4.运行回调函数,回调函数实现
(数据结构) (秒+1),包含时间算法,逻辑实现。
image回调函数
image(线程五)的实现
程序的核心算法:自动寻路
关于自动寻路算法对于programmer来说,可能并不陌生,同时对于使用过地图软件的人来说,也不陌生,当你从一个位置到另一个位置的时候,就会用到寻路算法,地图里面的路径规划就是寻路,当你使用地图软件开始导航时,软件就会给出相关的路径,让你参考,这些路径就是由寻路算法根据起点数据和终点数据来计算得到的路径数据。
目前我个人了解到的比较常见的寻路算法有深度寻路,广度寻路,A寻路,B寻路等。
我对这些算法进行了一定的了解与学习,这些算法都各有各的优缺点,大致的了解了这些算法的实现原理。于是开始写自己的算法,完成了自动寻路。
(当然肯定还有BUG)
下面来对本次算法的实现原理及过程进行分析分析
image这是一张190*190大小的地图,有三节蛇和一个食物。
- 判断当前蛇头的四个方向是否可以走。
程序实现
image根据上图,我们可以得知,蛇的
上面是墙壁(不能走)---->false
下面是空地(可以走)---->true
左边是蛇身(不能走)---->false
右边是空地(可以走)---->true
根据顺序,下可以走,控制向下,开始计算向下到食物的路径
image可以看到蛇头的y在变化,食物的y是80,蛇头的y现在是20.
蛇头的y<食物的y,方向 向下
image image直到蛇头的y=食物的y时,该判断失效。
根据上图,我们可以得知,蛇的
上面是蛇身(不能走)---->false
下面是空地(可以走)---->true
左边是空地(可以走)---->true
右边是空地(可以走)---->true
有三条路可以走,而当前蛇头的y与食物的y相等,则开始判断x,蛇头x=30,食物的x=80.
蛇头x<食物的x,方向 向右
image