用mfc设计贪吃蛇游戏的源代码,最好有分析。
1.首先,使用一个结构数组来标记蛇的X位置和Y位置,以及每个节点的方向。用变量确定蛇的长度。
2.当蛇移动而不转弯时,使用计时器自动移动。不管蛇是什么形状,每次都只需要把每一段向后移动(放弃蛇尾,用蛇尾的前一段替换新的蛇尾):如果蛇本身是snake[0]到snake[3],也就是把snake[0]到snake[2]一起移动到snake[1]到snake[3]:把snake[2]的XY坐标赋给snake[3]的XY坐标, 并将snake[1]的XY坐标赋给snake[2]的XY坐标,snake[0]然后判断蛇头的方向,然后将蛇头向这个方向向前移动一格,就是蛇头snake[0]的XY坐标。 蛇除了蛇头以外的每一段的方向都是由函数SetDirection()决定的(显然在这种情况下,蛇头的方向保持不变)。SetDirection()的思路是根据蛇的每一段与前一段的相对位置来确定这一段的方向。(其实这个功能是多余的,真正用的只是蛇头的方向)。
3.蛇转弯时,每段向后移动一次,蛇头的位置沿转弯方向移动,由转弯方向决定。
4.蛇吃食物时,长度增加一,蛇头的位置就变成了食物的位置,方向不变。蛇本身的每个节点的XY位置向后移动。如果蛇本身是snake[0] to snake[3],就是把snake[0]to snake[3]to snake[1]to snake[4]一起移动。
5.对于基于对话框的应用程序,响应键消息应该是PreTranslateMessage,而不是像文档视图模式那样是OnKeyDown。
6.蛇每转一次,只能有一个方向键可以响应,就是要么左右转,要么上下转。黑鱼左转或右转时,只能上下转动;当蛇头的方向是向上或向下时,它只能向左和向右转。
7.食物的位置由rand函数随机生成。
2.添加以下函数和变量
1 void华芳阁(int边昌,int gridShumu);//如果在400*400的正方形里画20*20的正方形,那么bianChang = 400;gridShumu = 20
2 void InitSnackSite();//初始化蛇的位置。
三
4 int snakeLength//指示蛇的长度。
5 int foodX//食物的x位置
6 int foodY//食物的Y位置
7 bool start//标志开始了吗?
8 bool重启;//标记是否重新开始?
九
10结构蛇
11 {
12 int x;
13 int y;
14 char方向;//一个位置的方向是前一个位置相对于这个位置的方向,由SetDirection()决定。
15 }蛇[200];
16
17 void drawed(int x,int y);//指定0*0到20*20的点,画出相应的颜色,下同(红头绿身蓝尾)。
18 void DrawGreen(int x,int y);
19 void DrawBlue(int x,int y);
20 void DrawBlack(int x,int y);//根据SetFoodXY()确定的foodX和foodY绘制食物。
21
22 void draw snakefood();//根据数组snakeSite的标识信息类绘制蛇的形状、位置和颜色。
23 void SetFoodXY();//随机画出食物的XY位置。
24
25 bool左右;//确定能不能上下(蛇本身就是上下的,再按也没用)
26 bool upDown//确定能不能左右行走(蛇本身左右行走,再按左右也没用)
27
28 void move site();//在蛇移动的过程中,设置除“蛇头”以外的各段的X、Y位置,依次向前移动。
29 void set direction();//设置蛇移动时除了“蛇头”以外的各个部分的方向。
30
31 void左转();//当蛇向左转时,
32 void turn right();//当蛇向右转时,
33 void GoUp();//蛇起来的时候。
34 void GoDown();//当蛇倒下时,
你可以参考这里:blogs.com/jncpp/archive/2012/07/24/2606908.html.
基于MFC实现的原创贪吃蛇游戏,附源代码下载。