基于嵌入式wince开发的贪吃蛇游戏内容摘要:

它快速开发出下一代的智能化小体积连接设备。 借助于完善的操作系统功能和开发工具, Windows CE .NET为开发人员提供了构建、调试和部署基于 Windows 的定制设备所需的一切特性。 平台开发工具 Platform Builder是一个完全集成的开发环境( IDE),并且包括一个软件开发工具包( SDK)导出工具。 因此它具有比之前版本更有效的特点,具体来说详见以下特点。 Windows CE .NET 支持 Microsoft eMbedded Visual C++174。 和 MicrosoftVisual Studio174。 .NET,为面向 Compact Framwork的 Web 服务和应用程序开发提供了一个完整的开发环境。 利用这些工具,开发人员可以迅速开发出能够在最新硬件上运行各种应用程序的智能化设计。 作为最新版本, Windows CE .NET 对 Windows CE 先10 前版本的强大功能进行了进一步的扩充和丰富,它提供了:对安全和可伸缩网络的支持 、 得到增强的实时处 理能力 、 更为优秀的性能表现 、 更为丰富的多媒体和Web浏览功能 、 与个人计算机、服务器、 Web服务以及其它设备更为出色的互操作性。 的相关开发工具 介绍 是微软公司提供的基于 WinCENET 平台下嵌入式操作系统定制的集成开发环境,提供了所有进行设计、创建、编译、下载和测试WinCENET 操作系统平台的工具。 开发人员可以通过交互式的环境来设计和定制内核、选择系统特性,然后进行编译和测试。 同 时,还可以进行驱动程序开发和应用程序项目的开发等等。 具体来说, 提供的主要开发特性如下 : BSP 开发向导 :用来引导开发人员去创建一个新的系统平台或 BSP(板卡支持包 )。 :列出了可以用来定制一个平台的操作系统特性。 :可以向其他用户导出自定义的目录特性。 SDK 向导 :用于导出一个定制的软件开发工具包 (SD 殉。 :能保证支撑一个平台的所需特性可以被包含到操作系统镜像中来。 (测试工具包 ):用于驱动程序的测试。 :用于测试一个定制的操作系统镜像。 :用于在一个定制的操作系统镜像上测试应用程序。 (Emulator):允许用户在开发工作站上对平台和应用程序进行测试,简化了系统开发流程,缩短了开发时间。 :可执行同基于 的目标设备有关的各种测试任务和信息收集任务。 11 EmbeddedVisual C++ 介绍 EmbeddedVisualc++是微软公司提供的开发嵌入式应用软件的平台,它是visualC++的子集, EVC 和 Windows 下的 VC 在界面、语法和开发流程基本一样,EVC 的编程也是 WINN32 的编程,支持 WIN API 中的大部分函数,熟悉 VC 的人很快就会使用 EVC 进行开发。 EVC 和 PlatformBuilder 的不同之处在于 PlatformBuilder 针对的是操作系统的定制,编译目标是整个 05 的内核,虽然 PlatformBuilder 也能开发应用程序,但是这些应用程序是作为整个系统的一部分而存在,编译时还是以一个操作系统为单位 ; EVC 针对的是应用软件开发,特定操作系统的 SDK 就已经为它提供了系统的运行环 境,因此它编译的单位是一个应用程序。 因此,针对于应用程序的开发、编译和测试,在 EVC 中完成往往是高效的、合理的。 概要 设计 系统的整体结构 系统的定制 首先所需 winCE 系统内核的定制,通过 来定制自己所需要的系统内核,根据自己程序设计时所用到的 win32 程序的接口,以及用到的库函数,类库,各种所需要的驱动,例如 USB 驱动,屏幕显示驱动,鼠标驱动,键盘驱动等,来定制自己所需要的系统内核,系统不必过于繁琐,达到自己所需要的功能即可,因为我们所强调的 是嵌入式,嵌入式是以方便为前提的,定制的系统 是以简洁方便为目的的,具体的定制细节我们在第四章将会详细介绍。 程序的编写 其次是针对自己定制的系统编写项目程序 ,我们在此过程中用到的工具是Microsoft eMbedded Visual C++,我们在 EVC 环境下,选择标准 SDK 环境,然后在标准模拟器上进行编写调试程序。 程序的名称是《贪吃蛇游戏》,采用的是VC++语言, MFC 微软基础类库环境的单文档窗体。 12 程序的大体思想是: 采用一个二维数组(这里我们采用的是 24*24 的整形数组) 作为贪吃蛇游戏的背 景地图, 数组的 每 个值代表地图上 每个小矩形,而每个小矩形连续组成贪吃蛇的蛇身,在程序初始化窗体时候调用这个函数,刷新出程序的背景地图;程序贪吃蛇的蛇身用一个 Cpoint 类的一位连续数组, Cpoint 类是一个结构体类型,结构体类型里包含着两个整形参数 x 和 y 代表的是屏幕窗体上的某一个对应的点的坐标,我们在得知点的坐标的同时,就明确了对应二维数组地图上的某个矩形区域的坐标值,这样用 Cpoint 类的一位数组我们可以存放蛇身的每个节点的坐标, 于此同时,我们在程序 snake 类里面设定蛇头和蛇尾的坐标变量、蛇身长度的坐 标变量,这样在程序调用 Timer()系统函数定时刷新时, 每次刷新只需要改变蛇头和蛇尾的坐标即可,每次刷新时,根据舍身前进方向判断下一个头节点的坐标值,然后添加到 Cpoint 类定义的蛇身节点,而蛇尾节点坐标值是前一个状态的倒数第二个节点,然后调用库函数 FillSolildRect()函数刷新头节点为蛇的自身颜色,而尾节点是地图背景颜色,这样我们在外观看起来就是蛇身前进的效果。 那么,我们怎么判断蛇头前进的方向呢。 这个问题的解决方式是,在定义snake 类的同时,定义了一个私有变量 Direction 为蛇动态前进的 方向,而每次Timer()刷新时,动态的根据键盘响应函数来判断前进方向,并同时给 Direction赋值,这样每次刷新的同时 Direction 为四个方向(上、下、左、右)其中的一个方向,蛇头前进的方向在此时已经确定, 这样就动态的根据输入的键盘值来改变蛇的前进方向,我们就可以控制蛇的移动啦。 最后,在蛇动态效果显示出来的同时,我们也应该考虑到蛇的生命周期问题,就是蛇在什么情况下会死亡,在什么情况下会得分,在什么情况下会自 身长度增加等一系列相关问题。 这里我们首先考虑到一个十分重要的问题,就是蛇遇到食物 (这里我们用 一个蓝色的小矩形表示蛇的食物苹果 )同时,将食物吃掉并且动态自身增加一节, 这里我们是这样实现的: 首先实现的是食物的随机出现,在某个食物被吃掉的同时,我们要立即产生出下一个食物的坐标,我们用到的是一个随机函数产生出下一个食物的坐标,但是这个坐标必须仅仅在 0—23 之间,因为我们地图采用的是一个 24 维的二维数组表示的,地图每个横坐标纵坐标的范围是0—23,但是,这里注意一个特别重要的问题,就是每次随机产生的食物坐标不13 能出现在当前 蛇身上,我们必须加一个判断,如果产生的坐标在蛇身上,必须重新生成 , 一直到产生一个在地图上 并且不在蛇身上的食物坐标为止;当蛇头坐标的下一个前进方向的坐标和食物坐标相等时, 我们在这里是将食物坐标改变成当前蛇头坐标, 并且蛇尾坐标不变, 蛇身长度增加一个单位, 这样就动态的现实出来蛇吃食物自身增加一个的效果。 生命周期的问题: 在我们解决上述功能的同时,我们不得不考虑一个问题,那就是蛇的生命周期问题, 就是蛇在身条件下会死亡,死亡的结果会是怎么样,我们在这里做了一个判断,就是蛇遇到地图周围的墙和遇到自己的身体蛇会死亡,生命周期结束,于此同时记录下当前玩家所得的分数,比较分数来判断玩家的能力程度, 那么我们怎么判 断蛇头撞墙和蛇头撞到自身呢。 继承上一个问题的解决方式,蛇身用到的是 Cpoint 类的一个一维数组表示,地图用到的是一个二维数组表示,当蛇头节点的左边和二维数组边界值相等时,或者蛇头坐标变为蛇自身的坐标时,蛇死亡,生命周期结束,关闭定时器函数 Timer(),初始化游戏界面,记录当前分数,重新等待游戏开始。 到此为止,贪吃蛇游戏的大概思路就解决了。 系统的硬件构建 系统硬件平台采用的是 PXA270S实验开发板 , 开发板提供了多种 CPU内核共大家使用,具体的内核信息详细如下: ARM:支持的处理器包括 ARM720T、 ARM920T、 ARM1020T、 StrongARM、Xscale。 MIPS:支持的处理器包括 MIPS II/32(带浮点运算)、 MIPS II/3(不带浮点运算)、MIPS1 MIPS IV/64(带浮点运算)、 MIPS IV/6(不带浮点运算)。 SHx:支持的处理器包括 SH SH3 DSP、 SH4。 X86:支持的处理器包括 48 58 Geode、 Pentium I/II/III/IV。 通过大家浏览这几种内核大家已经知道了 PXA270S 实验开发版的强大功能,在这里,我 们程序所用的是 ARM 内核,我们所用的环境是 WINCE 系统,我们在此基础上进行的程序的开发和设计。 另外,本次程序的设计对硬件的性能要求比较要,主要包括一下几个方面: 14 ① 强 大的 CPU 处理运算能力 ; ② 强大的数据存储能力 ; ③ 强大的显示能力 ; ④ 能提供多种外设接口 ; ⑤ 具有高性能、低功耗、小尺寸、易于升级等 ; ⑥ 具有较大的兼容性和扩展性 ; ⑦ 便于程序的测试和内核的下载。 经考虑我们在这里采用的是 PXA270S 中 ARMV4Irel 开发平台, 并在其基础上配备了丰富的硬件资源,但本次设计使用到的硬件资源只包括带触摸 屏的液晶显示屏、 USB 接口、网线接口、 lash、 NandFlash、 Rs232 串口、 ADC、 Jl’AG接口等。 其中 NorFlash 用于装载 Boot,主要负责系统硬件的初始化和操作系统的引导,当操作系统被装载到 SDRAM 中之后,将系统控制权交给操作系统 ;NandFlash 用于存储操作系统内核镜像、文件系统和大量的数据图象 ; 带触摸屏的液晶显示 用来显示程序运行的结果和触摸控制游戏。 系统的软件组成 系统所需要的软件 PC机操作系统 Win2020或以上, , WinCE500标准 SDK,PXA270S平台 SDK。 ClassWizard(类向导)简介 在我们运用 ,我们不可避免的会遇到各种各样的类的调用,因此 , 之前我们必须学会运用类向导来进行程序的设计。 从广义上讲,ClassWizard与类的关系和 AppWizard与应用程序的关系是相同的。 ClassWizard 通过生成实现 CPP文件,以及一个带有合适存根函数的头文件,来帮助你开始编写新类。 用实际的代码填充这些函数则是你的责任。 ClassWizard在四个区域提供帮助,它可以为如下 目的生成代码 : 从接收消息或管理控件窗口的许多 MFC 类中的一个派生出来的新类 , 处理消息的成员函数。 OLE/ActiveX方法、属性和15 事件触发。 用于输入到对话控件中的数据交换和验证函数。 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主入口的角色,将。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。