毕业设计(论文)-贪吃蛇小游戏的VC++设计与实现.doc

上传人:西安人 文档编号:3286609 上传时间:2019-08-08 格式:DOC 页数:34 大小:196.52KB
返回 下载 相关 举报
毕业设计(论文)-贪吃蛇小游戏的VC++设计与实现.doc_第1页
第1页 / 共34页
毕业设计(论文)-贪吃蛇小游戏的VC++设计与实现.doc_第2页
第2页 / 共34页
毕业设计(论文)-贪吃蛇小游戏的VC++设计与实现.doc_第3页
第3页 / 共34页
毕业设计(论文)-贪吃蛇小游戏的VC++设计与实现.doc_第4页
第4页 / 共34页
毕业设计(论文)-贪吃蛇小游戏的VC++设计与实现.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《毕业设计(论文)-贪吃蛇小游戏的VC++设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-贪吃蛇小游戏的VC++设计与实现.doc(34页珍藏版)》请在三一文库上搜索。

1、贪吃蛇小游戏的VC+设计与实现摘 要本文首先对小游戏的发展前景进行了展望,并对其研究现状与研究目标进行了介绍。然后对编写程序用到的工具软件VC+进行了介绍。接着进入主题,对贪吃蛇这个游戏进行了介绍然后又对游戏总体上进行了设计与分析。最后详细地介绍了游戏中各个细节的具体实现,并进行了细致的分析。行云流水般地将在游戏编写过程中遇到的问题以及相应的解决方法表述的清清楚楚。在实践中我获得到了许多宝贵的知识和编程的经验,写在文章之中望与大家共享。关键词:贪吃蛇, VC+, 小游戏ABSTRACTIn this paper , at the first we saw the future of the d

2、evelopment of little game , and then we introduced the current situation and target of game research . Afterwards, we provided the programming tool which is called VC+ made by Microsoft . Next lets get down to business .In the first place, we introduced the game greedy snake .In the second place ,we

3、 designed and analyzed the overall game.At last , we vividly provided the particular realization of game details,and analyzed those detail meticulous.In the process of game programming ,I came up against lots of troubles, but I didnt give it up,by the contrary, I overcame them one by one, and at las

4、t I met with success. I have got many precious knowledge and programming experience in the practice, and I wish to share with everyone in my paper. Key Words: Greedy Snake, VC+, Little Game目 录摘 要IABSTRACTII第一章 绪 论11.1 选题背景11.2 研究现状与目标2第二章 C+程序语言与工具的基本简介42. 1 C+语言基础42.2 面向对象的程序设计52.3 VC+的介绍6第三章 贪吃蛇游戏

5、简介与总体设计73.1 贪吃蛇简介73.2 开发环境73.3 创建游戏的主框架和操作特性分析8第四章 用VC+设计贪吃蛇的具体实现104.1 写在设计前的构思104.2 算法设计与程序流程图114.3 光标移动的设计与实现134.4 贪吃蛇游戏主干的设计15第五章 总结与展望22参考文献24致 谢23附 录2531第一章 绪 论1.1 选题背景今天不小心注意到“小游戏”这个关键词一路爬上热门搜索第一位的位置,这引起了我的兴趣。查看了几个小游戏网站,其实也没有什么,只不过是些以FLASH为主开发的Flash小游戏,确实没有什么非同凡响的地方。但你仔细思考一下,就不难发现,这些东西还真有一定的市场

6、,只是现在还默默地没有被人们所关注。首先,不断扩大的网络爱好者和电脑应用者队伍,带来了很多“新手”,这些新手还会象以前我们刚接触时一样,对一些相对简单,操作也方便,娱乐性强的东西很感兴趣。源源不断的加入者,组成了“小游戏”玩家的新主力军。其次,“小游戏”很方便下载。如:MM小游戏,化妆小游戏,休闲小游戏,连连看小游戏,生活小游戏,等等。而且现在的数码小产品被越来越多的青年所青睐,拥有诸如MP3/MP4,智能手机,PDA,或电脑单机的逐渐壮大的用户群也正是这种网站的潜在用户群体。再次,随着电视上网进程的推进,网络走进千家万户的时代为期不远。因为电视分辩率与内存大小的限制,以及遥控器操作要求动作简

7、单,这种小游戏将会有一个巨大而潜在的市场。就拿现在来说网络上就盛行迷你小游戏,化装小游戏,美眉小游戏,qq小游戏,美眉化妆小游戏,黄金矿工,合金弹头,生活小游戏等等。这些都是现在网路搜索率高,娱乐性强的游戏。今后小游戏的发展趋势:1.体积小,小游戏一般都占硬盘空间相当小,方便下载传播; 2.内容好,体积小并不代表没有内容,相反小游戏的内容还是比较丰富的; 3.耐玩,正是因为小游戏占空间不大,它也是在电脑上占据时间比较长的游戏了;4.娱乐性高,小游戏玩起来还是蛮有趣的,拥有一定的娱乐性;5.无年龄层次,不分老少、不分男女小游戏面向的玩家范围广阔;6.有益身心健康,小游戏的操作不像大游戏那样操作复

8、杂,它们通常就是通过几个简单的按键就可以控制游戏,甚至只用到鼠标就行了,但是就是这几个简单的按键对于游戏的操控,可以达到手脑协调的特效,而且保持一个好的心情,有益身心。1.2 研究现状与目标1.2.1 研究现状C 语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的程序时,程序员用 C 语言较得心应手。但是当问题比较复杂、程序的规模比较大时,结构化程序设计方法就显出它的不足。C 程序的设计者必须细致地设计程序中的每一个细节,准确地考虑到程序运行时每一时刻发生的事情,例如各个变量的值是如何变化的,什么时候应该进行哪些输入,在屏幕上应该输出什么等。这对程序员的要求是比较高的,如果面对的是一

9、个复杂问题,程序员往往感到力不从心。当初提出结构化程序设计方法的目的是解决软件设计危机,但是这个目标并未完全实现。为了解决软件设计危机,在 20 世纪80 年代提出了面向对象的程序设计(Object-Oriented programming,简称 OOP),在这种形势下,C+ 应运而生。C+ 是由贝尔实验室的 Bjarne Stroustrup 博士及其同事在 C 语言的基础上开发成功的。C+ 保留了 C 语言原有的所有优点,增加了面向对象的机制。C+ 与 C 完全兼容,用 C 语言写的程序可以不加修改地用于 C+。从 C+ 名字可以看出它是对 C 的扩充,是 C 的超集。它既可以用于结构化程

10、序设计,又可用于面向对象的程序设计,因此它是一个功能强大的混合型的程序设计语言。使用 C+ 必须事先安装 C+ 编译系统,在 DOS 系统下可以使用 Turbo C+ 或 Borland C+ 。C 源程序的后缀一般为.c,而 C+ 的后缀一般为.cpp(为 C plus plus 的缩写,即 C+)。在 Borland C+ 开发环境中,既可以使用 C 语言,也可以使用 C+ 语言。它有两个编译系统,根据源程序文件名的后缀是 c 还是 cpp 来决定使用哪个编译系统。如上所述,面向对象程序设计方法主要是解决大型软件的设计问题。只有编写过大型程序的人才会体会到 C 的不足和 C+ 的优点。C+

11、 是一种大型语言,其功能、概念和语法规定都比较复杂,要深入掌握到需要花较多的时间,尤其是需要有较丰富的实践经验。用 C+ 编程的主要是软件专业人员。C+ 对 C 的“增强”,表现在两个方面:1.在原来面向过程的机制基础上,对 C语言的功能做了不少扩充。2.增加了面向对象的机制。VC+是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C+语言的要求编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库,充分体现了微软公司的技术精华。MFC中封装了大部分Windows API函数和Windows控件,它包含

12、的功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件。使用VC+提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得更简单。MFC提供的类库是高度抽象的程序设计,它使得程序员的主要精力不用放在程序设计的具体细节实现上,而放在程序的功能扩展上面。 1.2.2 研究目标C+学习过程中,涉及到很多的基本知识点,需要以练习的形式逐步深入,以达到融会贯通的目的。学习C+是一项交互式练习,不实际编写程序就无法学会C+,因此,要抱着一种十年方能磨一剑的心理,扎扎实实从基础开始。选一些好的实例,这些实例经过反复的挑

13、选,既有利于我们掌握有关知识,又不失趣味性。不断地写代码,写有意义的代码。这其实也是入门任何其他编程语言的必由之路。在编程的过程中,重点训练我的编程的逻辑思路和算法以及编程、调试的基本技术。因此,在作此毕业设计时,以任务驱动为前提,从提出问题入手,进行分析和算法设计,最后再归纳总结,以加强学习的针对性和应用性。 万丈高楼平地起,能够编写复杂的游戏都是在编写过简单的游戏基础上演变过来的能力。然而像贪吃蛇这样的简单的游戏,就自然成了游戏设计者的入门首选。因为其界面简单,操作、玩法一目了然,所以编写起来就不会很困难,而且需要考虑的问题也不用很多,就是蛇的显示、移动、碰撞3个游戏的主块,攻破这3个主块

14、,程序就自然编写出来了,不会一开始就把游戏设计初学者拒之门外。编成之后成就感就会油然而生,并使之对游戏设计产生强烈的兴趣。成为向游戏设计之路成功迈出的第一步,同时对于VC+的应用水平也会上升,用起来会更加娴熟、得心应手。从易到难这是一个准则,总之,贪吃蛇小游戏的研究会对增长程序阅读能力、程序编写能力等起到了意想不到的作用。第二章 C+程序语言与工具的基本简介2. 1 C+语言基础C+这个词在中国大陆通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”或者“dev.cpp。 它是一种使用非常广泛的计算机编程语言。C+是一种静态数据类型检查的,支持多重编程范式的通用程

15、序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。 C+的主要优点在于灵活性、效率以及编译期类型计算功能。它提供了丰富的语言特性和库,支持多种编程范型,绝不限制程序员应该做什么或如何做。在解决大规模程序的组织问题的同时,C+还完美地继承了C的高效性。在各种动态语言粉墨登场的时代,C+坚定地朝着另一个方向大踏步前进,不断强化其静态特性。强大的编译期类型计算功能终将成为C+无与伦比的特色。C+ 是C语言的一个高级版本,支持中文,界面高级,不需要启动母文件即可运行程序。 美国AT&T贝尔实验室的本贾尼斯特劳斯特卢普(Bjarne Stroust

16、rup)博士在20世纪80年代初期发明并实现了C+(最初这种语言被称作“C with Classes”)。一开始C+是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、名字空间(name space)逐渐被加入标准。1998年国际标准组织(ISO)颁布了C+程序设计语言的国际标准ISO/IEC 14882-1998。C+是具有国际标准的编程语言,通常称作ANSI/

17、ISO C+。1998年是C+标准委员会成立的第一年,以后每5年视实际需要更新一次标准,下一次标准更新将是在2009年,目前我们一般称该标准C+0x。遗憾的是,由于C+语言过于复杂,以及他经历了长年的演变,直到现在(2004年)只有少数几个编译器完全符合这个标准(这么说也是不完全正确的,事实上,至今为止没有任何一款编译器完全支持ISO C+)。 另外,就目前学习C+而言,可以认为他是一门独立的语言;他并不依赖C语言,我们可以完全不学C语言,而直接学习C+。根据C+编程思想(Thinking in C+)一书所评述的,C+与C的效率往往相差在正负5%之间。所以有人认为在大多数场合C+ 完全可以取

18、代C语言(然而我们在单片机等需要谨慎利用空间、直接操作硬件的地方还是要使用C语言)。 根据Effective C+第三版第一条款的描述,现在C+由以下四个“子语言”组成: 1、C子语言。C+支持C语言的几乎全部功能,在语法上与C语言仅有极微妙的差别(如括号表达式的左右值性,具体请参考C+标准文献)。 2、面向对象的C+。C+首先作为一门面向对象的语言而闻名,这个特点在这里不再详述。 3、泛型编程语言。C+强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。 4、STL(C+标准模板库)。随着STL的不断发展,它已经逐渐成为C+程序设计中不可或缺的部分,其效率可能比一

19、般的naive代码低些,但是其安全性与规范性使它大受欢迎。 C+语言发展大概可以分为三个阶段:第一阶段从80年代到1995年。这一阶段C+语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C+中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C+受到了一定的冲击;第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C+出现了发展历史上又一个新的

20、高峰,这些新技术的出现以及和原有技术的融合,使C+已经成为当今主流程序设计语言中最复杂的一员。2.2 面向对象的程序设计面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发的方法论。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。当我们提到面向对象的时候,它不仅指一种程式设计方法。它更多意义上是一种程序开发方式。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(Object Oriented Design,简称OOD)方面的知识。面向对象程序设计可以被视作一种

21、在程序中包含各种独立而又互相调用的单位和对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,或者说是负有责任的角色。目前已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。 此外,支持者声称面向对象程序设计要比以往的做法更加便于学习,因为它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。反对者在某些领域对此予以否认。.OOP有三个特性: 第一个关键特

22、性是定义了类,封装了表现和操作的抽象数据类型。在oop语言中,类是模块、封装和数据抽象的基础。 第二个关键特性是继承,从已存在的类型中继承元素(表现和方法),改变或扩展旧类型的方法。 第三个关键技术被称为多态性,它允许使用类似的方法操作不同类型的对象(通常是子类对象)。它使得类的可用性进一步提高,程序也因此更容易维护和扩展。通常,OOP被理解为一种将程序分解为封装数据及相关操作的模块而进行的编程方式。有别于其它编程方式,OOP中的与某数据类型相关的一系列操作都被有机地封装到该数据类型当中,而非散放于其外,因而OOP中的数据类型不仅有着状态,还有着相关的行为。OOP理论,及与之同名的OOP实践相

23、结合创造出了新的一个编程架构;OOP思想被广泛认为是非常有用的,以致一套新的编程范型被创造了出来。2.3 VC+的介绍VC+是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C+语言的要求编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库,充分体现了微软公司的技术精华。 MFC中封装了大部分Windows API函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件。使用VC+提供的高度可视

24、化的应用程序开发工具和MFC类库,可使应用程序开发变得更简单。MFC提供的类库是高度抽象的程序设计,它使得程序员的主要精力不用放在程序设计的具体细节实现上,而放在程序的功能扩展上面。 第三章 贪吃蛇游戏简介与总体设计3.1 贪吃蛇简介蛇传说中的圣灵之物,仰头为神、俯首为魔。蛇是月亮国膜拜的神,月亮国的子民们都认为蛇是万能的主宰派来保护他们的守护者。蛇在这个岛屿就像空气一样自然的出现在各个角落,有些还成为居民的宠物,陪伴孩子长大,和年轻人一起去探险,守护着散步的老人。 在善良的女娲神保佑下,人们的生活安宁平静。为了答谢女娲的庇佑,每年月亮国的国民都会举办一个守护蛇大赛,大家都会拿出自己最强、最炫

25、、最快、最稀有的蛇来参加比赛,获得第一名的人将得到国王的特别嘉奖。所以国民一生都在不断的培养更有威力、更长、更壮的蛇。“贪吃蛇”是一个产生于1970年代中后期的计算机游戏,也叫贪吃蛇。该游戏在1990年代由于一些手机将其引入而一时间再度流行起来。在游戏中,玩家操控一条细长的蛇爬行于一个带边界的平面之上,一路拾起触碰到之事物或其它类似的物件,并要避免触碰到自身或者包围着游戏区的“墙”。每次贪吃蛇吃掉一件食物,它的身体便增长一些,这让游戏的难度渐渐变大。操控贪吃蛇时,玩家操控贪吃蛇的头部的朝向(向上、向下、向左或向右)控制贪吃蛇的进行方向,贪吃蛇的身体将跟随着其头部行进。另外,玩家不可在游戏中途停

26、止贪吃蛇的进行。随着贪吃蛇的成功移植到手机系统,贪吃蛇的操作按键要求与手机按键的完美匹配,使贪吃蛇游戏风靡起来。3.2 开发环境3.2.1 开发工具和软件运行环境开发工具:Inter(R)Pentium(R) 4 CPU 2.90GHz ,512MB内存,80GB硬盘Microsoft(R) Windows(R) XPMicrosoft(R) Visual C+ 6.0软件运行环境:处理器无要求,32MB以上内存,硬盘1GB以上Microsoft(R) Windows(R) 系列所有操作系统800*600或以上的屏幕分辨率3.2.2 VC+6.0集成开发环境VC+6.0集成开发环境是集程序文件

27、的输入、编辑、编译、连接、运行等各种操作为一体的、具有Windows窗口界面特色的环境。利用VC+6.0集成开发环境开发C+程序的步骤大致为:1. 根据实际应用问题分析出编程思路,即程序的模块结构和文件结构,包含有哪些函数模块和哪些文件,函数之间的调用关系如何;2按照C+语言的语法规则编写出C+程序;3在VC+集成开发环境下,分别输入、编辑每个程序文件(.cpp);4分别运行C+系统中的编译程序使每个程序文件编译生成相应的目标文件(.obj);5运行C+系统中的连接程序把编译后的所有目标文件连接生成一个可执行的文件(.exe)6选择菜单中的执行程序选项运行连接后生成的可执行文件,得到处理结果。

28、3.3 创建游戏的主框架和操作特性分析3.3.1 创建游戏的主框架首先建立一个Win32 Console Application工程,命名为SnakeGame,并在,选择一个空的工程,然后单击完成。其项目的架构类视图信息如图3-1所示:在构架类视图中:snake_segment是定义的关于蛇身的数据结构,包括2个数据元素:横坐标row,纵坐标col;Globals是游戏中定义的所以全局变量和定义的构造函数。图3-1贪吃蛇的游戏类 3.3.2 操作特性分析贪吃蛇的操作是通过键盘中的“W”,“A”,“S”,“D”控制蛇头部的转向的,但是不可向相反方向按键,例如,假设蛇正向右方向行进的时候,不可以按

29、向左的方向以期其反转向行进。在游戏进行中当玩家想要强行退出时,提供了“X”这个按键的控制,可令玩家随心所欲。当游戏结束时,玩家可以通过按下按键“Y”,继续进行游戏;或是按下“N”,来结束游戏。3.3.3 贪吃蛇的功能描述对于贪吃蛇,其功能描述如下:一、功能描述食物一次随机在游戏区域产生一个,每当被吃掉就自动在随机生成一个。玩家通过控制蛇的运动,在游戏安全区域(围墙里面属安全区)寻找食物,每吃到一个食物,蛇的长度就会增长一节。随着蛇的成长,蛇的行进速度也会变快,此时游戏难度随之加大,直到蛇头碰到围墙或是碰到自己身体的某部分,则游戏结束。二、游戏界面描述:游戏界面简单,有关于分数的显示。整个游戏是

30、在控制台里完成的,蛇身、食物、围墙等可以用不同的颜色显示。蛇身用“oooo”显示,食物用“*”显示,围墙用一系列“= = =”显示。美感谈不上,只有简单。如图3-2所示。图3-2游戏画面第四章 用VC+设计贪吃蛇的具体实现4.1 写在设计前的构思4.1.1 设计前的游戏分析在具体设计游戏之前,先来分析一下整个游戏的大体上的实现。贪吃蛇这个游戏,程序的主体可以大致分为:1.蛇的移动2.蛇的头部方向的改变3.食物的产生这3个部分。采用分治算法的思想对游戏进行分析。第一项蛇的移动,就是在玩家没有对蛇进行操作的时候,蛇会自动地往某个固定方向进行移动,直至蛇头碰到围墙。这一项可采用动画片设计的思想,通过

31、连续切换有变化的图片,图片上的蛇就会动起来了。基于这个构想,确定出2个时时刻刻都在变化的点,一个是蛇的头部,一个是蛇的尾部。蛇的头部和尾部在时刻1的位置,到了时刻2蛇的头部要向前伸长一节,蛇的尾部也要向前伸长一节,同时时刻1的尾部也要消除掉。第二项蛇的头部方向的改变,就是在游戏和玩家交互的时候,当游戏玩家按下操控改变蛇头部的按键,此时蛇身会按玩家的意愿,做出相应的动作。要完成这一个,第一要接受玩家的按键,第二要做出相应的反应。第三项食物的产生,蛇的成长是依靠不断地吞掉食物一节一节生长的,游戏区域每吃掉一个食物,要在游戏区域自动产生另一个食物,同时出现食物的位置是随机的。这个可以设置随机数生成函

32、数,注意到屏幕上的点是和矩阵联系在一起的,因此每个点都是有横纵坐标的,想要在屏幕上的某个点显示什么这就变的很容易了。最后游戏的退出设计可以通过设置循环来完成。这里,先分析游戏的特点,把整个游戏的核心数据结构提取出来,再根据数据结构的特点提取核心功能模块的关联,然后对这些功能一一进行细化,从而完成整个游戏的设计。4.1.2 定义蛇身的数据结构对于蛇身在某一瞬间的位置标识,我们采用一个一维的数组来标识出来,即用动态增长的数组来存储每一节蛇身的位置(包括蛇头和蛇尾),也就是说,用存储单位空间存储当前蛇身某部位的位置来对整个蛇身的位置进行标识,因此每个存储空间的内容就是一个点的坐标值(row,col)

33、,而蛇身以从左到右的方式进行编号,最左边是蛇的尾部,最右边是蛇的头部。如表4-1为三节蛇的数据结构。表4-1三节蛇的数据结构(snake0.row, snake0.col)(snake1.row, snake1.col)(snake2.row, snake2.col)snake0.row和snake0.col是第0号蛇身也就是蛇尾的横坐标row和纵坐标col ;依此类推,snake2.row和snake2.col则是第2号蛇身也就是蛇头的横坐标row和纵坐标col。4.2 算法设计与程序流程图4.2.1 贪吃蛇算法设计Snake Game:=1:初始化游戏,游戏界面的绘制、游戏速度的设置、食物

34、产生2:while 玩家不按退出键3: if 玩家按下某方向键4: 蛇身按照玩家按下方向移动5: else 蛇身按照默认方向(右)移动6: end if7: if 蛇头碰到墙壁8: 游戏结束9: end if10: if 蛇头碰到自身11: 游戏结束12: end if13: if 蛇头碰到食物14: 蛇身增长、分数增加、产生新食物15: end if16:end while17:游戏结束4.2.2 程序流程图游戏初始化界面绘制、产生食物方向键按下蛇行进方向为按下方向键蛇正常移动碰壁撞到自己碰到食物蛇身增长、分数增加、再产生食物玩家没有按退出键游戏结束图4-1程序流程图4.3 光标移动的设计与

35、实现在游戏过程中,对于光标的移动相当重要。首先,食物的产生是随机的,可能出现在游戏界面的任何一个地方,因此生成随机坐标后,就要将光标移动到该坐标,然后进行显示食物操作。其次,游戏界面的显示也需要移动光标。譬如,纵向的围栏的显示。再次,就是蛇身的移动了,蛇尾部要不断清空,这样蛇就动起来了。其中x为纵坐标,y是横坐标,(x,y)对应于屏幕上的像素点。COORD 这个数据结构、SetConsoleCursorPosition()、GetStdHandle()这2个函数都是头文件windows.h里的。其中SetConsoleCursorPosition()将光标位置设为指定位置,GetStdHand

36、le()得到标准输入输出的句柄。Gotoxy()这个函数是布尔型的,返回真或假。bool gotoxy( short x, short y ) /移动光标COORD coord = x, y ;if( !SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord ) ) return false;if( !SetConsoleCursorPosition( GetStdHandle( STD_ERROR_HANDLE ), coord ) ) return false;return true;下面将光标移动应用到贪吃蛇游

37、戏中。4.3.1 显示水平围墙的实现水平围墙就是在游戏区域中,限制蛇行动的上下界,即活动的最大边界。这里用一系列“= = =”连续显示,直到设定的最大活动范围。void drawline(int col, int row)gotoxy(col,row); for (int i=0;imaxcol+2;i+) cout=;水平围墙如图4-2所示。 图4-2水平围墙4.3.2 显示分数的实现对于玩家的得分,是在游戏当中,玩家控制贪吃蛇每当吞掉一个食物,相应的分数就会增加一分。游戏结束时,分数会清零,再下一盘游戏中从0分开始计数。void showscore()gotoxy(20,maxrow+3)

38、;coutScore: score;玩家的分数显示如图4-3所示,初始分数为0。 图4-3分数的显示4.3.3 接收玩家按键信息的实现为了接收来自键盘的信息,这里用到了conio.h这个头文件。通过一个布尔函数kbhit()的真假来判断是否有按键被敲击,如果没有,游戏正常运行;否则通过getch()得到那个char变量的按键信息,然后修改蛇的运动方向。4.3.4 游戏结束时显示信息的实现当游戏介绍时,屏幕上要显示“Game Over”的字样,还有Another Game (y/n)? 的字样来让玩家选择继续游戏还是退出游戏。这里是通过使用gotoxy()函数,使上述的字样在想要显示的位置出现的

39、。游戏结束的显示信息如图4-4所示。图4-4游戏结束的显示4.4 贪吃蛇游戏主干的设计4.4.1 游戏的初始化与加载的实现游戏开始的时候,初始化蛇的长度为4节,行进方向为向右。并定义一个2维数组screengridrowcol,该数组的作用是产生食物用。蛇开始移动的坐标是(2,2)。然后绘制围墙横的围墙用一排“=”显示,纵的围墙用一列“|”显示,这样游戏的框架就出来了。初始化游戏分数,并显示游戏的一些帮助,如按键设置等。游戏初始化,包括蛇的初始长度,蛇初始行进的方向,游戏区域的显示。void loadgame()int row,col;snake_length=4;/蛇的初始长度directi

40、on = right_key;/蛇初始行进的方向for(row=0;rowmaxrow;row+)/定义screengridrowcol这个2维数组for(col=0;colmaxcol;col+)screengridrowcol= ;for(int i=0;isnake_length;i+)/初始化蛇身每节的横、纵坐标值snakei.row=snake_start_row;snakei.col=snake_start_col+i;/画游戏框架drawline(1,1);for(row=0;rowmaxrow;row+)gotoxy(1,row+2);cout|;for(col=0;colma

41、xcol;col+)coutscreengridrowcol;cout|;drawline(1,maxrow+2);showscore();/显示分数gotoxy(2,maxrow+5);cout SNAKE GAME Left:left_key Right:right_key Up:up_key Down:down_key Exit: x.;/显示游戏的帮助信息:按键设置游戏加载完成后,效果如图4-5所示。图4-5贪吃蛇的初始化4.4.2 食物随机产生的实现对于前面提到过的一个2维数组screengridrowcol这里要用到。用rand()函数生成2个随机生成的整数作为食物的横坐标和纵坐标

42、,并判断食物是否出去围墙,如果在游戏区域外面,则对随机生成的横纵坐标进行修改。然后移动光标到此坐标处进行输出“*”操作。(用“*”代表食物)这里的c和r会在判断蛇头是否碰到食物用到。这里要应用到time.h这个头文件,用于产生随机数。void creatfood()int col,row;row= rand()%maxrow;/生成随机的横坐标 col= rand()%maxcol;/ 生成随机的纵坐标if(row3)/判读横坐标出界row+=3;if(col3)/判读纵坐标出界col+=3;c=col;r=row; screengridrowcol=*;gotoxy(col,row); co

43、utscreengridrowcol;/在游戏区域显示食物食物随机产生,如图4-6所示。图4-6食物的随机产生4.4.3 蛇身的增长设计实现对于蛇身增长的设计要考虑到蛇头的运行方向。如果蛇头向右行进,新增加的蛇身横坐标不变,纵坐标增加1;如果蛇头向左行进,新增加的蛇身横坐标不变,纵坐标减少1;如果蛇头向上行进,新增加的蛇身纵坐标不变,横坐标减少1;如果蛇头向下行进,新增加的蛇身纵坐标不变,横坐标增加1。void addsegment()switch(direction)/判断蛇身的运行方向case(right_key): /蛇身向右方向行进snakesnake_length.row=snake

44、snake_length-1.row;snakesnake_length.col=snakesnake_length-1.col+1;break;case(left_key) : /蛇身向左方向行进snakesnake_length.row=snakesnake_length-1.row;snakesnake_length.col=snakesnake_length-1.col-1;break;case(up_key) : /蛇身向上方向行进snakesnake_length.row=snakesnake_length-1.row-1;snakesnake_length.col=snakesn

45、ake_length-1.col;break;case(down_key) : /蛇身向下方向行进snakesnake_length.row=snakesnake_length-1.row+1;snakesnake_length.col=snakesnake_length-1.col;break;default:/默认设置break;4.4.4 蛇身的显示与移动的设计实现对于蛇身的显示属于本程序设计的难点之一,因为蛇身是一个运动的物体,每个时刻蛇的某一节所在的位置是变化的。就像一个动画过程,需要每隔一个固定的时间,对蛇进行显示一次,并将蛇尾部的一节消掉,使蛇头向前增进一节。这是一个动态的过程,当然设置的固定显示蛇身时间是能让人眼来得及反应的时间,也就是不能太快,否则在人看来就是频闪的一串了。其中addsegment()这个函数是用来为蛇头的前移赋值的。void snakemove() addsegment();/为蛇头前进赋值go

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1