程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。
1.1.1 课题的重点难点
(1) 课题的重点
作为一个完整的程序,必须考虑人机交流与用户体验。游戏的界面不能太丑更不能过于复杂。游戏应该有个比较漂亮的界面,在必要硬件支持和软件支持下,游戏开发者必须最大限度的使游戏更加美观。游戏的美观是一方面,游戏的内在素质是另一方面。一个游戏的优劣,最终由玩家决定。在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。
重点是分析贪吃蛇游戏的各个功能模块,并运用C++的知识实现。游戏设计包含多个基本函数,如构造、析构、绘图和接受键盘输入等。分析实现完成这些函数的显示。游戏包含多个功能模块比如游戏等级的设置、贪吃蛇移动功能、游戏分数统计功能、果实随机出现功能等等。将不同的模块结合加以实现。
玩家在体验这款游戏时最主要是在控制贪吃蛇的移动,蛇身操作模块算法的重点主要有从玩家方向的操作中得到当前按下的移动方向,如果遇到果实,向量则增加一个元素,如果没有则不更新元素。游戏中的果实则是需要由随机函数在游戏地图内随机生成。
每款游戏都有自己的游戏规则,游戏规则的设定也是重点之一,游戏规则模块算法主要分为以下几步:当蛇身每移动一步时,就对贪吃蛇的头部坐标进行判断。如果已经与界面边界坐标或是贪吃蛇身体向量坐标重合,说明贪吃蛇已经碰到了墙壁或是身体,游戏结束。
(2) 课题的难点
贪吃蛇游戏融入了C++设计编程的许多知识,包括多个函数的运用比如初始化果实函数、初始化游戏、设置游戏等级及定时器处理,通过调用这些功能函数来实现游戏的全部功能。这个贪吃蛇游戏最核心的算法是贪吃蛇的行走路径算法,其包括了数组应用、图像显示、分数计算等内容。
贪吃蛇身体的绘制,是程序中的核心算法。包括蛇身的移动、吃食物后增长、颜色等。需要创建蛇的类,蛇的位置由坐标确定,当蛇头与果实坐标重合时,则说明贪吃蛇吃到了食物。
果实采用随机数生成出现坐标并判断当前生成的果实坐标是否在贪吃蛇身体范围内。如果在需重新生成直到不在为止。如果不再,则把坐标位置返回给调用对象。
贪吃蛇的移动也是此游戏的一个难点。开始游戏后的重点是如何用键盘来控制蛇的移动并传递到时间控制器中判断蛇是否死亡。首先需要键盘与蛇的响应,设置一个方向控制变量。当蛇在转向时,不可能转到前进方向的反方向,比如当向右运动时,蛇不可能转到屏幕的左边前进,需要用if语句筛选判断。贪吃蛇的更新设计是当接收玩家按下的方向键保存到方向变量中,定义一个时间定时器,时间间隔由游戏等级决定,等级越高时间越短,当每次时间间隔到达时,则根据方向变量来更新贪吃蛇向量,下一步判断向量第一个元素中的坐标数据是否碰到边界或蛇身,如果有,游戏结束并计算游戏得分。如果没有,则判断坐标数据是否与当前果实坐标重合,如果有,表示贪吃蛇已经吃到果实,这时就向贪吃蛇向量添加一个元素并重新生成一个果实。 VC++贪吃蛇游戏开发+文献综述(4):http://www.youerw.com/jisuanji/lunwen_13905.html