资源描述:
《用visual c++开发的贪吃蛇游.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、贪吃蛇完整设计过程和完整源代码简介一直在学VC编程,但是感觉自己的进步甚微,还是什么都不懂,还是什么都不会编,再加上身心不适,学习总是断断续续的。期中考试过后,放六天假,闲来无事,在网上看到了别人编的贪吃蛇游戏,自己下载两个源代码,一个界面做的太不人性化,感觉那蛇不像蛇,都是断断续续的小点,感觉不是很好;另一个是在TC中编的,好像现在很少有人用TC,我想大家都应该跟我一样,都是用VC,没办法,需要画图,这个程序在VC中没办法运行,一DEBUG错误连篇,看都不想看了。所以自己有了编写这个游戏的念头。首先自己看了看别人编写贪吃蛇
2、的思路(其实这就是这个游戏的精髓,我很惭愧啊)。就是使用链表来实现的。-----到这里,是不是很感慨我们学过的数据结构原来是这么有用途啊?链表?用链表就可以实现吗?------没错!就是用链表(队列)实现的,在这个游戏程序中除了画图,定时,产生随机数之外,那就是链表的创建,扫描,入队和出队了。如果你懂链表的这些基本的操作,那没问题,这个游戏程序编写出来是没有问题的。当然还是得知道点(一点点)WIN32(API,我是用API,没用MFC,相比较API开始比MFC好学些哦)应用程序的基本框架的基本知识。比方说某些消息,WM_CR
3、EATE,WM_PAINT,WM_CHAR,WM_TIMER;HPEN(画笔),HBRUSH(画刷),HDC(设备上下文环境);某些设置画笔、画刷的函数:CreatePen(),SelectObject();获取DC的函数,在WM_PAINT中要使用:BeginPaint().....EndPaint(),在其他地方就要使用GetDC()......ReleaseDC();设置定时器函数SetTimer(),销毁定时器函数KillTimer()。好了,这就是编写出此程序所需要的全部知识,下面的过程要看个人的逻辑思维能力,编程
4、经验。经验丰富,逻辑缜密的走的弯子肯定要少很多,否则,那当然会走完一个又一个弯子之后....还得继续走弯子,不过肯定会做出来的,只要坚持!不过也不排除人品大爆发的,用不了多久就编出来了。不过还是强烈建议多走走弯子,只有经历过,你才知道某段代码为什么要那么编,不那么编会出现什么样的情况。嗯~~~~废话说完了,进入正题吧。首先看看我们这个程序的运行效果吧,很是简陋,但是麻雀虽小,五脏俱全啊。界面设计这个游戏,那第一步要思考的当然是如何将格子画出来了。我们先确定下每一个格子的大小吧。我这里的大小为16*16,总共有20行20列。先
5、定义宏#defineRowOfFrame20#defineColumnOfFrame20#defineWidth16#defineHeight20字面意思已经很清楚了。您可能恍然大悟,画这格子不很简单吗!对!不就是画20条横线,20条竖线吗!查下MSDN,MoveToEx()是用来设定起始点的,LineTo()是用来画起点到终点的线。当然画线是用画笔去画的。那得创建具有这些要求的画笔了。两句话就搞定了:HPENhpen=CreatePen(PS_SOLID,1,RGB(255,0,0));SelectObject(hdc,h
6、pen);接下来画20条横线20条竖线吧。这个就是Design()函数所完成的功能。当然这里需要给每个格子一个定位坐标,程序中已经默认使用了。也很简单,就是我们在脑子里面给它一个坐标系就行了。比方说(0,0)代表的是左上角第一个格子,而(19,19)代表的是右下角的格子。假如一个格子的坐标为(x,y),那么这个格子的左上顶点的实际坐标是多少呢?能想出来吧,不行就在纸上画画,是(x*Width,y*Height)。这个我们在后面产生随机数,记录蛇节点,食物的位置等的时候要用到的。看到这里想必敏感的人可能已经知道怎么画蛇了吧,不
7、也是用画笔画线吗,只不过线粗点而已,是不是?画食物也是一样的道理,简单得来吧~~~具体的操作参考一下函数DrawSnake(),DrawFood()。到这里,游戏所涉及的画图的知识就这么多。相信你可以用画笔画线、画矩形了吧。这在这里就足够了。是不是很简单呢?的确,这游戏一点都不难,要不然我这个阿斗怎么就编出来了呢?Believeyourself!Let'scontinue...数据结构下面得说说所涉及到的链表这个数据结构了。我们这里的蛇是一个个连续的格子组合在一起的,我们只要定义一个结构体记录格子的位置,那么蛇就是这些结构体
8、所组成的链表了。结构体定义如下:StructNode{Intx;Inty;Node*next;};Structsnake{Node*head;Node*tail;Intlength;};功能模块我们在初始的时候,规定蛇的长度是1,所在的位置是(0,0)格子中。这是Init()函数所完成的功