Qt制作贪吃蛇游戏
贪吃蛇想必大家都玩过~童年回忆~
那么我们如何制作一款属于自己的贪吃蛇小游戏呢?
今天给大家带来的是Qt制作贪吃蛇游戏(附源码)
变量和函数的声明,方便后续代码的理解
核心分析
该游戏的核心就是重写paintEvent()函数对主窗口不断的重绘,构建出动态的效果(食物不断随机生成,蛇的不断移动等等)
贪吃蛇游戏两个重要组成当然就是蛇和食物,我来分开分析
①食物生成
可以把每个食物理解为一个坐标,我们只要有一个坐标,就可以用QPainter画出我们想要的食物,为了方便管理这些食物,使用一个容器存储食物的坐标,并使用定时器不间断的生成随机坐标(当然随机坐标要限制范围,即要在窗口内,否则生成的坐标就没有意义了,反而还会增加计算量,导致程序效率下降),这里为了程序持久良好的运行,我限制了能够生成的食物的最大数量,否则如果一个玩家吃的不够快,食物蹭蹭蹭无限制的递增,程序效率会下降
②蛇的移动
如果说一个食物是一个坐标的话,那么一条蛇就是一串连续的坐标,每个坐标都映射一个实体,一长串的看起来就像一条蛇一样了,同样蛇的坐标也是用容器存储起来方便维护,然后我们该如何控制蛇的移动呢?想想在电脑上玩贪吃蛇,是不是↑↓↔控制的,这里也一样,既然要按键,自然要用到Qt的键盘事件,重写keyPressEvent()函数,根据用户的按键来判断蛇该如何移动,然后像前面说的一样,蛇是一串连续的坐标,想让其看起来是整体移动的,想象一下,一个数组中有10个元素,1~10,现在我让你把这10个元素都后移一位,再后移一位,相较于开始,从结果来看,这10个元素是不是就移动2个位置,我们上帝视角看是不是就好像这10个元素“动起来了”,蛇的移动就是这个原理,就是蛇的坐标不断发生改变,然后QPainter不断重绘,给我们看起来就是蛇动起来了,那么蛇的坐标该怎么变呢?可以理解为当蛇向上移动时,蛇的x坐标不变,y坐标不断减小,向左移动时,x坐标不断减小,y坐标不变,右和下方向同理,这样只要定义一个方向的标志,来确定此时蛇的运动方向,不断改变蛇的坐标,用户的按键不断更新方向的标志,从而改变蛇的运动方向,QPainter不间断的重绘,就达到了按键控制蛇的移动
③碰撞检测
这个主要是判断蛇是否吃到食物,是否撞到自己的身体,是否撞到墙的检测,毕竟这标志着蛇的变大边长,游戏是否结束等,原理也很简单,不断的对食物容器的坐标和蛇头的坐标进行循环检测,坐标一致时,代表蛇头吃到食物了,蛇的身体加一,并在食物容器中删除对应的食物,撞墙和撞自己也是一样的原理
这三点就是贪吃蛇游戏最核心的三点了,其余的蛇头蛇身配色,地图选择,蛇吃的越多会越来越大什么的功能,可以在文章最后的项目源码里查看,也可以评论或者私信我~
项目展示
游戏主界面
菜单栏:
可以自定义蛇头,蛇身,食物的颜色以及切换地图(均可实时切换)
游戏开始,方向键盘控制蛇身移动
可以实时切换蛇头,蛇身,食物颜色以及地图
并且随着吃的食物越来越多,蛇的体型也会越来越大
蛇撞墙或者吃到自己的身体,蛇就会死亡,游戏结束
项目源码:
喜欢的话就点个收藏关注我吧~
有什么意见建议也可以评论喔~







浙公网安备 33010602011771号