




已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于嵌入式winCE开发的贪吃蛇游戏摘要进年来计算机技术在中国取得了突飞猛进的发展,嵌入式领域也随之发展起来。然而,嵌入式在中国仍然处于初级阶段,相对美国等发达国家,嵌入式领域的很多关键技术都是我们都是从国外引进学习的,我们并没有从根本上解决技术难点,也没有这方面取得的突破性进展,和国外的发达国家还有一定的差距。本文基于此,尝试设计了基于嵌入式winCE开发的一款贪吃蛇游戏,主要目的是通过开发嵌入式贪吃蛇游戏,掌握嵌入式开发的整个过程,同时介绍基于winCE嵌入式开发的详细设计步骤,向初学者介绍开发基于winCE方面嵌入式程序的整个框架流程。本论文软件方面采用的是EVC+4.0开发平台设计程序,PB5.0进行系统定制,硬件方面采用的是PXA270-S实验开发箱。整个设计流程将在本论文主体部分进行详细的叙述。从定制自己所需的winCE系统、运用MFC基于对话框的C+语言编写贪吃蛇游戏源代码到最终下载程序到实验开发板的整个过程都做了很详细的介绍。关键词:winCE5.0、EVC+4.0、PB5.0 、嵌入式系统、贪吃蛇游戏、内核定制Development based on embedded winCE Snake gameAbstractInto the years of computer technology in China has made rapid development, also will develop embedded field.However, embedded in ChinaStill in its infancy, relative to the U.S. and other developed countries, many of the key technologies embedded world is we are all learning from abroad, And we do not fundamentally solve the technical difficulties, there is no breakthrough made in this regard, there is a developed country and abroadGiven gap. Based on this, try to design embedded winCE based on the development of a Snake game, the main purpose is to develop embedded corruptionEat snake game, master the entire embedded development process, also introduced an embedded development process based on winCE to introduce beginners to the developmentwinCE regard the overall framework of the process embedded program.Software used in this paper is to EVC + +4.0 development platform design process, PB5.0For system customization, hardware PXA270-S is used in experimental development box.The design process will detail the main part of this thesisNarrative.Key words:winCE5.0, EVC+4.0, PB5.0, embedded systems,Snakegame目录目录31.绪论51.1引言51.2国内外现状分析51.3本文的主要内容与论文结构71.3.1论文的主要工作内容71.3.2论文章节结构72.系统软硬件平台概述82.1 PXA270-S270处理器介绍82.2 WindowsCE.NET操作系统概述92.2.1什么是WindowsCE.NE92.2.2 Windows CE.NET的功能特点92.3 WindowsCE.NET的相关开发工具102.3.1 PlatformBuilders5.0介绍102.3.2 EmbeddedVisual C+ 4.0介绍113.系统概要设计113.1系统的整体结构113.1.1 系统的定制113.1.2 程序的编写113.2系统的硬件构建133.3系统的软件组成143.3.1 系统所需要的软件143.3.2 ClassWizard(类向导)简介144.系统的详细设计164.1 定制winCE内核164.1.1 winCE内核定制原理以说明164.1.2 winCE内核定制174.2 贪吃蛇游戏详细设计开发174.2.1 贪吃蛇游戏的可行性分析174.2.2 贪吃蛇游戏的需求分析184.2.3 贪吃蛇游戏的总体功能图194.2.4 贪吃蛇游戏的实现的功能模块194.2.5 贪吃蛇游戏的主要功能设计思路204.2.6 贪吃蛇游戏程序流程图224.2.7 贪吃蛇游戏主要类及成员变量224.2.8 贪吃蛇游戏界面的实现244.2.9 贪吃蛇游戏主要代码说明254.3 winCE内核下载274.3.1 烧写系统所需资源274.3.2 烧写系统步骤275.系统整合及测试345.1 系统整合345.2 系统整体测试355.2.1 系统规则测试355.2.2 按键功能测试365.2.3 分数和关卡测试40总结与展望41致谢42参考文献和注释43外文资料翻译及原文44翻译原文44翻译译文511.绪论1.1引言贪吃蛇游戏是一种非常经典的计算机小游戏,在过去的计算机发展的几十年中,贪吃蛇游戏深受广大儿童的喜爱,它的开发标志着以计算机为基础的小游戏的领域的来临,特别是广大儿童小时候玩的游戏机上的赛车,贪吃蛇游戏,乒乓球等,这些小游戏都深受着人们的喜爱。与此同时,随着计算机技术的快速发展,嵌入式技术也相应的取得了突破性的进展,嵌入式设备正日益渗透到人们的日常生活中,默默地为我们提供连接和服务,嵌入式设备往往是一个资源有限的系统,它们追求的是在有限的价格上满足一定的功能性要求。通常它们采用那些功能并不强大的CPU,这也是开发者不得不尽可能地压缩嵌入式系统性能的原因。最初的嵌入式设备是单一用途的,它们拥有各自独特的显示方式和用户界面,而今天它们变成了类似PC系统。它们可以运行很多相同的应用程序。针对嵌入式资源的限制,如何将对资源有很大依赖性的大规模的计算,成功的移植到嵌入式系统中,并能使其达到类似与在PC 上计算的效果。针对此问题,必须对原适用于PC上的游戏引擎做出修改,才能使其在嵌入式系统中成功的运行。因此需要在特定的环境下开发相应的游戏,这样才能在以后下载到相应的板子上进行效果演示。目前嵌入式行业在中国得到了有效发展,但是规模相应的还与国际上有很大的差距,因此,为了能够让大家对基于嵌入式wince开发游戏得到有效的理解,本论文以贪吃蛇游戏为详细的例子,完整的阐述了嵌入式游戏的开发流程,以及演示结果,还有中间特别要注重的难点疑点的解析。本文对具体的开发流程都做了很详细的阐述,从编码到仿真,然后在定制系统内核,最后进行应用程序的下载,完成贪吃蛇游戏的具体效果演示,论文的后续都做了相当详细的解释。1.2国内外现状分析 进入90年代以来,以计算机技术、通信技术和软件技术为核心的信息技术取得了更加迅猛的发展,各种装备与设备上嵌入式计算与系统的广泛应用大大地推动了行业的渗透性应用。嵌入式系统被描述为“以应用为中心、软件硬件可裁剪的、适应应用系统对功能、可靠性、成本、体积、功耗等严格综合性要求的专用计算机系统”,由嵌入式硬件和嵌入式软件两部分组成。硬件是支撑,软件是灵魂,几乎所有的嵌入式产品中都需要嵌入式软件来提供灵活多样、而且应用特制的功能。由于嵌入式系统应用广泛,嵌入式软件在整个软件产业中占据了重要地位,并受到世界各国的广泛关注;如今已成为信息产业中最为耀眼的“明星”之一。据美国市场调研厂商In-Stat/MDR公司于2004年8月11日表示,随着数字机顶盒在欧洲和亚洲的不断普及,来自嵌入在数字机顶盒中的软件(包括嵌入式操作系统和中间件)的销售在未来4年内将增长2倍。到2008年,来自数字机顶盒操作系统和应用服务器软件的许可收入将由今年的2.7亿美元增长到8亿美元。数字机顶盒在欧洲和亚洲的日益普及将带动这一增长。到2008年,40%的收入来自欧洲,剩下的将由亚洲和美国“瓜分”。由于诸多原因,我国计算机行业未能赶上世界范围软件技术发展的前几次机遇;当我们意识到应组织发展本国软件产业时,微软已在PC软件上处世界垄断地位,我们只得在软件汉化小范围徘徊,对计算机系统软件虽偶有出击,总难冲出重围。二十一世纪之初,微软王国已从登峰造极走向地位下滑的后PC时代。后PC时代,既非PC信息设备大显神通的时代,嵌入式系统正是非PC设备的主体,由于其应用推广、领域特色突出,谁也无力独吞这一市场。互联网技术在世界范围的扩展和中国通信事业的高速发展,已为我国开发嵌入式产品造就了广大市场,此外我国是人口大国,可以开发软件智力优势。因此,我国软件同仁应该牢牢抓着这一大好机遇,找准出击点,在IP软件、JAVA应用和无线网络等新一轮嵌入式软件技术上,下大力,冲刺一翻,这样定能使我国软件技术大上一个台阶,从而为发展我国经济做出应有的贡献。嵌入式软件产业发展迅猛,已成为软件体系的重要组成部分。嵌入式系统产品正不断渗透各个行业,嵌入式软件作为包含在这些硬件产品中的特殊软件形态,其产业增幅不断加大,而且在整个软件产业的比重日趋提高。2003年全球嵌入式软件市场规模达到346亿美元,2003年中国市场规模达到188亿元,预计到2006年嵌入式软件市场规模将突破400亿元大关,2003-2006年均复合增长率将达到30%。新一轮汽车、通讯、信息电器、医疗、军事等行业的巨大的智能化装备需求拉动了嵌入式软件及系统的发展。同传统的通用计算机系统不同,嵌入式系统面向特定应用领域,根据应用需求定制开发,并随着智能化产品的普遍需求渗透到各行各业。随着硬件技术的不断革新,硬件平台的处理能力不断增强,硬件成本不断下降,嵌入式软件已成为产品。1.3本文的主要内容与论文结构 随着嵌入式领域的发展,各种嵌入式小游戏现阶段已经成为一种流行,基于此,本论文在嵌入式技术背景下,开发基于嵌入式wince 5.0的贪吃蛇游戏。WinCE操作系统作为内核、PB(platformBuilder5.0)、EVC(EmebededVisua1C+)作为开发工具。PXA270-S开发试验箱作为嵌入式硬件基础。1.3.1论文的主要工作内容1. 利用PB(PlatformBuilder5.0)开发工具定制wincE内核映像,完成winCE内核映像的编译和移植工作。2. 研究在EVC(EmebededVisua1C+)开发工具下,贪吃蛇游戏的开发思想,以及贪吃蛇游戏程序编写。3. 学会向PXA270-S开发板烧写wince系统,通过实验指导书上的说明,按照步骤学会烧写wince系统,并且能够熟练掌握PXA270-S开发箱的烧写过程。1.3.2论文章节结构 第一章是论文的绪论部分,包括引言部分和论文章节介绍,还有有关嵌入式领域的国内外发展情况简介。第二章介绍了本次设计使用到的软硬件平台,分析这些软硬件开发平台的特点和优势,为系统的实现提供技术支持。第三章介绍了利用Windows CE.net 5.0制作嵌入式贪吃蛇游戏的整体设计,论文本章介绍了项目开发的基本框架,以及整体开发流程。第四章是对系统的详细设计,介绍了系统的整体结构组成,硬件平台的搭建以及预期实现的应用功能,详细介绍了WindowsCE.llet内核的生成和SDK的开发。其中内核生成包含了内核定制、编译和加载,本次设计也专门定制了符合开发平台的windowsCEnet内核。详细介绍了贪吃蛇游戏的设计与开发,通过EVC(EmebededVisua1C+)开发工具采用VC+语言进行编写贪吃蛇游戏的代码,主要讲述贪吃蛇游戏的设计思路,代码核心,以及采用的库函数等说明。第五章是讲述了如何向PXA270-S开发板烧写wince系统,本章是基于自己在设计过程中遇到的问题而进行的详细解析和烧写步骤。第六章是测试与结果并且在板子上执行贪吃蛇的最终能够结果。2.系统软硬件平台概述2.1 PXA270-S270处理器介绍PXA270处理器属于ARM处理器,既可以把它看做一个公司的名字,也可以认为是对一系列微处理器的通称。ARM公司不具体制造产品,只向生产厂商出售芯片设计技术的授权。目前,有30多家半导体公司成为ARM公司的合作伙伴,其中包括Iniel、IBM、LG、半导体、NEC、SONY、菲利浦和国民半导体这样的大公司。因此,基于ARM技术的微处理器己经遍及工业控制、无线通信、消费电子、网络系统等各类市场,占据了犯位RISC微处理器绝大多数的市场份额。基于ARM体系结构的处理器当前包括以下几个系列:ARM7、ARMg、ARMgE、ARM10E、SeeureCore、ARMll、Intel的Xscale、StrongARM。其中本次设计采用的PXA270处理器就是Iniel公司开发的xscale系列的处理器。624MHz处理器是比较高级的处理器,可在312MHz、4i6MHZ、520MHZ和等不同的时钟频率下运行ll。PXA270处理器内置了Intel的无线MMX技术,能够显著的提升多媒体性能,此外PXA270也包含了Intol的SpeedsteP技术,能够根据需要动态调节cPu的性能,真正实现了低功耗,高性能。同其他XScale处理器一样,支持多种嵌入式操作系统,如Linux、windows、winCE、Nueleus、 Palm05、vxworks等。另外,在处理器内部结构上,主系统总线将 Inielxseale内核、LCD控制器、USB主机控制器、DMA控制器和存储控制器连接起来,其中存储控制器控制处理器与各种外部存储器的通信,片内外设通过DMA控制器与处理器通信。2.2 WindowsCE.NET操作系统概述2.2.1什么是WindowsCE.NEWincdows CE.NET是一种抢先式多任务并具有很强大功能的32位操作系统,支持X86、PowerPC、ARM、MIPS等多种CPU构建的硬件平台,是微软专门为信息设备,消费类电子,移动应用,嵌入式应用等非PC类领域从头设计的战略性操作系统产品。Windows CE.NET中的CE包含了比较深刻的含义,其中C代表了消费类(Consumer)、袖珍(Compact)、(Connection)通信能力和伴侣(Companition),E 代表了电子产品(Electronics)。微软公司早在1996年就推出了Windaows CE.NET 1.0版本之后连续推出了Windaows CE.NET 2.0、Windaows CE.NET 3.0、Windaows CE.NET 4.0、Windaows CE.NET 4.2以及Windaows CE.NET 5.0,目前最高的版本是Windaows CE.NET 6.0。而在Windows CE之后的.NET技术又名为“.NET COMPACT FRAMWORK” 精简型的.NET Framwork,是微软将近年来的桌面型操作系统上的.NET架构技术运用在系统资源有限的嵌入式产品中来。2.2.2 Windows CE.NET的功能特点Microsoft Windows CE .NET是Windows CE 3.0的后续产品,它不仅是一个功能强劲的实时嵌入式操作系统,而且提供了众多强大工具,允许用户利用它快速开发出下一代的智能化小体积连接设备。借助于完善的操作系统功能和开发工具,Windows CE .NET为开发人员提供了构建、调试和部署基于Windows CE.NET 的定制设备所需的一切特性。平台开发工具Platform Builder是一个完全集成的开发环境(IDE),并且包括一个软件开发工具包(SDK)导出工具。因此它具有比之前版本更有效的特点,具体来说详见以下特点。Windows CE .NET 支持Microsoft eMbedded Visual C+和MicrosoftVisual Studio .NET,为面向Microsoft.NET Compact Framwork的Web 服务和应用程序开发提供了一个完整的开发环境。利用这些工具,开发人员可以迅速开发出能够在最新硬件上运行各种应用程序的智能化设计。作为最新版本,Windows CE .NET 对Windows CE 先前版本的强大功能进行了进一步的扩充和丰富,它提供了:对安全和可伸缩网络的支持、得到增强的实时处理能力、更为优秀的性能表现、更为丰富的多媒体和Web浏览功能、与个人计算机、服务器、Web服务以及其它设备更为出色的互操作性。2.3 WindowsCE.NET的相关开发工具2.3.1 PlatformBuilders5.0介绍 PlatformBuilder5.0是微软公司提供的基于WinCENET平台下嵌入式操作系统定制的集成开发环境,提供了所有进行设计、创建、编译、下载和测试WinCENET操作系统平台的工具。开发人员可以通过交互式的环境来设计和定制内核、选择系统特性,然后进行编译和测试。同时,还可以进行驱动程序开发和应用程序项目的开发等等。具体来说,PB5.0提供的主要开发特性如下:1.创建开发平台向导和BSP开发向导:用来引导开发人员去创建一个新的系统平台或BSP(板卡支持包)。2.目录:列出了可以用来定制一个平台的操作系统特性。3.导出向导:可以向其他用户导出自定义的目录特性。4.导出SDK向导:用于导出一个定制的软件开发工具包(SD殉。5.依赖性检查:能保证支撑一个平台的所需特性可以被包含到操作系统镜像中来。6.WindowsCETest(测试工具包):用于驱动程序的测试。7.内核测试器:用于测试一个定制的操作系统镜像。8.应用程序测试器:用于在一个定制的操作系统镜像上测试应用程序。9.仿真器(Emulator):允许用户在开发工作站上对平台和应用程序进行测试,简化了系统开发流程,缩短了开发时间。10.远程工具:可执行同基于 windowsCE.NET的目标设备有关的各种测试任务和信息收集任务。2.3.2 EmbeddedVisual C+ 4.0介绍 EmbeddedVisualc+是微软公司提供的开发嵌入式应用软件的平台,它是visualC+的子集,EVC和Windows下的VC在界面、语法和开发流程基本一样,EVC的编程也是WINN32的编程,支持WIN API中的大部分函数,熟悉VC的人很快就会使用EVC进行开发。EVC和PlatformBuilder的不同之处在于 PlatformBuilder针对的是操作系统的定制,编译目标是整个05的内核,虽然 PlatformBuilder也能开发应用程序,但是这些应用程序是作为整个系统的一部分而存在,编译时还是以一个操作系统为单位;EVC针对的是应用软件开发,特定操作系统的SDK就已经为它提供了系统的运行环境,因此它编译的单位是一个应用程序。因此,针对于应用程序的开发、编译和测试,在EVC中完成往往是高效的、合理的。3.系统概要设计3.1系统的整体结构3.1.1 系统的定制首先所需winCE系统内核的定制,通过PlatformBuilders5.0来定制自己所需要的系统内核,根据自己程序设计时所用到的win32程序的接口,以及用到的库函数,类库,各种所需要的驱动,例如USB驱动,屏幕显示驱动,鼠标驱动,键盘驱动等,来定制自己所需要的系统内核,系统不必过于繁琐,达到自己所需要的功能即可,因为我们所强调的是嵌入式,嵌入式是以方便为前提的,定制的系统是以简洁方便为目的的,具体的定制细节我们在第四章将会详细介绍。3.1.2 程序的编写其次是针对自己定制的系统编写项目程序,我们在此过程中用到的工具是Microsoft eMbedded Visual C+,我们在EVC环境下,选择标准SDK环境,然后在标准模拟器上进行编写调试程序。程序的名称是贪吃蛇游戏,采用的是VC+语言,MFC微软基础类库环境的单文档窗体。程序的大体思想是:采用一个二维数组(这里我们采用的是24*24的整形数组)作为贪吃蛇游戏的背景地图,数组的每个值代表地图上每个小矩形,而每个小矩形连续组成贪吃蛇的蛇身,在程序初始化窗体时候调用这个函数,刷新出程序的背景地图;程序贪吃蛇的蛇身用一个Cpoint 类的一位连续数组,Cpoint类是一个结构体类型,结构体类型里包含着两个整形参数x和y 代表的是屏幕窗体上的某一个对应的点的坐标,我们在得知点的坐标的同时,就明确了对应二维数组地图上的某个矩形区域的坐标值,这样用Cpoint类的一位数组我们可以存放蛇身的每个节点的坐标,于此同时,我们在程序snake类里面设定蛇头和蛇尾的坐标变量、蛇身长度的坐标变量,这样在程序调用Timer()系统函数定时刷新时,每次刷新只需要改变蛇头和蛇尾的坐标即可,每次刷新时,根据舍身前进方向判断下一个头节点的坐标值,然后添加到Cpoint类定义的蛇身节点,而蛇尾节点坐标值是前一个状态的倒数第二个节点,然后调用库函数FillSolildRect()函数刷新头节点为蛇的自身颜色,而尾节点是地图背景颜色,这样我们在外观看起来就是蛇身前进的效果。那么,我们怎么判断蛇头前进的方向呢?这个问题的解决方式是,在定义snake类的同时,定义了一个私有变量Direction为蛇动态前进的方向,而每次Timer()刷新时,动态的根据键盘响应函数来判断前进方向,并同时给Direction赋值,这样每次刷新的同时Direction为四个方向(上、下、左、右)其中的一个方向,蛇头前进的方向在此时已经确定,这样就动态的根据输入的键盘值来改变蛇的前进方向,我们就可以控制蛇的移动啦!最后,在蛇动态效果显示出来的同时,我们也应该考虑到蛇的生命周期问题,就是蛇在什么情况下会死亡,在什么情况下会得分,在什么情况下会自身长度增加等一系列相关问题。这里我们首先考虑到一个十分重要的问题,就是蛇遇到食物(这里我们用一个蓝色的小矩形表示蛇的食物苹果)同时,将食物吃掉并且动态自身增加一节,这里我们是这样实现的:首先实现的是食物的随机出现,在某个食物被吃掉的同时,我们要立即产生出下一个食物的坐标,我们用到的是一个随机函数产生出下一个食物的坐标,但是这个坐标必须仅仅在023之间,因为我们地图采用的是一个24维的二维数组表示的,地图每个横坐标纵坐标的范围是023,但是,这里注意一个特别重要的问题,就是每次随机产生的食物坐标不能出现在当前蛇身上,我们必须加一个判断,如果产生的坐标在蛇身上,必须重新生成,一直到产生一个在地图上并且不在蛇身上的食物坐标为止;当蛇头坐标的下一个前进方向的坐标和食物坐标相等时,我们在这里是将食物坐标改变成当前蛇头坐标,并且蛇尾坐标不变,蛇身长度增加一个单位,这样就动态的现实出来蛇吃食物自身增加一个的效果。生命周期的问题:在我们解决上述功能的同时,我们不得不考虑一个问题,那就是蛇的生命周期问题,就是蛇在身条件下会死亡,死亡的结果会是怎么样,我们在这里做了一个判断,就是蛇遇到地图周围的墙和遇到自己的身体蛇会死亡,生命周期结束,于此同时记录下当前玩家所得的分数,比较分数来判断玩家的能力程度,那么我们怎么判断蛇头撞墙和蛇头撞到自身呢?继承上一个问题的解决方式,蛇身用到的是Cpoint类的一个一维数组表示,地图用到的是一个二维数组表示,当蛇头节点的左边和二维数组边界值相等时,或者蛇头坐标变为蛇自身的坐标时,蛇死亡,生命周期结束,关闭定时器函数Timer(),初始化游戏界面,记录当前分数,重新等待游戏开始。到此为止,贪吃蛇游戏的大概思路就解决了。3.2系统的硬件构建 系统硬件平台采用的是PXA270-S实验开发板,开发板提供了多种CPU内核共大家使用,具体的内核信息详细如下:ARM:支持的处理器包括ARM720T、ARM920T、ARM1020T、StrongARM、Xscale。MIPS:支持的处理器包括MIPS II/32(带浮点运算)、MIPS II/3(不带浮点运算)、MIPS16、MIPS IV/64(带浮点运算)、MIPS IV/6(不带浮点运算)。SHx:支持的处理器包括SH-3、SH-3 DSP、SH-4。X86:支持的处理器包括486、586、Geode、Pentium I/II/III/IV。通过大家浏览这几种内核大家已经知道了PXA270-S实验开发版的强大功能,在这里,我们程序所用的是ARM内核,我们所用的环境是WINCE系统,我们在此基础上进行的程序的开发和设计。另外,本次程序的设计对硬件的性能要求比较要,主要包括一下几个方面:强大的CPU处理运算能力;强大的数据存储能力;强大的显示能力 ;能提供多种外设接口;具有高性能、低功耗、小尺寸、易于升级等;具有较大的兼容性和扩展性;便于程序的测试和内核的下载。经考虑我们在这里采用的是PXA270-S中ARMV4Irel开发平台,并在其基础上配备了丰富的硬件资源,但本次设计使用到的硬件资源只包括带触摸屏的液晶显示屏、USB接口、网线接口、lash、NandFlash、Rs232串口、ADC、JlAG接口等。其中NorFlash用于装载Boot,主要负责系统硬件的初始化和操作系统的引导,当操作系统被装载到SDRAM中之后,将系统控制权交给操作系统;NandFlash用于存储操作系统内核镜像、文件系统和大量的数据图象;带触摸屏的液晶显示用来显示程序运行的结果和触摸控制游戏。3.3系统的软件组成3.3.1 系统所需要的软件PC机操作系统Win2000或以上,EVC4.0开发环境,WinCE500标准SDK,PXA270-S平台SDK。3.3.2 ClassWizard(类向导)简介 在我们运用EVC4.0进行编写程序时,我们不可避免的会遇到各种各样的类的调用,因此,之前我们必须学会运用类向导来进行程序的设计。从广义上讲,ClassWizard与类的关系和AppWizard与应用程序的关系是相同的。ClassWizard 通过生成实现CPP文件,以及一个带有合适存根函数的头文件,来帮助你开始编写新类。用实际的代码填充这些函数则是你的责任。ClassWizard在四个区域提供帮助,它可以为如下目的生成代码:从接收消息或管理控件窗口的许多MFC 类中的一个派生出来的新类,处理消息的成员函数。OLE/ActiveX方法、属性和事件触发。用于输入到对话控件中的数据交换和验证函数。ClassWizard识别和支持MFC基类,它们用某种方法与用户进行交互。除了少数例外的类(例如CRecordSet和CHttpServer)之外,基类都是由CCmdTarget派生而来,它们能够对消息作出反应,并能够管理对话框中的控件。大约有50多个MFC基类,你可以使ClassWizard从这样的类中创建一个派生类。访问ClassWizard不能从一个空的项目中访问ClassWizard。项目中至少应有一个RC文件,即使这个RC文件是空的。一旦RC文件被附加到项目之中(AppWizard可以自动完成这项工作),你就可以通过从View菜单中选择ClassWizard命令来调用ClassWizard对话了。关于ClassWizard,有两点不大明显。首先,它的服务完全是可选的。你在开发自己项目的过程中,如果自己愿意的话,从头至尾,都可以不处理ClassWizard。其次,你可以使用ClassWizard向MFC项目添加新类,即使该项目不是AppWizard创建的。ClassWizard编译项目的类的数据库,并将它存储在与项目同名且扩展名为CLW的一个文件之中。如果你一直都是ClassWizard为项目创建新类,那么CLW文件可以保持最新。不过,在VisualC+中,你与ClassWizard之间并不是全有或全无的关系,你可以自由地编写新类,或者从当前项目之外的其他源文件中复制代码。在一个类不是以ClassWizard为起源的情况下,有一个简单的方法可以更新CLW数据库。在你使用了Project菜单上的Add To Project命令向项目添加新类源文件之后,请删除CLW文件,并再次调ClassWizard。Visual C+将检测到数据库不存在了,并提供重新创建它的服务。ClassWizard对话图(下图)显示了主ClassWizard对话框。之所以叫它为“主”对话,是因为ClassWizard可以在20多种不同的对话中显示自己,究竟在哪一个对话中显示需取决于环境。图中的对话充当着到ClassWizard主入口的角色,将其命名为MFC ClassWizard,以便于让你记住它所处理的仅仅是MFC类。ClassWizard不能帮助你创建从除了支持MFC类之外的任何类中派生的类;对于带有任何其他基的类,你必须使用文本编辑器或Insert菜单上的New Class命令从零开始自己编写代码。4.系统的详细设计4.1 定制winCE内核4.1.1 winCE内核定制原理以说明 定制winCE内核之前,我们首先要做的准备工作详见下:首先是安装PB工具,我们这里之前已经提及,所以就不再过多叙述。在实际操作中,我们主要有如下的注意事项: (1)推荐安装在分区根目录下。并且分区需要保持足够大的硬盘空间,一般需要5G以上,PB和运行在PC的WinCE环境需要安装在一个分区内。安装时间通常较长,网络安装的版本同时依赖网络的速度。 以下是微软推荐的最小配置,低于该配置PB工具将不能正常安装或使用;处理器:至少266MHz Pentium II以上;推荐使用500MHz Pentium III以上CPU;操作系统:Windows 2000 SP2以上;Windows XP;内存要求:至少128M;使用模拟器时候至少192M(不包括操作系统本身占用的内存)硬盘:典型安装时,选择一种处理器需至少1.7G空间;若要包含Platform Builder的完整工具组在内需要至少12G的硬盘空间。光驱:可以使用与桌面系统相兼容的CD-ROM或DVD-ROM等。 (2)在安装过程中,会提示选择处理器体系结构,务必选中ARMV4I和XSCALE两项,否则无法支持PXA270处理器。 (3)如果PC上使用的操作系统为Windows XP SP2,可能出现严重安装问题,最好不要采用Windows XP SP2,或者在微软网站上搜索相关的指导文档。安装过程中请关闭系统防火墙。然后需要建立系统最基本的配置。打开PB 5.0,首先导入我们提供的BSP包。导入BSP的过程很简单,只需要安装光盘中提供的up270classic_BSP文件就可以实现,可以由指导教师提前完成。安装完,会发现在系统的WINCE500Platform路径下出现“Up_PXA270cl”文件夹,这个就是安装好的BSP了。之后建立UP-TECH S2410/P270 DVP的WinCE工程,都需要建立在这个BSP的基础上。(类似地,你也可以自己构建系统自带的Mainstone II的工程,但是它不能运行在UP-TECH S2410/P270 DVP实验箱上)。4.1.2 winCE内核定制我们在编译winCE内核镜像前,需要添加特性目录(Catalog)的一些组件来定制内核,我们在本系统需要添加以下的组件:(1)添加鼠标键盘控制驱动;(2)添加USB主控制器驱动;(3)添加USB从控制器驱动(建立与PC机的Activesyn。连接需要此特性);(4)添加串口驱动;(5)添加触摸屏驱动;(6)添加IE6.0浏览器驱动;(7)添加拨号网络组件驱动;(8)添加Fat文件系统;.(9)加入对HIVE注册表的支持;(10)加入对Mediaplayer播放器;(11)加入对本地存储器中的mp3和wMA文件播放的支持。除了上述所需的添加组件外,我们还需要一些另外的组件。4.2 贪吃蛇游戏详细设计开发4.2.1 贪吃蛇游戏的可行性分析 在我进行编写贪吃蛇游戏之前,我所做的必须是可行性分析,因为一旦进行贪吃蛇游戏项目的开发,就必须保证自己在规定的时间内能够独立的完整整个程序的所有功能,而且必须是最优的,因此,在开发贪吃蛇游戏之前,我必须要做的是可行性分析。通过查找相关文档和技术支持,了解了EVC环境下的开发过程,熟悉了VC+语言的开发技巧,通过以下几个方面,进行可行性分析:1. 参考文献 :贪吃蛇游戏用户描述文档、软件工程等书,确定自己能够在自己能力范围内开发出这个贪吃蛇游戏项目。2. 功能要求:在进行整个项目开发之前,我必须要做的就是确定贪吃蛇游戏的主要功能,必须明确贪吃蛇游戏的功能,因为要进行游戏功能可行性分析,经过自己的查阅相关资料,我确定了贪吃蛇游戏的具体功能,详见后续部分详细设计。3. 性能需求:必须保证自己开发的贪吃蛇游戏能够整体尽可能做到高效快速,不占用大量的使用资源,因为我做的是一个嵌入式的游戏开发项目,必须要考虑资源使用情况,要求尽可能少用资源,在有限的资源范围内实现最大的可利用价值。4. 运行环境:PXA270-S开发板,EVC +4.0开发平台,模拟器上进行调试,经过安装软件,确定可以进行项目程序的编写。5. 界面要求:采用Windows标准界面,只需要使用键盘和鼠标。6. 完成期限,一个学期完成整个系统,包括程序的编写,硬件板子的下载,以及最终的调试,测试阶段。4.2.2 贪吃蛇游戏的需求分析编写目的:为了提高自己动手能力,完成大学阶段本科生的毕业设计,参考了很多嵌入式方面的书籍以及对VC+语言的熟练程度,我决定编写贪吃蛇游戏嵌入式项目完成自己的毕业设计。文档范围:文档包括了嵌入式技术领域的介绍,嵌入式国内外环境的探索与简介,主要从我国嵌入式领域发展的最新阶段来探讨,与国际对比得出相应发展的前景,同时,针对自身对嵌入式方面的兴趣爱好,以及自己所掌握的有限知识来对嵌入式方面的一些看法等,另外还有winCE环境的简介,以及用法,还有关于嵌入式基于winCE的开发流程的一些相关文档,还有EVC+4.0开发工具的使用方法的介绍,以及游戏的详细代码的功能简介等。游戏具有以下功能:能够实现贪吃蛇自动前线移动,也就是贪吃蛇能够“活动”的外观效果,根据相同的时间间隔,每一次将贪吃蛇自身的蛇头向前移动一个小格子,同时蛇尾向前移动一个小格子,移动方向为贪吃蛇行走的方向。对游戏中规则进行判断,当游戏中的贪吃蛇遇到墙壁和自身时,根据规则判断应为死亡,宣告当前游戏结束,记录当前游戏的分数值。根据每次所得的分数值不同,判断玩家的能力,来显示玩家的效果。贪吃蛇的相关操作,根据键盘上的上、下、左、右四个键来控制贪吃蛇游戏的前进方向,同时,根据空格键来开始游戏,空格键在游戏开始时,还有另外一个功能,那就是暂停游戏功能,这样玩家就可以根据暂停游戏来处理当前需要处理的事情,当游戏结束时,按回车键就可以重新开始游戏的初始化界面。果实的出现,每次贪吃蛇吃到果实时,于此同时,应该出现一个果实在地图中,那么怎么实现这个功能呢?我采用的是随机函数出现果实的横纵坐标,然后判断这个店得坐标是不是在蛇身上,如果是那么就得重现出现上一个过程,直到食物的坐标不在蛇身上为止。这样就出现了果实。游戏分数的统计方法,当贪吃蛇吃到果实时,玩家的分数就应该随着吃到的果实而增加,增加的规则就是贪吃蛇的身体长度乘以等级 得到分数。这样就可以根据游戏的难度对应的得到分数。4.2.3 贪吃蛇游戏的总体功能图 贪吃蛇功能图4.2.4 贪吃蛇游戏的实现的功能模块在贪吃蛇游戏中,本论文设计的贪吃蛇游戏的大致可以分为五个功能模块,以下是对这五个模块的具体介绍:游戏规则模块功能设计:游戏规则包括蛇的运动范围、蛇的生命周期问题、分数统计、关卡判断。其中蛇的运动范围是一个24*24的数组呢,蛇运动的地图抽象成为一个24*24的二维整形数组,每个数组值代表一个小方块的坐标值,这样,蛇只能在规定好的二维数组内运动,当蛇遇到数组边界值(我们在这里抽象成为上、下、左、右四个边界,其中上边界坐标值中纵坐标都是0,横坐标任意,下边界为纵坐标是24,同理横坐标不变,左边界为横坐标为0,纵坐标任意,同理右边界为横坐标为24,纵坐标任意)时,宣告蛇生命周期结束,贪吃蛇死亡,这个是第一个规则;另外,当蛇自己吃到自己身体的某一部分时,也宣告游戏结束,在程序里通过循环判断蛇头下一个前进方向的节点是不是蛇身上的某一部分节点即可,如果是那么蛇死亡,否则继续运行游戏。分数统计算法的思想是每次蛇吃到一个果实时,相加的分数为蛇身长度乘以一个定值来记录分数,这样可以随着游戏难度的增加,分数值也随之增多。关卡功能设置通过与分数相关联而体现的,初始化游戏为第一关,分数为0,当玩家玩到一定的分数时(例如是500)关卡加一,变为第二关,同时,蛇前进速度相应增加一个等级,这样就实现了不同关卡,不同速度的贪吃蛇,从而增加了游戏的难度。蛇身操作模块功能的设计: 首先得到当前按下的移动方向,此时有两种情况需要考虑,如果遇到的是一个果实,则蛇身长度增加一个单位,表现在程序中是存放蛇身数组值增加一位,如果没遇到果实,则不断更新蛇身数组中的相应坐标值。按键功能模块:游戏是通过键盘按键控制,其中空格键控制游戏开始和暂停,上、下、左、右键控制蛇头前进方向,回车键控制游戏重新开始,程序内部是通过消息响应函数实现。主界面地图模块:贪吃蛇游戏的主界面是通过窗体初始化事件进行实现的,运用MFC类库中的FillSoldRect ()库函数通过程序内部的二维数组进行绘制地图,地图然后可以改变,这样在游戏运行后就会在窗体上显示游戏初始化的效果。帮组模块:通过窗体的调用另外一个帮组窗体显示游戏的规则,游戏的计分公式,游戏的玩法等等。4.2.5 贪吃蛇游戏的主要功能设计思路地图初始化界面设计思路:Windows MFC在程序执行时,会动态的调用窗口资源,在程序自动生成函数中,添加相应的函数实现程序初始化界面,本程序的具体思路是:程序在开始执行时会调用BOOL CSnakeDlg:OnInitDialog()函数,进行窗体的初始化,我们在此窗体客户区求得窗体长和宽的最小值,记录在WIDTHOFBRICKS和HEIGHTOFBRICKS 变量中,因为我们设计的游戏地图是一个24*24的小方格组成的矩形区域,因为我们在这需要求出小矩形的长度和高度,在这,根据WIDTHOFBRICKS和HEIGHTOFBRICKS 等分为24部分,求出每个小矩形的边长存放在HEIGHTOFBRICKS和WIDTHOFBRICKS变量中,然后调用绘图函数void CSnakeDlg:MyDraw()进行地图的绘制,这样在程序执行时,就动态绘制了贪吃蛇游戏地图。果实出现的设计思路:首先,果实时通过一个坐标记录下在地图上的位置,通过绘图函数绘制这点坐标的小矩形,程序中采用的是随机数生成果实出现的坐标。其次,程序中必须增加一个判断,判断当前生成的果实坐标是否在贪吃蛇身体范围内,如果当前生成的坐标在蛇身坐标范围内,那么必须重新随机产生食物坐标直到不在为止。如果坐标不在蛇身坐标范围内,则把坐标位置返回给调用对象。程序中本模块具体功能是在void InitFoods()函数中实现。具体代码参见程序主要代码说明。更新蛇身的具体的设计思路:程序执行的步骤,首先接受玩家按下方向键消息,并把当前要前进的方向保存在方向变量snake_direct中,记录贪吃蛇下一个状态前进的方向,通过方向判断头节点下一个节点的坐标值。先判断下一个节点坐标值是不是符合游戏规则之内(也就是判断蛇是不是死亡)的坐标,此时调用IS_GameOver()函数判断游戏是否结束,如果结束宣告游戏结束,否则程序继续执行;如果下一个节点的坐标值与当前食物节点坐标值(snake_foods)相同,则调用void MyDraw()函数重绘蛇头和蛇尾节点颜色,因为此时蛇吃到一个果实,蛇身长度加一,动态的现实,将果实重绘为蛇身颜色(红色),蛇尾节点颜色不变,蛇身变量长度snake_body_length自加,动态记录当前蛇头节点snake_head和蛇尾节点snake_rear的坐标;如果下一个节点不是食物节点,重绘蛇头蛇尾颜色,蛇身长度不变,动态的蛇头和蛇尾节点坐标改变。分数统计和改变关卡的设计思路:在本程序设计的贪吃蛇游戏中,分数统计采用的是如下公式进行的统计,贪吃蛇游戏分数 = 贪吃蛇蛇身长度 * 定制变量(本程序设置的是整形常量5),这样可以动态的根据蛇身长度不同,每次得到果实的分数也就随之不同,体现了游戏难度的差异;另外游戏关卡的设计与分数统计有着密切的关系,关卡是通过玩家玩得的分数而自动晋级的,换句话说,例如:游戏的初始化分数为0,游戏关卡为第一关,当玩家玩到1000分数时根据程序内部定义,关卡增加一级,同时,游戏难度也要随之增加,体现在程序中就是,定时器变量刷新间隔要变小,也就是类中定义的TimerInterval变量要随之相应的变小。这样,在玩家看来,蛇的刷新速度就会变得越来越快。按键响应功能的设置思路:贪吃蛇游戏的控制通过键盘按键来控制,所以必须实现键盘响应功能,程序规定,上、下、左、右按键控制贪吃蛇的前进方向,空格键控制游戏开始和暂停
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论