基于ARM9开发板的扫雷游戏设计_第1页
基于ARM9开发板的扫雷游戏设计_第2页
基于ARM9开发板的扫雷游戏设计_第3页
基于ARM9开发板的扫雷游戏设计_第4页
基于ARM9开发板的扫雷游戏设计_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业论文题目基于ARM9开发板的扫雷游戏设计学院电气信息学院专业自动化班级0901学号200901020130学生姓名段志勤导师姓名万琴完成日期2013年6月7日毕业设计题目基于ARM9开发板的扫雷游戏设计学院电气信息学院专业自动化班级0901学号200901020130学生姓名段志勤导师姓名万琴完成日期2013年6月7日诚信声明本人声明1、本人所呈交的毕业设计(论文)是在老师指导下进行的研究工作及取得的研究成果;2、据查证,除了文中特别加以标注和致谢的地方外,毕业设计(论文)中不包含其他人已经公开发表过的研究成果,也不包含为获得其他教育机构的学位而使用过的材料;3、我承诺,本人提交的毕业设计(论文)中的所有内容均真实、可信。作者签名日期年月日毕业设计(论文)任务书题目基于ARM9开发板的扫雷游戏设计姓名段志勤系别电气信息学院专业自动化班级0901学号200901020130指导老师万琴职称教研室主任黄峰、汪超、刘星平一、基本任务及要求以ARM9为核心,设计一个移动平台的扫雷游戏。1要求实现PC机上扫雷的基本功能,点到空白是递归,点到雷时自动爆炸,并且所有的雷自动爆炸,点到其他图片翻开图片。用C对鼠标事件,递归函数的编写。用QT的界面完成扫雷游戏的界面。2要求把在PC机上写好的扫雷游戏移植到ARM9开发板上,实现移动设备上的扫雷游戏设计。利用LINUX和QT的兼容性移植到到ARM9开发板。二、进度安排及完成时间(1)1月14日至3月4日查阅资料为毕业设计做准备。(2)3月5日至3月15日撰写文献的开题报告。(3)3月18日至4月1日进行毕业实习,撰写毕业实习报告。(4)4月2日至4月7日了解课题的基本要求。(5)4月8日至4月14日进行程序的编写。(6)4月15日至4月21日对程序改进和修改。(7)4月22日至4月28日对ARM9开发板的移植进行调式。(8)4月29日至5月12日程序的调试。(9)5月13日至5月20日QT应用的移植。(10)5月21日至5月24日撰写前言,目录,摘要,绪论。(11)5月25日至5月28日撰写系统软件设计和程序调试。(12)5月29日至6月1日撰写系统硬件部分设计和QT移植。(13)6月2日至6月5日撰写参考文献,致谢,附录。基于ANM9开发板的扫雷游戏设计目录摘要IABSTRACTII第一章概述111扫雷简介112ARM9简介113LINUX系统简介114QT简介215C简介216课题研究的背景和意义2第二章总体设计思路421设计总体思路422扫雷游戏主要功能523设计的软件724设计的环境825设计的语言826设计的平台9第三章软件部分设计1231视图和场景的设计12311视图的设计12312场景的设计13313视图中控件和动作的设计1432STL数据的设计16321STL的设计16322数据的设计1833STL图片的设计19331图片的选取和加载19332图片坐标的设计2234功能程序块的设计23341鼠标事件23342图片交换的设计25343爆炸和递归的设计25344初始化的设计26第四章硬件部分的设计2741硬件介绍27411开发板简介27412CPU简介28413USB接口29414电源系统及接口29415复位系统30316FLASH存储系统3042开发平台的设计31421交叉编译环境的搭建32422LINUX内核配置和编译3343QT应用的移植34第五章调试与测试36总结39参考文献41附录扫雷程序及注释42基于ARM9开发板的扫雷游戏设计I基于ARM9开发板的扫雷游戏设计摘要随着时代的进步,现在已进入移动互联网时代,智能手机,平板电脑等移动设备越来越受到人们的欢迎。移动设备因为其的方便性,移动设备将是未来通信,上网,娱乐的主体。在人们紧张的工作学习之余,在外出旅游之余,可以随时随地拿出移动设备玩一盘游戏给自己带来欢乐与放松,也可以放松自己的心情,缓解自己的工作和学习压力。扫雷是很多操作系统自带的一款小游戏,几乎每个电脑使用者都接触过这款游戏,并且深爱着这款小游戏。扫雷游戏是非常经典的一款小游戏,实现它的方法很多,可以用C,C,VB,JAVA等很多语言。本设计主要是以QT作为开发软件,在LINUX系统中用C设计并开发的一款扫雷游戏,最后移植到ARM9开发板上,以ARM9开发板作为测试和运行扫雷游戏,实现移动设备上的扫雷游戏。本设计的扫雷游戏功能基本上和WINDOW系统上的相同。利用QT软件的良好的图形界面做出扫雷游戏的图形界面,利用C的方便和QT强大的类库来实现扫雷的基本功能,利用QT的兼容性强以及LINUX系统良好的移植性能来移植到ARM9开发板上来实现移动设备上的扫雷游戏。论文首先介绍了C,QT,LINUX系统,ARM9等本设计中用到的东西。然后介绍了总体设计思路,在LINUX系统下以及QT软件中用C分模块设计出扫雷游戏的每个模块,最后移植到ARM9开发板上,实现本次设计。关键字扫雷、QT、LINUX、ARM9基于ANM9开发板的扫雷游戏设计IIMINESWEEPINGGAMEDESIGNOFARM9BASEDDEVELOPMENTBOARDABSTRACTALONGWITHTHEPROGRESSOFTHETIMES,ANDNOWHASENTEREDTHEERAOFMOBILEINTERNET,SMARTPHONES,TABLETSANDOTHERMOBILEDEVICESMOREANDMOREGETTHEWELCOMEOFPEOPLEMOBILEDEVICESBECAUSEOFITSCONVENIENCE,MOBILEDEVICESWILLBETHEFUTURECOMMUNICATION,THEINTERNET,THEMAINBODYOFENTERTAINMENTINTHETENSEWORKANDSTUDY,TRAVEL,CANTAKEOUTMOBILEDEVICESANYTIMEANDANYWHERETOPLAYAGAMETOCHEERMYSELFANDRELAXATION,CANALSORELAXTHEMOOD,REDUCETHEPRESSUREONTHEIRWORKANDSTUDYMINESWEEPINGISMANYOPERATINGSYSTEMCOMESWITHASMALLGAME,ALMOSTEVERYCOMPUTERUSERSAREEXPOSEDTOTHEGAME,ANDDEEPLYINLOVEWITHTHISLITTLEGAMEMINESWEEPINGGAMEISACLASSICGAME,ALOTOFWAYSFORIT,YOUCANUSEC,C,VB,JAVA,ETCALOTOFLANGUAGETHISDESIGNMAINLYISTHEQTASTHEDEVELOPMENTSOFTWARE,ALINUXSYSTEMUSINGCDESIGNANDDEVELOPMENTOFAMINECLEARANCEGAME,FINALLYPORTEDTOTHEARM9DEVELOPMENTBOARD,WITHARM9DEVELOPMENTBOARDASATESTANDRUNTHEMINESWEEPER,REALIZEMINESWEEPINGGAMEONAMOBILEDEVICETHISDESIGNOFMINECLEARANCEGAMEFUNCTIONANDWINDOWSYSTEMISBASICALLYTHESAMEUSINGTHEQTSOFTWAREGOODGRAPHICALINTERFACEMADEMINESWEEPERGRAPHICALINTERFACE,CONVENIENTUSINGCANDQTPOWERFULCLASSLIBRARYTOREALIZETHEBASICFUNCTIONOFMINE,USINGQTSTRONGCOMPATIBILITYANDGOODTRANSPLANTATIONLINUXSYSTEMPERFORMANCETOTRANSPLANTTOTHEARM9DEVELOPMENTBOARDUPMINESWEEPINGGAMEONAMOBILEDEVICE基于ANM9开发板的扫雷游戏设计IIIPAPERFIRSTINTRODUCESTHEC,QT,LINUXSYSTEM,THISDESIGNUSEDINTHINGSSUCHASTHEARM9THENINTRODUCESTHEOVERALLDESIGNIDEAS,USINGCANDQTSOFTWARERUNSUNDERLINUXSYSTEMMODULEDESIGNEACHMODULETHATMINESWEEPER,FINALLYPORTEDTOTHEARM9DEVELOPMENTBOARD,REALIZETHEDESIGNKEYWORDSMINESWEEPING、QT、LINUX、ARM9基于ANM9开发板的扫雷游戏设计1第一章概述随着计算机与网络的普及,人们生活水平的提高,移动设备越来越成为人们生活中不可或缺的一部分,移动设备可以随身携带,在外出旅游,繁忙的工作之余,可以随时随地给人带去欢乐与放松。11扫雷简介扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏,不久之后,“方块”被改写成了游戏“RLOGIC”,在“RLOGIC”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。两年后,汤姆安德森在“RLOGIC”的基础上又编写出了游戏“地雷”,由此奠定了现代扫雷游戏的雏形。1981年,微软公司的罗伯特杜尔和卡特约翰逊两位工程师在WINDOWS31系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。这款游戏的玩法是在一个99初级,1616中级,1630高级,或自定义大小的方块矩阵中随机布置一定量的地雷初级为10个,中级为40个,高级为99个。由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。如果玩家翻开的方块有地雷,则游戏结束。扫雷游戏是WINDOWS操作系统自带的一款小游戏,在过去的几年里,WINDOWS操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。本次的毕业设计我将利用QT作为开发工具,开发一款类似的“扫雷游戏”,并把扫雷游戏移植到ARM开发板上,实现移动设备上的扫雷游戏。12ARM9简介ARM是ADVANCEDRISCMACHINES的简称,ARM9系列处理器是英国ARM公司设计的主流嵌入式处理器,主要包括ARM9TDMI和ARM9ES等系列,新一代的ARM9处理器,通过全新的设计,采用了更多的晶体管,能够达到两倍以上于ARM7处理器的处理能力。这种处理能力的提高是通过增加时钟频率和减少指令执行周期实现的。13LINUX系统简介LINUX是一种自由和开放源代码的类UNIX操作系统。定义LINUX的组件是LINUX内核,该操作系统内核由林纳斯托瓦兹在1991年10月5日首次发布。严格来讲,术语基于ARM9开发板的扫雷游戏设计2LINUX只表示操作系统内核本身,但通常采用LINUX内核来表达该意思,LINUX则常用来指基于LINUX内核的完整操作系统,包括GUI组件和许多其他实用工具。由于这些系统工具和库主要由GNU计划提供,自由软件基金会提议将该组合系统命名为GNU/LINUX。LINUX是一个领先的操作系统,可以运行在服务器和其他大型平台之上,如大型机和超级计算机。世界上500个最快的超级计算机90以上运行LINUX发行版或变种,最快的前10名超级计算机运行的都是LINUX操作系统。LINUX也广泛应用在嵌入式设备上,如手机、平板电脑、路由器、电视和电子游戏机等。在移动设备上广泛使用的ANDROID操作系统就是创建在LINUX内核之上。14QT简介QT以作为一个跨平台框架而著称,QT使用“一次编写,随处编译”的方式为开发跨平台的图形用户界面应用程序提供了一个完整的C应用程序开发框架。QT容许程序开发人员的单一源码树来构建可以运行在不同平台下的应用程序的不同版本,这些平台包括从WINDOW98到VISTA,MACOSX、LINUX、SOLARIS、HPUX以及其他很多基于X11的UNIX。许多QT库和工具也都是QT/EMBEDDEDLINUX的组成部分。QT/EMBEDDEDLINUX是一个可以在嵌入式LINUX上提供窗口系统的产品。15C简介C是一种语言,仅仅是它的语法、特性、标准类库就已经是一门非常高深的课程,C设计成静态类型、和C同样高效且可移植的多用途程序设计语言。设计成直接的和广泛的支援多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。设计成尽可能与C兼容,籍此提供一个从C到C的平滑过渡。避免平台限定或没有普遍用途的特性。不使用会带来额外开销的特性。设计成无需复杂的程序设计环境。16课题研究的背景和意义现在已进入移动物联网时代,人们已经不满足于用电脑来娱乐,电脑携带不方便,不能随时随地带着电脑。所以移动设备越来越受到人们的喜爱。移动设备也被称为行动装置(英语MOBILEDEVICE)、流动装置、手持装置(HANDHELDDEVICE)等,是一种口袋大小的计算设备,通常有一个小的显示萤幕,触控输入,或是小型的键盘。因为通过它可以随时随地访问获得各种信息,这一类设备很快变得流行。诸如手提电脑和智能手机之类的移动计算设备一起,PDA代表了新的计算领域。移基于ANM9开发板的扫雷游戏设计3动设备包括掌上游戏机、移动电话、智能手机、平板电脑。移动设备能随时随地玩游戏或者做其他事情。可以让我们在紧张的工作之余能随时放松自己的心情。通过研究本课题来熟悉了解移动设备上的软件开发。经过大学四年的学习,我对理论知识有了一定的了解和认知,本次的毕业设计便是将大学所学的理论知识与实践相结合,同时也是对所学知识的检查,希望通过本次的毕业设计使自己在程序的开发和设计上有新的认识并能有所提高,对于我们以后工作能力的培养具有重要意义。也让我们更加了解移动设备上的软件开发。基于ARM9开发板的扫雷游戏设计4第二章总体设计思路扫雷游戏英文名称为MINESWEEPER,属于益智类游戏。通过鼠标即可操作游戏。游戏特点为操作简单,易于上手。本章主要介绍扫雷的总体思路设计,包括扫雷游戏设计模块和主要功能,开发平台、开发软件以及开发的环境。21设计总体思路本设计分模块设计出扫雷的每一个部分。第一部分使用QT软件的VSIVIEW视图、SCENE场景、ITEM道具图形界面设计出扫雷的基本界面,即打开扫雷游戏出现的界面。然后利用QT的类库和C编程把SCENE加到VIEW上。第二部分利用C的STL完成扫雷底层的数据结构,即一个X行Y列的数据结构,类似于二维数组。1代表雷,N08代表周围有N个雷。再利用QT的类库和C编程把STL的数据和STL的ITEM结合起来,实现扫雷的底层数据功能。第三部分再利用C的STL创建一个X行Y列的ITEM,在网上选择好图片,把图片这个道具加场景中,实现扫雷的上层图片功能。把STL数据和ITEM结合起来,加到场景中。第四部分用C编写程序实习扫雷的基本功能。第五部分再利用QT的兼容性好,把扫雷游戏移植到ARM9开发板上运行测试。如图21所示。图21扫雷模块图STL数据STL图片VSI图形界面功能程序块视图及场景PC机上扫雷ARM开发板移动平台扫雷基于ANM9开发板的扫雷游戏设计522扫雷游戏主要功能(1)提示区上侧显示菜单栏,可以选择雷的数目和整个区域的大小。(2)提示区下面位置按钮用于开局;(3)单击鼠标左键于未知区域,如果未知区域有雷,游戏结束,显示所有的地雷;如果没有雷,则显示一张数字的图片,代表周围八格的雷数,如果周围没雷,则再查看周围八个区域是否有雷,没雷用递归一直翻开图片。直到有雷为止,并显示周围雷的数目;(4)单击鼠标右键于未知区域,则显示一个标志,将其标识有雷。在该位置再次单击右键则取消;(5)将雷全部扫完后,会出现一个提示框,显示游戏胜利。如图22所示。开局为初始化雷数以及区域大小以及重新开始游戏,默认为三行五列,雷数数目为四个。可以单击选项来调整区域的大小和雷的数目。退出为退出游戏。图23为已经把雷全部找出来的图片。图24为扫雷游戏的总体流程图。图22扫雷界面的初始化图23扫雷成功的界面基于ARM9开发板的扫雷游戏设计6开始左键右键空白是否是雷递归数字是否扫完成功初始化设定是否重新开始结束标志右键取消标志图24总体流程图否是否是是否基于ANM9开发板的扫雷游戏设计723设计的软件本设计主要用到QT40作为开发软件。因为QT40具备以下一些优点1支持平台广泛QT应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置,其支持的平台有QT/WINDOWS(WINDOWSXP,2000,NT4,ME/98)、QT/MACMACOSX、QT/X11LINUX,SOLARISHPUX,IRIX,AIX等。可移植性能高。2封装多QT对不同平台的专门QPI进行了专门的封装(文件处理、网络等)。可保护程序的数据以及变量,防止程序出错。3面向对象QT具有模块设计和注重软件构件或元素的可重用性的特点。4构件支持QT提供信号(SIGNAL)和插槽(SLOT)概念,这是一种类型安全的方法,它允许回调,冰支持对象之间在彼此不知道对方信息的情况下进行合作,这使得QT非常适合于真正的构件编程。5友好的联机帮助QT提供了大量的联机参考文档,有超文本HTML方式,也有UNIX帮助手册和补充说明,并且对于初学者,其中的指南将一步步介绍如何进行QT编程。6便利性由于QT是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,QT定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题。7丰富的API函数QT为专业应用提供了大量的函数,在QT的API中含有大约250个C类,大多数的类都是GUI专有的。8可用户化外观QT支持主题,基于QT的应用程序能够在WINDOWS外观、MOTIF外观,以及其他一些用户化主题之间切换。9完整的一套组件工具QT编程的基本模块称之为组件,组件是用户界面的组成部分,QT含有用来创建专业外观的用户界面所需要的所有组件。基于ARM9开发板的扫雷游戏设计824设计的环境本次设计主要用LINUX系统作为开发环境,因为LINUX具有如下优点真正开放的操作系统。也许,LINUX的最大卖点就是它所给与客户的选择性。从硬件到支持再到LINUX的发行版,你可以有很多的选择。你可以在一个价值200美元的旧PC机上运行LINUX系统,你也可以将它作为一个LPAR罗辑分区运行在价值数百万美元的P595IBMP系列服务器SERVER网络资源下载上你需要在RHEL4或SLES9之间作出选择,你甚至能够在IBM主机上运行LINUX系统。使用LINUX,你不再会与硬件分销商发生冲突。尽管UNIX也被定义为一个开放的系统,但现实是,你通常会与一个硬件供应商捆绑在一起。LINUX是一个真正的开放系统。LINUX是一套免费使用和自由传播的类UNIX操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。LINUX继承了UNIX以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它主要用于基于INTELX86系列CPU的计算机上,也可运用在其他芯片上。LINUX的低成本、强大的定制功能以及良好的移植性能,使得LINUX在嵌入式系统方面也得到广泛应用。由于LINUX内核可裁剪,且免费,并且其在世界范围内,有强大的技术支持,所以在得到了飞速发展。25设计的语言本次设计主要运用C编写程序,C具备如下一些优点C设计成静态类型、和C同样高效且可移植的多用途程序设计语言。C设计成直接的和广泛的支持多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。C设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。C设计成尽可能与C兼容,籍此提供一个从C到C的平滑过渡。C避免平台限定或没有普遍用途的特性。C不使用会带来额外开销的特性。C设计成无需复杂的程序设计环境。C的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。基于ANM9开发板的扫雷游戏设计9C在一定程度上可以和C语言很好的结合,甚至目前大多数C语言程序是在C的集成开发环境中完成的。C相对众多的面向对象的语言,具有相当高的性能。C引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括MFC、QT、WXWIDGETS就是使用的C,本设计就是采用QT来实现功能。本设计主要建立五个类,每个类为一个源文件。通过类与类之间的调用来实现底层数据域上层图片的结合,通过类与类之间的调用来实现初始化的设定。下图列出了各个类以及类与类之间的组合关系。如图26所示图26各个类之间的组合关系26设计的平台本设计主要应用ARM9作为开发平台,把扫雷游戏从PC机上移植到ARM开发板上运行测试,实现移动设备的扫雷游戏。本设计运用MINI2440开发板。MINI2440是一款真正低价实用的ARM9开发板,是目前国内性价比最高的一款学习板;它采用SAMSUNGS3C2440为微处理器,并采用专业稳定的CPU内核电源芯片和复位芯片来保证系统运行时的稳定性。MINI2440的PCB采用沉金工艺的四层板设计,专业等长布线,保证关键信号线的信号完整性。MINI2440的众多先进特性,可以概括为1第一款被LINUX社区广泛支持的国产2440开发板自从LINUX2631开始,MINI2440被正式加入LINUX官方内核2第一款在LINUX下支持万能USB摄像头的2440开发板同类产品至今仍在使用近乎绝迹、拍摄效果奇差的中星微摄像头,并且没有图形界面的应用3第一款统一采用支持EABI标准交叉编译器的开发板同类产品仍在使用拼凑的各个版本的编译器,导致开发效率低下,并且不利于初学者入门掌握4第一款提供齐全BSP基于LINUX2629当前为LINUX26322和WINDOWSCE60的开发板,并全面配有图形界面实用应用程序同类产品的部分硬件只是各摆设,MINESDIALOGCPPMAINWIDOWCPPSWEEPMINESSCENECPPCELLITEMCPPFIELDCPP基于ARM9开发板的扫雷游戏设计10并且还在盗用友善之臂早期的命令行测试代码5第一款支持NET35和腾讯QQ的2440开发板2009年10月,WINDOWSCE60补丁RELEASE3发布6第一款可以让用户无需编程,即可自由简单定制WINDOWSCE开机画面的开发板,并且可在10秒内极速启动系统同类产品的WINDOWSCE系统启动时间一般在30秒甚至70秒7第一款完美支持USB烧写更新LINUXSUPPORTYAFFS2和WINDOWSCE50/60的开发板,并且支持整片NANDFLASH备份到PC,真正适合批量生产同类产品尚无备份功能8第一款实现WINCE/LINUX图形界面均可使用CMOS摄像头预览并拍照的开发板同类产品尚无此功能9第一款公开所有BSP源代码含LINUX和WINDOWSCE的开发板齐全的BSP让初学者可以了解更多的底层,让真正做开发的人只需关注上层应用10第一款内核含WINCE和LINUX同时支持大页和小页NANDFLASH的开发板,这样新老用户均可享用最新的软件,并且使用方式相同同类产品尚无此特性11第一款在WINDOWSCE和LINUX下通过简单直观的图形界面,就可设置各种程序开机自动运行的开发板同类产品尚无此功能12MINI2440目前是国内零售销量最多的2440开发板,靠口碑相传及朋友间互相介绍,MINI2440已经被众多用户称赞和认同如图27所示;基于ANM9开发板的扫雷游戏设计11图27ARM9开发板基于ARM9开发板的扫雷游戏设计12第三章软件部分设计C是一种面向对象的语言,同时又兼容C面向过程的优点。软件部分共包含了7个类,每个类为一个源文件,再加上MAIN函数,总共8个源文件。通过类与类之间的调用来实现扫雷游戏的功能。软件部分的设计包括视图及场景,STL数据,STL图片,程序功能块四个模块,在本章将详细对四个模块进行设计。31视图和场景的设计311视图的设计视图是一个游戏的主窗口,由于扫雷游戏有界面,菜单等选项,所以新建一个带QT控件的工程。选择继承基类QMAINWINDOW,我们给这个类取名叫MAINWINDOW,就会生成一个MAINWINDOWCPP的源文件和MAINWINDOWH的头文件。QMAINWINDOW为QT软件里面的一个C类,是QT的GUI程序里面常的顶层窗口,类MAINWINDOW继承了QMAINWINDOW类,QMAINWINDOW类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口,会自动建立一个UI的界面文件,即扫雷游戏的主窗口。工程建立好之后打开工程的UI文件,如下图31所示。图31UI界面如图中“在这里输入”可以输入“菜单”、“帮助”、“退出”等控件。同时也会自动生成一个MAINC的源文件,源文件中的程序如下QAPPLICATIONAARGC,ARGVMAINWINDOWWWSHOW基于ANM9开发板的扫雷游戏设计13RETURNAEXECW为MAINWINDOW类定义的一个对象,SHOW为MAINWINDOW类中的一个函数,为展示主窗口的意思,当运行程序的时候WSHOW为向用户展示出游戏的界面。当关闭游戏时,RETURNAEXEC会自动返回一个0,同时程序运行结束。如图32所示图32运行的视图此图即为游戏的视图,称为VIEW。312场景的设计视图设计好了之后接下来就是设计场景,即SCENE。场景是加在视图之上的界面,即扫雷的区域。一个视图中可以加多个场景,每个场景是相互独立,互不干扰的。所有东西都是建立在场景之上的,程序如下所示头文件中定义如下UIMAINWINDOWUISWEEPMINESSCENESCENEQGRAPHICSVIEWVIEWSWEEPMINESSCENE、QGRAPHICSVIEW都为QT中的C类。源文件中程序如下UISETUPUITHISVIEWNEWQGRAPHICSVIEWSETCENTRALWIDGETVIEWSCENENEWSWEEPMINESSCENEVIEWSETSCENESCENEUISETUPUITHIS中THIS指针并不是对象本身的一部分,不会影响SIZEOF对象的基于ARM9开发板的扫雷游戏设计14结果。THIS作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上THIS指针,编译器在编译的时候也是加上THIS的,它作为非静态成员函数的隐含形参,对各成员的访问均通过THIS进行。这句程序的意思为设置本UI界面作为UI界面。VIEWNEWQGRAPHICSVIEW,SCENENEWSWEEPMINESSCENE为在内存中开辟一段空间来存放视图和场景。SETCENTRALWIDGETVIEW,VIEWSETSCENESCENE是设置好游戏的视图和场景的意思。313视图中控件和动作的设计在游戏中我们能看到菜单栏有一些“菜单”、“帮助”、“退出”等控件,点击控件就可以退出,重新开始游戏,查看版本信息等功能。打开UI界面,在界面中的“在这里输入”中输入你想要设计的控件,本设计选择“菜单”,“帮助”两个控件,同时设计“选项”,“退出”,“开局”,“关于”等几个动作,“菜单”和“帮助”为主控件,“开局”,“选项”,“退出”为“菜单”主控件中的动作,点击“菜单”我们就能看到下面三个动作,这三个动作为功能动作,“开局”动作为开始游戏的意思,“选项”动作为我们设置游戏的行和列,“退出”动作为退出游戏。“关于”为“帮助”下的动作,打开“关于”可以看到此游戏的版本号和信息。在UI界面的下方我们可以看到控件和动作的信息,我们应该把动作与游戏结合起来,在UI界面的下方列出了动作,双击动作,会看到如图33所示的界面。33控件设计的界面图中文本为动作的名称。对象名称为程序中的名称,因为QT的程序对中文的支持低,同时不支持中文路径,所以得用英文名称。工具提示为我们在游戏时看到的名字。图标可以为每个动作选择一张图片作为图标,同时我们可以拖动图标放到菜单栏下面的快捷键栏,因为“开局”这动作在游戏中用得比较频繁,所以我们为开局设计一个基于ANM9开发板的扫雷游戏设计15快捷图标。下面快捷键可以为每个动作设计一个快捷键。如图34所示。图34控件的展示菜单栏下面为快捷键栏,我们把开局的快捷图标拖到快捷键栏,点击图标就可以开局。控件设计好之后接下来就是怎么把控件和程序结合起来。如图35所示,35UI界面中的控件信息图35为UI界面下面的动作信息,我们右键点击动作然后选择“转到槽”,就会弹出一个如图36所示的对话框。图36选择信号的对话框我们选择TRIGGERED信号。这样就为此动作自动设置了信号槽。在程序的头文件的类中会自动生成PRIVATESLOTS的成员,程序如下所示PRIVATESLOTSVOIDON_ACTIONOPTION_TRIGGERED基于ARM9开发板的扫雷游戏设计16VOIDON_ACTIONEXIT_TRIGGEREDVOIDON_ACTIONABOUT_TRIGGEREDVOIDON_ACTIONSTART_TRIGGERED同时会在源文件中会自动生成此四个函数。我们用程序编写函数的功能就可以把动作的功能实现。我们将在34程序功能块中再介绍。32STL数据的设计321STL的设计STL数据是扫雷游戏最底层的数据,是控制扫雷功能的核心数据。用数字1代表雷,数字0代表空格,周围没有雷的意思,数字18为代表周围有18个雷的意思。再把底层数据和上层的图片结合起来就形成了扫雷的基本机构。当我们点击一张图片是,如果图片下面的是数字0,表示你点中了雷,然后雷全部爆炸,如果下面是数字0,则用函数递归自动把周围的图片翻开,知道翻到有数字为止。如果下面是数字18,则只翻开此图片,代表周围18个雷。我们用C中的容器来实现底层的数据结构,C中的容器类包括“顺序存储结构”和“关联存储结构”,前者包括VECTOR,LIST,DEQUE等;后者包括SET,MAP,MULTISET,MULTIMAP等。若需要存储的元素数在编译器间就可以确定,可以使用数组来存储,否则,就需要用到容器类了。C中容器类有很多个,我们用VECTOR容器,VECTOR容器是连续存储结构,每个元素在内存上是连续的,支持高效的随机访问和在尾端插入/删除操作,但其他位置的插入/删除操作效率低下;先建立一个类FIELD,会自动生成FIELDCPP的源文件和FIELDH的头文件,然后在FIELD类中建立一个名叫CELLS的VECTOR类STL容器,程序如下TYPEDEFVECTORCELLCOLUMNTYPEDEFVECTORCELLMATRIXCELLMATRIXCELLSINTWIDTHINTHEIGHTINTMINESTYPEDEF声明,简称TYPEDEF,为现有类型创建一个新的名字,或称为类型别名,在结构体定义,还有一些数组等地方都大量的用到。我们先声明一个INT型的VECTOR单列的容器,取类型别名为CELLCOLUMN,类似于数组中的一维数组。因为扫雷游戏是基于ANM9开发板的扫雷游戏设计17一个二维的图形界面,所以我们得创建一个二维的数据。接下来声明一个多列的容器,即容器中包含容器,声明一个CELLCOLUMN型的容器,取别名为CELLMATRIX,类似于二维数组。VECTORCELLS是用类VECTOR定义一个CELLS的对象。这样一个多容器就定义好了。WIDTH为扫雷游戏界面的宽,HEIGHT为扫雷游戏界面的高,MINES为扫雷游戏中雷的个数。如图37所示37底层数据的排版图中每一列为一个单列的容器,把几个单列的容器组合起来就组成多列的容器。VOIDINITCELLS函数为容器扩容,即我们需要一个多大的容器来存放数据,函数程序如下FORINTX0X0基于ARM9开发板的扫雷游戏设计22TYPEDEFVECTORITEMMATRIXITEMMATRIXM_ITEM但此容器的类型不为INT型,为CELLITEM型。同32把容器扩容。在SWEEPMINESSCENE类中用FIELD类做为数据类型定义一个名叫FILED的变量,当调用变量FIELD变量是就会自动调用FIELD类的构造函数,见32,而FIELD的构造函数会自动调用FIELD类中的INITCELLS和DEPLOYMINES函数,这样就可以把底层数据和上层图片结合起来。上层图片的数量和底层数据的数量必须相匹配,调用FIELD类中的宽和高来为图片的容器扩容。图片的容器建好之后要把每张图片的坐标设置好,程序如下STATICINTCWM_ITEM00BOUNDINGRECTWIDTHSTATICINTCHM_ITEM00BOUNDINGRECTHEIGHTM_ITEMXYSETPOSXCW,YCHADDITEMM_ITEMXYCW为每张图片的宽,CH为每张图片的高,BOUNDINGRECTWIDTH和BOUNDINGRECTHEIGHT为类中的函数,只要调用这两个函数就可以自动求出图片的高和宽了。在QT界面中规定场景的左上角为坐标(0,0)点,当设置坐标为(0,0)点时会自动把场景中的(0,0)点和图片的左上角对齐。当我们设置M_ITEMNN图片时,图片M_ITEMXY处于场景中的第X1行第Y1列,而图片M_ITEMNN的左上角应放到点(CWX,CHY)中,所以设置图片M_ITEMXY的坐标为SETPOSXCW,YCH。ADDITEMM_ITEMXY为把此图片加到场景中来。34功能程序块的设计341鼠标事件界面的图形和底层数据都设计好了,但是怎么实现扫雷的功能呢例如鼠标点击时怎么使图片变换。下面就来设计扫雷的鼠标事件,鼠标点击有三种情况,一个左击和右键,还有一种左右同时按下,由于时间关系左右同时按下在本设计中不用。如图38所示等待鼠标按下左击右击交换图片标志为雷标志为疑问取消标志右击右击左击左击基于ANM9开发板的扫雷游戏设计23图310鼠标事件流程图鼠标事件函数也是类中带的一个虚函数,虚函数不能用函数去调用,只有当鼠标动作时会自动调用鼠标左击或者右击的鼠标事件函数。鼠标事件是发生在图片上的事件,所以要在类CELLITEM执行相关的鼠标事件。每个图片道具都有几个状态初始化状态,被挖开状态,被标志为雷状态,被标志为疑问状态。当被挖开状态时此图片不再响应鼠标事件,而当标志为雷状态时此图片不再响应鼠标左键事件,只响应鼠标右键事件。我们要为每个状态设置一个标识符,用来判断此时图片的状态和改变此时图片的状态。用一个枚举类型来设置标识符,程序如下ENUMCELLITEMSTATECIS_INITIAL,/初始化状态CIS_SWEPT,/被挖空状态CIS_FLAG,/被标识为雷状态CIS_QUESTION/被标识为疑问状态每次点击一张图片时要先判断图片是在什么状态,再进行后续的操作,程序如下VOIDCELLITEMMOUSEPRESSEVENTQGRAPHICSSCENEMOUSEEVENTEVENTIFSTATECIS_SWEPTRETURNSWITCHEVENTBUTTON右击基于ARM9开发板的扫雷游戏设计24CASEQTLEFTBUTTONSWITCHSTATEBREAKCASEQTRIGHTBUTTONSWITCHSTATEBREAK当图片状态为挖空是,不执行鼠标事件,然后再判断是鼠标左击事件还是鼠标右击事件,再进行后续操作。342图片交换的设计当图片的状态标识为可执行鼠标操作是,就要根据是左击还是右击以及图片现在的状态来交换图片,在331中设计了把图片放到场景中,例如一张图片的标识为CIS_INITIAL,当响应鼠标左击事件是,我们要判断底层数据的值,如下程序所示IFNUM0SETPIXMAPBLANKELSEIFNUM0SETPIXMAPDIGITSNUMELSESETPIXMAPEXPLODESTATECIS_SWEPT每次挖开一张图片后要把此图片的标识符设为被挖空状态,不再响应鼠标事件。基于ANM9开发板的扫雷游戏设计25343爆炸和递归的设计当我们左击点开一张图片时,假设此位置是数值,只要此位置交换图片就可以了。但是当此位置是雷时,就会出现所有的雷爆炸,从而失败,所有图片都不再响应鼠标事件,而当此处是空白时,就会响应一个递归函数,自动把周围的图片打开,直到出现数字为止。也就是说此处是数值时不会影响其他图片,是雷或者空白就会影响其他图片的打开。对于一张图片来说,如果此处是雷,先要设置不再响应鼠标事件,然后交换此处图片为EXPLODE,并且判断其他图片是否为雷,是雷的话把图片交换成EXPLODE。如果此处是空白,就会调用递归把周围的空白的图片自动翻开,知道遇见数字为止。程序如下VOIDSWEEPMINESSCENESWEEPINTX,INTYSWEEPX1,Y1344初始化的设计每个人的喜好各不相同,在初始化设计中可根据每个人的喜好来设置雷区域的长和宽以及雷的个数。在前面已介绍过雷区域默认的宽为5,高为3,雷数为4。初始化设置可以自由改动这三项数值,只要雷数小于宽高就可以了。在前面控件的设计中我们设计了“选项”这个控件,当我们点击“选项”控件时会自动弹出一个对话框来让我们输入自己喜好的数值,如图311所示图311初始化的设计这属于DIALOG的设计,在前面控件设计中讲过为每个控件设计了信号槽机制。在工程下新添一个DIALOG的界面文件,在界面文件中把要弹出的对话框的形状设计好,然后把“选项”控件和DIALOG链接起来。再设计把DIALOG文本中的数值赋给底层数基于ARM9开发板的扫雷游戏设计26据的宽和高就可以了。我们假设设置宽度为10,高度为10,雷数为25,如图311所示图311扫雷的初始化设计界面此外此扫雷游戏还可以设计很多小功能,比如设计一个秒表来计算你用了多长时间,设计只要扫雷成功自动弹出一个DIALOG来提示成功,失败则弹出一个DIALOG来提示失败等等很多功能,在此不多做设计。基于ANM9开发板的扫雷游戏设计27第四章硬件部分的设计前面的设计已完成了在PC机上运行的扫雷游戏,但随着现代社会的进步,现在已进入移动互联网时代,越来越多的人不再满足于在PC机上玩游戏,而是用移动设备玩游戏,比如掌上游戏机、移动电话、智能手机、平板电脑等等。本章主要设计怎么把PC机上设计的扫雷游戏移植到移动设备上运行。41硬件介绍411开发板简介开发板如图41所示,该开发板采用三星公司的S3C2440处理器,并且有在板的64M的SDRAM内存,能完美的支持LINUX系统。其包括256M的NANDFLASH,2M的NORFLASH。并且接口资源丰富,本设计用到的接口有以太网RJ45,USBHOST,USBSLAVE,串口RS232,以及用户LED。本设计主要运用ARM开发板来做移植扫雷应用测试。如图41所示图41ARM开发板简介基于ARM9开发板的扫雷游戏设计28412CPU简介S3C2440A是韩国三星公司推出的16/32位RISC微控制器,其CPU采用的是ARM920T内核。(1)特点1)具有PLL时钟发生器,主频最高可达533M。2)内核12V供电最高400M,13V供电最高533M。3)存储器支持18V、25V、30V、33V。4)I/O均支持33V供电。5)S3C2440为单机器周期执行指令集。6)具有电源管理功能,可以使系统以普通方式、慢速方式、空闲方式和掉电方式工作,降低产品功耗。(2)内核结构采用ARM920T内核,具有16KB指令CACHE、16KB数据CACHE和存储器管理单元MMU,五级流水线,指令高速存储缓冲器(ICACHE),数据高速存储缓冲器(DCACHE)提高指令执行效率及数据存储效率,减少主存带宽和响应性带来的影响,加强的ARM体系结构MMU,用于支持WINCE、LINUX等操作系统,内部高级微控制总线(AMBA)体系结构(AMB20,AHB/APB)。(3)存储器控制器特性1)S3C2440采用总线结构管理片上外设及内存。2)S3C2440的存储器管理器提供访问外部存储器的所有控制信号。3)27位地址信号、32位数据信号、8个片选信号、以及读/写控制信号等。4)总共有8个存储器BANK(BANK0BANK7),其中,BANK0BANK5为固定128MB,BANK6和BANK7的容量可编程改变,可以是2、4、8、16、32、64、128MB,最大共1GB。BANK0可以作为引导ROM,其数据线宽只能是16位和32位,其它存储器的数据线宽可以是8位、16位和32位。5)8个存储器BANKBANK0BANK5SRAM、ROM。BANK6BANK7SRAM、ROMSDRAM。6)S3C2440支持两种启动方式NORFLASH启动,即代码直接写入NORFLASH,运行时直接在NORFLASH上运行。NANDFLASH启动方式,即代码烧到NANDFLASH中,借助片内4K的SRAM,将代码由NANDFLASH烤到SDRAM中,在SDRAM中运行。基于ANM9开发板的扫雷游戏设计29413USB接口本设计具有两种USB接口,一个是USBHOST,它和普通PC的USB接口是一样的,可以接USB摄像头、USB键盘、USB鼠标、优盘等常见的USB外设,另外一种是USBSLAVE,我们一般使用它来下载程序到目标板。原理图如下图42所示图42USB接口原理图414电源系统及接口本开发板的电源系统比较简单,直接使用外接的5V电源,通过降压芯片产生整个系统所需要的三种电压33V、18V、125V。原理图如43所示基于ARM9开发板的扫雷游戏设计30图43电源电路415复位系统本设计采用专业的复位芯片MAX811实现CPU所需要的低电平复位,原理图如图44图44复位系统316FLASH存储系统系统具备两种FLASH芯片,一种是NORFLASH芯片,型号为SST39VF1601,大小为基于ANM9开发板的扫雷游戏设计312MBYTE;另一种是NANDFLASH,型号为K9F1G08,大小为128M。S3C2440支持这两种FLASH启动系统,通过拨动开关S2,你可以选择从NOR还是从NAND启动系统。实际上一片NANDFLASH就够了,但是为了方便调试,因此还保留了NORFLASH。因为NORFLASH芯片具有地址线,有芯片内执行的特点,将程序下载带NORFLASH后,能直接在启动系统,这样就为我们的调试节省了时间。NANDFLASH不具有地址线,它有专门的控制接口与CPU相连,数据总线为8BIT,但这并不意味着NANDFLASH读写数据会很慢。大部分的优盘或者SD卡等都是NANDFLASH制成的设备。从下面的原理图314可以看出,NORFLASH采用了A1A22总共22条地址总线和16条数据总线与CPU连接。如图45所示图4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论