首页 贪吃蛇小游戏的VC++设计与实现

贪吃蛇小游戏的VC++设计与实现

举报
开通vip

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

贪吃蛇小游戏的VC++设计与实现
贪吃蛇小游戏的VC++ 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 与实现 摘 要 本文首先对小游戏的发展前景进行了展望,并对其研究现状与研究目标进行了介绍。然后对编写程序用到的工具软件VC++进行了介绍。接着进入主 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,对贪吃蛇这个游戏进行了介绍然后又对游戏总体上进行了设计与分析。最后详细地介绍了游戏中各个细节的具体实现,并进行了细致的分析。行云流水般地将在游戏编写过程中遇到的问题以及相应的解决方法表述的清清楚楚。在实践中我获得到了许多宝贵的知识和编程的经验,写在文章之中望与大家共享。 关键词:贪吃蛇, VC++, 小游戏 I 贪吃蛇小游戏的VC++设计与实现 ABSTRACT In this paper , at the first we saw the future of the development 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 let’s get down to business .In the first place, we introduced the game —greedy snake .In the second place ,we 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 didn’t give it up,by the contrary, I overcame them one by one, and at last 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 II 贪吃蛇小游戏的VC++设计与实现 目 录 摘 要 ............................................................................................................................................. I ................................................................................................................................. II ABSTRACT 第一章 绪 论 ........................................................................................................................... 1 1.1 选题背景 ........................................................................................................................ 1 1.2 研究现状与目标 ........................................................................................................... 2 第二章 C++程序语言与工具的基本简介.......................................................................... 4 2. 1 C++语言基础 ................................................................................................................ 4 2.2 面向对象的程序设计 .................................................................................................. 5 2.3 VC++的介绍 ................................................................................................................... 6 第三章 贪吃蛇游戏简介与总体设计 .................................................................................. 7 3.1 贪吃蛇简介 .................................................................................................................... 7 3.2 开发环境 ........................................................................................................................ 7 3.3 创建游戏的主框架和操作特性分析 ...................................................................... 8 第四章 用VC++设计贪吃蛇的具体实现 ........................................................................ 10 4.1 写在设计前的构思 .................................................................................................... 10 4.2 算法设计与程序流程图 ........................................................................................... 11 4.3 光标移动的设计与实现 ........................................................................................... 13 4.4 贪吃蛇游戏主干的设计 ........................................................................................... 15 第五章 总结与展望................................................................................................................ 22 参考文献 .................................................................................................. 错误~未定义书签。24 致 谢 ........................................................................................................................................... 23 附 录 ........................................................................................................................................... 24 III 贪吃蛇小游戏的VC++设计与实现 第一章 绪 论 1.1 选题背景 今天不小心注意到“小游戏”这个关键词一路爬上热门搜索第一位的位置,这引起了我的兴趣。查看了几个小游戏网站,其实也没有什么,只不过是些以FLASH为主开发的Flash小游戏,确实没有什么非同凡响的地方。但你仔细思考一下,就不难发现,这些东西还真有一定的市场,只是现在还默默地没有被人们所关注。 首先,不断扩大的网络爱好者和电脑应用者队伍,带来了很多“新手”,这些新手还会象以前我们刚接触时一样,对一些相对简单,操作也方便,娱乐性强的东西很感兴趣。源源不断的加入者,组成了“小游戏”玩家的新主力军。 其次,“小游戏”很方便下载。如:MM小游戏,化妆小游戏,休闲小游戏,连连看小游戏,生活小游戏,等等。而且现在的数码小产品被越来越多的青年所青睐,拥有诸如MP3/MP4,智能手机,PDA,或电脑单机的逐渐壮大的用户群也正是这种网站的潜在用户群体。 再次,随着电视上网进程的推进,网络走进千家万户的时代为期不远。因为电视分辩率与内存大小的限制,以及遥控器操作要求动作简单,这种小游戏将会有一个巨大而潜在的市场。就拿现在来说网络上就盛行迷你小游戏,化装小游戏,美眉小游戏,qq小游戏,美眉化妆小游戏,黄金矿工,合金弹头,生活小游戏等等。这些都是现在网路搜索率高,娱乐性强的游戏。 今后小游戏的发展趋势:1.体积小,小游戏一般都占硬盘空间相当小,方便下载传播; 2.内容好,体积小并不代表没有内容,相反小游戏的内容还是比较丰富的; 3.耐玩,正是因为小游戏占空间不大,它也是在电脑上占据时间比较长的游戏了;4.娱乐性高,小游戏玩起来还是蛮有趣的,拥有一定的娱乐性;5.无年龄层次,不分老少、不分男女小游戏面向的玩家范围广阔;6.有益身心健康,小游戏的操作不像大游戏那样操作复杂,它们通常就是通过几个简单的按键就可以控制游戏,甚至只用到鼠标就行了,但是就是这几个简单的按键对于游戏的操控,可以达到手脑协调的特效,而且保持一个好的心情,有益身心。 1 贪吃蛇小游戏的VC++设计与实现 1.2 研究现状与目标 1.2.1 研究现状 C 语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的程序时,程序员用 C 语言较得心应手。但是当问题比较复杂、程序的规模比较大时,结构化程序设计方法就显出它的不足。C 程序的设计者必须细致地设计程序中的每一个细节,准确地考虑到程序运行时每一时刻发生的事情,例如各个变量的值是如何变化的,什么时候应该进行哪些输入,在屏幕上应该输出什么等。这对程序员的要求是比较高的,如果面对的是一个复杂问题,程序员往往感到力不从心。当初提出结构化程序设计方法的目的是解决软件设计危机,但是这个目标并未完全实现。为了解决软件设计危机,在 20 世纪80 年代提出了面向对象的程序设计(Object-Oriented programming,简称 OOP),在这种形势下,C++ 应运而生。C++ 是由贝尔实验室的 Bjarne Stroustrup 博士及其同事在 C 语言的基础上开发成功的。C++ 保留了 C 语言原有的所有优点,增加了面向对象的机制。C++ 与 C 完全兼容,用 C 语言写的程序可以不加修改地用于 C++。从 C++ 名字可以看出它是对 C 的扩充,是 C 的超集。它既可以用于结构化程序设计,又可用于面向对象的程序设计,因此它是一个功能强大的混合型的程序设计语言。 使用 C++ 必须事先安装 C++ 编译系统,在 DOS 系统下可以使用 Turbo C++ 或 Borland C++ 。C 源程序的后缀一般为.c,而 C++ 的后缀一般为.cpp(为 C plus plus 的缩写,即 C++)。在 Borland C++ 开发环境中,既可以使用 C 语言,也可以使用 C++ 语言。它有两个编译系统,根据源程序文件名的后缀是 c 还是 cpp 来决定使用哪个编译系统。 如上所述,面向对象程序设计方法主要是解决大型软件的设计问题。只有编写过大型程序的人才会体会到 C 的不足和 C++ 的优点。C++ 是一种大型语言,其功能、概念和语法规定都比较复杂,要深入掌握到需要花较多的时间,尤其是需要有较丰富的实践经验。用 C++ 编程的主要是软件专业人员。C++ 对 C 的“增强”,表现在两个方面:1.在原来面向过程的机制基础上,对 C语言的功能做了不少扩充。2.增加了面向对象的机制。 VC++是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库,充分体现了微软公司的技术精华。 MFC中封装了大部分Windows API函数和Windows控件,它包含的功能涉 2 贪吃蛇小游戏的VC++设计与实现 及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件。使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得更简单。MFC提供的类库是高度抽象的程序设计,它使得程序员的主要精力不用放在程序设计的具体细节实现上,而放在程序的功能扩展上面。 1.2.2 研究目标 C++学习过程中,涉及到很多的基本知识点,需要以练习的形式逐步深入,以达到融会贯通的目的。学习C++是一项交互式练习,不实际编写程序就无法学会C++,因此,要抱着一种十年方能磨一剑的心理,扎扎实实从基础开始。选一些好的实例,这些实例经过反复的挑选,既有利于我们掌握有关知识,又不失趣味性。不断地写代码,写有意义的代码。这其实也是入门任何其他编程语言的必由之路。在编程的过程中,重点训练我的编程的逻辑思路和算法以及编程、调试的基本技术。因此,在作此毕业设计时,以任务驱动为前提,从提出问题入手,进行分析和算法设计,最后再归纳总结,以加强学习的针对性和应用性。 万丈高楼平地起,能够编写复杂的游戏都是在编写过简单的游戏基础上演变过来的能力。然而像贪吃蛇这样的简单的游戏,就自然成了游戏设计者的入门首选。因为其界面简单,操作、玩法一目了然,所以编写起来就不会很困难,而且需要考虑的问题也不用很多,就是蛇的显示、移动、碰撞3个游戏的主块,攻破这3个主块,程序就自然编写出来了,不会一开始就把游戏设计初学者拒之门外。编成之后成就感就会油然而生,并使之对游戏设计产生强烈的兴趣。成为向游戏设计之路成功迈出的第一步,同时对于VC++的应用水平也会上升,用起来会更加娴熟、得心应手。从易到难这是一个准则,总之,贪吃蛇小游戏的研究会对增长程序阅读能力、程序编写能力等起到了意想不到的作用。 3 贪吃蛇小游戏的VC++设计与实现 第二章 C++程序语言与工具的基本简介 2. 1 C++语言基础 C++这个词在中国大陆通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”或者“dev.cpp"。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。 C++的主要优点在于灵活性、效率以及编译期类型计算功能。它提供了丰富的语言特性和库,支持多种编程范型,绝不限制程序员应该做什么或如何做。在解决大规模程序的组织问题的同时,C++还完美地继承了C的高效性。在各种动态语言粉墨登场的时代,C++坚定地朝着另一个方向大踏步前进,不断强化其静态特性。强大的编译期类型计算功能终将成为C++无与伦比的特色。 C++ 是C语言的一个高级版本,支持中文,界面高级,不需要启动母文件即可运行程序。 美国AT&T贝尔实验室的本贾尼?斯特劳斯特卢普(Bjarne Stroustrup)博士在20世纪80年代初期发明并实现了C++(最初这种语言被称作“C with Classes”)。一开始C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、名字空间(name space)逐渐被加入 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 。1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC 14882-1998。C++是具有国际标准的编程语言,通常称作ANSI/ISO C++。1998年是C++标准委员会成立的第一年,以后每5年视实际需要更新一次标准,下一次标准更新将是在2009年,目前我们一般称该标准C++0x。遗憾的是,由于C++语言过于复杂,以及他经历了长年的演变,直到现在(2004年)只有少数几个编译器完全符合这个标准(这么说也是不完全正确的,事实上,至今为止没有任何一款编译器完全支持ISO C++)。 另外,就目前学习C++而言,可以认为他是一门独立的语言;他并不依赖C语言,我们可以完全不学C语言,而直接学习C++。根据《C++编程思想》(Thinking in C++)一书所评述的,C++与C的效率往往相差在正负5%之间。所以有人认为在大多数场合C++ 完全可以取代C语言(然而我们在单片机等需要谨慎利用空间、直接操作硬件的地方还是要使用C语言)。 4 贪吃蛇小游戏的VC++设计与实现 根据Effective C++第三版第一条款的描述,现在C++由以下四个“子语言”组成: 1、C子语言。C++支持C语言的几乎全部功能,在语法上与C语言仅有极微妙的差别(如括号表达式的左右值性,具体请参考C++标准文献)。 、面向对象的C++。C++首先作为一门面向对象的语言而闻名,这个特点2 在这里不再详述。 3、泛型编程语言。C++强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。 4、STL(C++标准模板库)。随着STL的不断发展,它已经逐渐成为C++程序设计中不可或缺的部分,其效率可能比一般的naive代码低些,但是其安全性与 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 性使它大受欢迎。 C++语言发展大概可以分为三个阶段:第一阶段从80年代到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击;第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员。 2.2 面向对象的程序设计 面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发的方法论。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。当我们提到面向对象的时候,它不仅指一种程式设计方法。它更多意义上是一种程序开发方式。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(Object Oriented Design,简称OOD)方面的知识。 面向对象程序设计可以被视作一种在程序中包含各种独立而又互相调用的单位和对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,或者说是负有 责任 安全质量包保责任状安全管理目标责任状8安全事故责任追究制幼儿园安全责任状占有损害赔偿请求权 的角色。 5 贪吃蛇小游戏的VC++设计与实现 目前已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。 此外,支持者声称面向对象程序设计要比以往的做法更加便于学习,因为它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。反对者在某些领域对此予以否认。 .OOP有三个特性: 第一个关键特性是定义了类,封装了表现和操作的抽象数据类型。在oop语言中,类是模块、封装和数据抽象的基础。 第二个关键特性是继承,从已存在的类型中继承元素(表现和方法),改变或扩展旧类型的方法。 第三个关键技术被称为多态性,它允许使用类似的方法操作不同类型的对象(通常是子类对象)。它使得类的可用性进一步提高,程序也因此更容易维护和扩展。 通常,OOP被理解为一种将程序分解为封装数据及相关操作的模块而进行的编程方式。有别于其它编程方式,OOP中的与某数据类型相关的一系列操作都被有机地封装到该数据类型当中,而非散放于其外,因而OOP中的数据类型不仅有着状态,还有着相关的行为。OOP理论,及与之同名的OOP实践相结合创造出了新的一个编程架构;OOP思想被广泛认为是非常有用的,以致一套新的编程范型被创造了出来。 2.3 VC++的介绍 VC++是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库,充分体现了微软公司的技术精华。 MFC中封装了大部分Windows API函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件。使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得更简单。MFC提供的类库是高度抽象的程序设计,它使得程序员的主要精力不用放在程序设计的具体细节实现上,而放在程序的功能扩展上面。 6 贪吃蛇小游戏的VC++设计与实现 第三章 贪吃蛇游戏简介与总体设计 3.1 贪吃蛇简介 蛇――传说中的圣灵之物,仰头为神、俯首为魔。蛇是月亮国膜拜的神,月亮国的子民们都认为蛇是万能的主宰派来保护他们的守护者。蛇在这个岛屿就像空气一样自然的出现在各个角落,有些还成为居民的宠物,陪伴孩子长大,和年轻人一起去探险,守护着散步的老人。 在善良的女娲神保佑下,人们的生活安宁平静。为了答谢女娲的庇佑,每年月亮国的国民都会举办一个守护蛇大赛,大家都会拿出自己最强、最炫、最快、最稀有的蛇来参加比赛,获得第一名的人将得到国王的特别嘉奖。所以国民一生都在不断的培养更有威力、更长、更壮的蛇。 “贪吃蛇”是一个产生于1970年代中后期的计算机游戏,也叫贪吃蛇。该游戏在1990年代由于一些手机将其引入而一时间再度流行起来。在游戏中,玩家操控一条细长的蛇爬行于一个带边界的平面之上,一路拾起触碰到之事物或其它类似的物件,并要避免触碰到自身或者包围着游戏区的“墙”。每次贪吃蛇吃掉一件食物,它的身体便增长一些,这让游戏的难度渐渐变大。操控贪吃蛇时,玩家操控贪吃蛇的头部的朝向(向上、向下、向左或向右)控制贪吃蛇的进行方向,贪吃蛇的身体将跟随着其头部行进。另外,玩家不可在游戏中途停止贪吃蛇的进行。随着贪吃蛇的成功移植到手机系统,贪吃蛇的操作按键要求与手机按键的完美匹配,使贪吃蛇游戏风靡起来。 3.2 开发环境 3.2.1 开发工具和软件运行环境 开发工具: Inter(R)Pentium(R) 4 CPU 2.90GHz ,512MB内存,80GB硬盘 Microsoft(R) Windows(R) XP Microsoft(R) Visual C++ 6.0 软件运行环境: 处理器无要求,32MB以上内存,硬盘1GB以上 Microsoft(R) Windows(R) 系列所有操作系统 800*600或以上的屏幕分辨率 7 贪吃蛇小游戏的VC++设计与实现 3.2.2 VC++6.0集成开发环境 VC++6.0集成开发环境是集程序文件的输入、编辑、编译、连接、运行等各种操作为一体的、具有Windows窗口界面特色的环境。 利用VC++6.0集成开发环境开发C++程序的步骤大致为: 1. 根据实际应用问题分析出编程思路,即程序的模块结构和文件结构,包含有哪些函数模块和哪些文件,函数之间的调用关系如何; 2(按照C++语言的语法规则编写出C++程序; 3(在VC++集成开发环境下,分别输入、编辑每个程序文件(.cpp); 4(分别运行C++系统中的编译程序使每个程序文件编译生成相应的目标文件(.obj); 5(运行C++系统中的连接程序把编译后的所有目标文件连接生成一个可执行的文件(.exe) 6(选择菜单中的执行程序选项运行连接后生成的可执行文件,得到处理结果。 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”控制蛇头部的转向的,但是不可向相反方向按键,例如,假设蛇正向右方向行进的时候,不可以按向左 8 贪吃蛇小游戏的VC++设计与实现 的方向以期其反转向行进。在游戏进行中当玩家想要强行退出时,提供了“X”这个按键的控制,可令玩家随心所欲。当游戏结束时,玩家可以通过按下按键“Y”,继续进行游戏;或是按下“N”,来结束游戏。 3.3.3 贪吃蛇的功能描述 对于贪吃蛇,其功能描述如下: 一、功能描述 食物一次随机在游戏区域产生一个,每当被吃掉就自动在随机生成一个。玩家通过控制蛇的运动,在游戏安全区域(围墙里面属安全区)寻找食物,每吃到一个食物,蛇的长度就会增长一节。随着蛇的成长,蛇的行进速度也会变快,此时游戏难度随之加大,直到蛇头碰到围墙或是碰到自己身体的某部分,则游戏结束。 二、游戏界面描述: 游戏界面简单,有关于分数的显示。整个游戏是在控制台里完成的,蛇身、食物、围墙等可以用不同的颜色显示。蛇身用“oooo”显示,食物用“*”显示,围墙用一系列“= = =”显示。美感谈不上,只有简单。如图3-2所示。 图3-2游戏画面 9 贪吃蛇小游戏的VC++设计与实现 第四章 用VC++设计贪吃蛇的具体实现 4.1 写在设计前的构思 4.1.1 设计前的游戏分析 在具体设计游戏之前,先来分析一下整个游戏的大体上的实现。贪吃蛇这个游戏,程序的主体可以大致分为:1.蛇的移动2.蛇的头部方向的改变3.食物的产生这3个部分。采用分治算法的思想对游戏进行分析。第一项蛇的移动,就是在玩家没有对蛇进行操作的时候,蛇会自动地往某个固定方向进行移动,直至蛇头碰到围墙。这一项可采用动画片设计的思想,通过连续切换有变化的图片,图片上的蛇就会动起来了。基于这个构想,确定出2个时时刻刻都在变化的点,一个是蛇的头部,一个是蛇的尾部。蛇的头部和尾部在时刻1的位置,到了时刻2蛇的头部要向前伸长一节,蛇的尾部也要向前伸长一节,同时时刻1的尾部也要消除掉。第二项蛇的头部方向的改变,就是在游戏和玩家交互的时候,当游戏玩家按下操控改变蛇头部的按键,此时蛇身会按玩家的意愿,做出相应的动作。要完成这一个,第一要接受玩家的按键,第二要做出相应的反应。第三项食物的产生,蛇的成长是依靠不断地吞掉食物一节一节生长的,游戏区域每吃掉一个食物,要在游戏区域自动产生另一个食物,同时出现食物的位置是随机的。这个可以设置随机数生成函数,注意到屏幕上的点是和矩阵联系在一起的,因此每个点都是有横纵坐标的,想要在屏幕上的某个点显示什么这就变的很容易了。最后游戏的退出设计可以通过设置循环来完成。这里,先分析游戏的特点,把整个游戏的核心数据结构提取出来,再根据数据结构的特点提取核心功能模块的关联,然后对这些功能一一进行细化,从而完成整个游戏的设计。 4.1.2 定义蛇身的数据结构 对于蛇身在某一瞬间的位置标识,我们采用一个一维的数组来标识出来,即用动态增长的数组来存储每一节蛇身的位置(包括蛇头和蛇尾), 也就是说,用存储单位空间存储当前蛇身某部位的位置来对整个蛇身的位置进行标识,因此每个存储空间的内容就是一个点的坐标值(row,col),而蛇身以从左到右的方式进行编号,最左边是蛇的尾部,最右边是蛇的头部。如表4-1为三节蛇的数据结构。 10 贪吃蛇小游戏的VC++设计与实现 表4-1三节蛇的数据结构 (snake[0].row, snake[0].col) (snake[1].row, snake[1].col) (snake[2].row, snake[2].col) snake[0].row和snake[0].col是第0号蛇身也就是蛇尾的横坐标row和纵坐标col ; 依此类推,snake[2].row和snake[2].col则是第2号蛇身也就是蛇头的横坐标row 和纵坐标col。 4.2 算法设计与程序流程图 4.2.1 贪吃蛇算法设计 Snake Game: ====================================================================== 1:初始化游戏,游戏界面的绘制、游戏速度的设置、食物产生 2:while 玩家不按退出键 3: if 玩家按下某方向键 4: 蛇身按照玩家按下方向移动 5: else 蛇身按照默认方向(右)移动 6: end if 7: if 蛇头碰到墙壁 8: 游戏结束 9: end if 10: if 蛇头碰到自身 11: 游戏结束 12: end if 13: if 蛇头碰到食物 14: 蛇身增长、分数增加、产生新食物 15: end if 16:end while 17:游戏结束 4.2.2 程序流程图 11 贪吃蛇小游戏的VC++设计与实现 游戏初始化 界面绘制、产生食物 方向键按 下 蛇行进方向 为按下方向 键 蛇正常移动 碰壁 撞到 自己 碰到 食物 蛇身增长、分数增加、 再产生食物 玩家没有 按退出键 游戏结束 图4-1程序流程图 12 贪吃蛇小游戏的VC++设计与实现 4.3 光标移动的设计与实现 在游戏过程中,对于光标的移动相当重要。首先,食物的产生是随机的,可能出现在游戏界面的任何一个地方,因此生成随机坐标后,就要将光标移动到该坐标,然后进行显示食物操作。其次,游戏界面的显示也需要移动光标。譬如,纵向的围栏的显示。再次,就是蛇身的移动了,蛇尾部要不断清空,这样蛇就动起来了。其中x为纵坐标,y是横坐标,(x,y)对应于屏幕上的像素点。COORD 这个数据结构、SetConsoleCursorPosition()、GetStdHandle()这2个函数都是头文件windows.h里的。其中SetConsoleCursorPosition()将光标位置设为指定位置,GetStdHandle()得到标准输入输出的句柄。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; } 下面将光标移动应用到贪吃蛇游戏中。 4.3.1 显示水平围墙的实现 水平围墙就是在游戏区域中,限制蛇行动的上下界,即活动的最大边界。这里用一系列“= = =”连续显示,直到设定的最大活动范围。 void drawline(int col, int row) { gotoxy(col,row); for (int i=0;imaxrow+1)||(snake[snake_length-1].row<=1)|| (snake[snake_length-1].col>maxcol+1)||(snake[snake_length-1].col<=1)) keypress='x'; //退出游戏 如图4-7所示为碰壁情况。 图4-7 蛇的碰壁情况 2.其次,考虑蛇的头部是否与自己身体的某个部位产生的碰撞检测。如果检测到有碰撞,则游戏结束;否则游戏正常进行。这个是通过一个循环将蛇的头部的横、纵坐标值与每节蛇身(除了蛇头外)直到蛇的尾部的横、纵坐标值进行比对,一旦发现蛇身某部位的横、纵坐标值与蛇的头部的横、纵坐标值一致,则游戏结束;否则游戏正常进行。 //检测碰到蛇身 19 贪吃蛇小游戏的VC++设计与实现 for (i=0;i #include #include #include using namespace std; void drawline(int col, int row); void showscore(); void addsegment(); void loadgame(); void creatfood(); const int maxrow=15,maxcol=47; const int snake_start_col=2,snake_start_row=2; const char up_key='w', down_key='s', left_key='a', right_key='d'; const int pause_length=500000; int score, snake_length, speed,r,c; char screengrid[maxrow][maxcol]; char direction ; struct snake_segment { short row; short col; } snake[100]; bool gotoxy( short x, short y ) //移动光标 24 贪吃蛇小游戏的VC++设计与实现 { COORD coord = { x, y }; if( !SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord ) ) return false; if( !SetConsoleCursorPosition( GetStdHandle( STD_ERROR_HANDLE ), coord ) ) return false; return true; } void main() { char keypress; do { score = 0; speed = 80;//通过修改改变难度 srand(time(NULL)); loadgame(); creatfood(); do { if (kbhit()) { keypress=(char)getch(); if((keypress==right_key)||(keypress==left_key)|| (keypress==up_key)||(keypress==down_key)) direction = keypress; } //蛇移动 25 贪吃蛇小游戏的VC++设计与实现 addsegment(); gotoxy(snake[0].col,snake[0].row); cout<<" "; for (int i=1;i<=snake_length;i++) snake[i-1]=snake[i]; for (i=0;imaxrow+1)||(snake[snake_length-1].row<=1)|| (snake[snake_length-1].col>maxcol+1)||(snake[snake_length-1].col<=1)) keypress='x'; //检测碰到蛇身 for (i=0;i
本文档为【贪吃蛇小游戏的VC++设计与实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_562397
暂无简介~
格式:doc
大小:131KB
软件:Word
页数:40
分类:工学
上传时间:2017-09-01
浏览量:92