嵌入式拼图游戏(程序+任务书+说明书+外文翻译+演示文稿)_第1页
嵌入式拼图游戏(程序+任务书+说明书+外文翻译+演示文稿)_第2页
嵌入式拼图游戏(程序+任务书+说明书+外文翻译+演示文稿)_第3页
嵌入式拼图游戏(程序+任务书+说明书+外文翻译+演示文稿)_第4页
嵌入式拼图游戏(程序+任务书+说明书+外文翻译+演示文稿)_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式拼图游戏摘要拼图游戏是一种可变性很高且耐玩的游戏,在平时空闲的时候可以自己制定图片然后享受智力拼图,空闲之余不妨放松一下。拼图是一种大人与小孩都能玩的游戏,它可以开发智力且帮助大家提高动脑解决问题的能力。玩拼图还有助于手眼协调,玩家能训练和了解“部分”与“全部”的关系,可以知道许多的“部分”能拼凑出一个“全部”,以及一个“全部”是由许多“部分”所组成的。本课题主要是在Linux环境下用嵌入式C语言及QT对一小型游戏进行开发。选择一个游戏的拼图图片,单击方框可使图片移动,从而能够拼出一幅完整的图片,这类游戏主要考察玩家的反应能力,在游戏之余提高观察和应变能力。本游戏中通过分析C游戏的开发流程,对功能进行设计。该游戏主要实现了开始游戏,更改图片,游戏难度选择(9宫初级,16宫中级和25宫高级),战况成绩统计,成绩排名,背景音乐等功能。游戏界面美观,操作简单,功能齐全,是广大游戏爱好者都喜欢的一款游戏,具有一定的复杂性和可玩性。关键词:拼图游戏;嵌入式;Linux;QTEmbeddedpuzzlegameAbstractPuzzlegameisakindofhighvariabilityandplayablegame,intheusualidletimecandeveloptheirownpicturesandenjoyintellectualpuzzles,morethantheidlewishtorelax.Jigsawisanadultsandchildrencanplaythegame,itcandevelopintelligenceandabilitytohelppeopleimprovetheirbrainstosolveproblems.Puzzlesalsohelphand-eyecoordination,playerscantrainandlearnsomerelationshipwiththeAll,youcanknowthatmanypartscanpiecetogetheranAll,aswellasanAlliscomposedofmanypartialcomposed.ThemainsubjectisembeddedintheLinuxenvironmentusingClanguageandQTforasmallgamedevelopment.Selectapicturepuzzlegame,clicktheboxtomakethepicturemove,whichcanspellacompletepicture,mainlyonthetypeofgametheplayersabilitytorespondtoobserveandimprovetheresilienceoftheremaininggames.ByanalyzingthisgameCgamedevelopmentprocess,functionaldesign.Themainachievementofthegametostartthegame,changetheimage,selectgamedifficulty(9Palacebeginner,16intermediateand25PalacePalacesenior),fightingperformancestatistics,standings,backgroundmusicandotherfunctions.Gamebeautifulinterface,easyoperation,completefunctions,isthemajorityofgamerslikeagame,withacertaincomplexityandplayability.Keywords:puzzlegame;Embedded;Linux;QT目录摘要.iAbstract.ii1前言.11.1项目的目的与意义.11.2系统开发方法介绍.11.3本文结构.32项目开发语言及开发环境.42.1C语言.42.1.1设计特性.42.1.2高效性.42.1.3可移植性.52.1.4强大的功能和灵活性.52.1.5面向编程人员.52.1.6缺点.52.2开发环境.62.3QTCreator.62.4嵌入式开发.63可行性分析.83.1可行性分析所采用的方法和步骤.83.2可行性分析.83.3稳定性.94总体设计.104.1功能需求.104.2总体设计方案.104.3系统流程设计.114.4功能模块设计.125详细设计.155.1关键算法的设计与实现.155.1.1图片随机分割问题.165.1.2判断图片是否可以交换.215.1.3更改图片.235.2模块命名规则.235.3QSS文件.275.4用户界面快照设计概述.276软件测试.296.1测试的目的及相关问题.296.2测试方法.306.3部分测试用例.326.3.1拼图测试.326.3.2游戏难度测试.336.3.3拼图游戏窗体外观测试.336.4测试分析和总结.34结论.35参考文献.37致谢.38外文原文.39中文原文.5001前言1.1项目的目的与意义现代科学技术的发展,改变了人类的生活,作为新世纪的大学生,应该站在时代发展的前沿,掌握最先进的现代科学技术知识,以适应社会的发展,应能够独立地完成各种应要面临的任务,成为一名有创新意识的新型人才。目前,很多技术领域依旧都涉及到了C语言。C语言是面向过程编程,并涉及到网络、多线程等重要的基础知识。该课题的主要目的是使C游戏开发者深入理解所学的C语言,并实践于该游戏设计中,深刻体会以前所学的有关C程序设计方面的语言基础、事件处理、应用程序以及图形用户界面设计等方面的知识,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的结构等。学会使用C系统,其中包括对程序的调试、运行、保存等知识的运用,还包括提高程序开发功能,能运用合理的方法简化C程序的操作,开发过程中应培养分析问题、解决问题的能力。基于QT组件技术的拼图游戏软件是一款具有娱乐性、益智性、便捷性的游戏软件。此软件可以使用户放松心情,享受于拼图游戏的乐趣之中。该游戏软件可以让用户选择适合自己的主题与难度,根据用户的不同水平,锻炼其图片记忆能力以及拼凑还原能力。游戏结束后亦可让用户清晰了解到自己的游戏状态水平,便于调整自己对这款游戏的新的难度要求。另外要求软件设计精致,画面亲和,人机交互高效快捷,能够给用户带来人性化的服务。软件面向的主流群体集中在儿童,但也适宜青年人或者老人使用,提供了适宜各类用户群体的图片风格与难度设置。不论是旨在轻松娱乐,还是益智教育的目的,该软件都是一款家庭生活中以及学习生活的必备软件。设计并实现基于QT组件技术的拼图游戏软件作为自己的毕业课题设计是对学校基础课程、专业课程以及实践课程的一次综合性考查,旨在通过此次实践环节的训练,使我们能够更加全面地掌握游戏设计的整体策划以及系统地掌握游戏设计的体系结构。通过对我们所做游戏进行的类型确定、前期分析、整体策划以及设计制作过程中所涉及的相关技术的学习和掌握,提高了我们的实践能力,为我们在计算机技术的应用上拓宽了道路,对进入游戏设计这一领域的深入研究做了准备。此外,QT组件在界面开发上的应用一直处于热门,这次的系统全面的实践可以说是一次很好的锻炼,会对以后工作生活带来积极的影响。1.2系统开发方法介绍目前比较成熟的系统开发方法有:生命周期法、原型法、面向对象法等。生命周期法:把一个信息系统从其提出、分析、设计和使用,直到停止使用的整个生存期视为一个生命周期。整个生命周期划分为五个主要工作阶段:可行性分析阶段、系统分析阶段、系统设计阶段、系统实施阶段和系统运行、维护与评价阶段。通常采用结构化系统分析和系统设计方法,自上而下分析、设计,强调开发过程的整体1性和全局性;开发过程在时间上基本按阶段进行,任务明确;结合用户需求进行开发;开发周期长,维护不方便。适用于开发需求较明确固定的信息系统。“结构化分析方法(StructuredMethod,结构化方法)是面向过程的程序设计的方法,是强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法。结构是指系统内各个组成要素之间的相互联系、相互作用的框架。结构化开发方法提出了一组提高软件结构合理性的准则,如分解与抽象、模块独立性、信息隐蔽等。针对软件生存周期各个不同的阶段,它有结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)等方法。结构化分析方法给出一组帮助系统分析人员产生功能规约的原理与技术。它一般利用图形表达用户需求,使用的手段主要有数据流图、数据字典、结构化语言、判定表以及判定树等。原型法:是系统开发者在初步了解用户需求的基础上,开发出能实现系统最基本功能的一个原型,再根据用户对原型使用与评价的意见,提出修改方案,修改完善原型,如此反复多次,直到得到用户满意的最终系统为止。开发过程以用户为中心,开发周期短。适用于开发需求不够明确或不断变化的软件。面向对象方法(Object-OrientedMethod)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO(Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。面向过程方法的开发过程:分析当前的情况,做出反映当前物理模型的DFD;推导出等价的逻辑模型的DFD;设计新的逻辑系统,生成数据字典和基元描述;建立人机接口,提出可供选择的目标系统物理模型的DFD;确定各种方案的成本和风险等级,据此对各种方案进行分析;选择一种方案;建立完整的需求规约。面向对象方法的开发过程:分析确定在问题空间和解空间出现的全部对象及其属性;确定应施加于每个对象的操作,即对象固有的处理能力;分析对象间的联系,确定对象彼此间传递的消息;设计对象的消息模式,消息模式和处理能力共同构成对象的外部特性;分析各个对象的外部特性,将具有相同外部特性的对象归为一类,从而确定所需要的类;确定类间的继承关系,将各对象的公共性质放在较上层的类中描述,通过继承来共享对公共性质的描述;设计每个类关于对象外部特性的描述;设计每个类的内部实现(数据结构和方法);2创建所需的对象(类的实例),实现对象间应有的联系(发消息)。1.3本文结构本文第一部分主要以前言为主,说明了文章的研究背景、主要工作,概要说明了所做的工作。第二部分主要是C语言以及相应开发工具的相关知识介绍,介绍了C语言,开发环境,QTCreator。第三部分叙述了设计可行性。第四部分为总体设计,包括了功能需求,总体设计方案,系统流程设计,功能模块的设计。第五部分为详细设计,包括设计当中涉及到的相关算法,模块命名,系统快照。第六部分为测试部分,包括了所涉及的测试用例,测试方法。32项目开发语言及开发环境2.1C语言C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔实验室的DennisM.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件、三维、二维图形和动画,具体应用例如单片机以及嵌入式系统开发。2.1.1设计特性C是一种融合了控制特性的现代语言,而在计算机科学的理论与实践中,控制特性是很重要的。其设计使得用户可以自然地采用自顶而下的规划、结构化的编程,以及模块化的设计。这种做法使得编写出的程序更可靠、更易懂。C语言是种通用的、面向过程的程序语言。它具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。下面只介绍了c语言最容易理解的一般特点,由于C语言的这些优点,使c语言应用面很广。2.1.2高效性C是一种高效的语言。在设计上它充分利用了当前计算机在能力上的优点。C程序往往很紧凑且运行速度快。事实上,C可以表现出通常只有汇编语言才具有的精细的控制能力。如果愿意,可以细调程序以获得最大的速度或最大的内存使用率。C语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。这些数据类型能用来实现各种复杂的数据结构(如链表、树、栈等)的运算,尤其是指针类型数据,使用起来比趴sc从更为灵活、多样;c语言的运算符包含的范围很广,共有34种运算符。c把括号、赋值、强制类型转换等都作为运算符处理,从而使c的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。C语言的一个语句可完成多项操作,一个表达式也可以完成多项操作。书写简练,源程序短,因而输入程序工作量小。42.1.3可移植性C是一种可移植语言。这意味着,在一个系统上编写的C程序经过很少改动或不经修改就可以在其他系统上运行。如果修改是必须的,则通常只须改变伴随主程序的一个头文件中的几项内容即可。C在可移植性方面处于领先地位。C编译器在大约40中系统上可用,包括从使用8位微处理器的计算机到Cary超级计算机。不过,程序中为访问特定硬件设备或操作系统的特殊功能而专门编写的部分,通常是不能移植的。由于C与UNIX的紧密联系,UNIX系统通常都带有一个C编译器作为程序包的一部分。Linxu中同样也包括一个C编译器。个人计算机,包括运行不同版本的Windows和Macintosh的PC,可使用若干种C编译器。所以不论使用的是家用计算机、专业工作站还是大型机,都很容易得到对您的特定系统的C编译器。2.1.4强大的功能和灵活性C强大而又灵活。例如强大而灵活的UNIX操作系统的大部分便是C编写的。其他语言(如FORTANT、Perl、Python、Pascal、LISP、Logo和BASIC)的许多编译器和解释器也都是C编写的。C程序一般只比汇编程序生成的目标代码的执行效率低10一20却比其他高级语言的执行效率高。c语言的移植性好。主要表现在只要对这种语言稍加修改,使可以适应个向型号的机器或各类操作系统。2.1.5面向编程人员C面向编程人员的需要。它允许您访问硬件,并可以操纵内存中的特定位。它具有丰富的运算符供选择,能够简洁地表达自己的意图。在限制所能做的事情方面,C不如Pascal这样的语言严格。这种灵活性是优点,同时也是一种危险。优点在于:许多任务在C中都简单的多。危险在于:使用C时,可能会犯在使用其他语言时不会犯的错误。C给予更多的自由,但同时也会承担更大的风险。另外,多数C实现都有一个大型的库,其中包含有用的C函数。这些函数能够处理编程人员通常面对的许多需求。2.1.6缺点C也有一些缺点,如C在表达自由方便的自由会增加风险。尤其是C对指针的使用,意味着可能会犯难以追踪的编程错误。C的简洁性与丰富的运算符相结合,使其可能会编写出极难理解的代码。52.2开发环境操作系统:Ubuntu12.0.1处理器:Pentium(R)Dual-CoreCPUE63002.8GHz2.8GH安装内存(RAM):2.00GB编译器:minGW移植到windows下的gcc编译器调试器:minGW移植到windows下的gdb调试器Make:minGW中的mingw32-makeQtC+GUI2.3QTCreatorQtCreator是跨平台的QtIDE,QtCreator是Qt被Nokia收购后推出的一款新的轻量级集成开发环境(IDE)。此IDE能够跨平台运行,支持的系统包括Linux(32位及64位)、MacOSX以及Windows。根据官方描述,QtCreator的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及轻易的完成开发任务。QtCreator包括项目生成向导、高级的C+代码编辑器、浏览文件及类的工具、集成了QtDesigner、QtAssistant、QtLinguist、图形化的GDB调试前端,集成qmake构建工具等。QtCreator主要是为了帮助新Qt用户更快速入门并运行项目,还可提高有经验的Qt开发人员的工作效率。语法标识和代码完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能。集成了领先的版本控制软件,包括Git、Perforce和Subversion开放式文件,无须知晓确切的名称或位置搜索类和文件跨不同位置或文件沿用符号在头文件和源文件,或在声明和定义之间切换集成了特定于Qt的功能,如信号与槽(Signals&Slots)图示调试器,对Qt类结构可一目了然集成了QtDesigner可视化布局和格式构建器只需单击一下就可生成和运行Qt项目。2.4嵌入式开发嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(SetTopBox)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。嵌入式系统是用来控制或者监视机器、装置、工厂等大规模设备的系统。嵌入式6系统以应用为中心、以计算机技术为基础、软硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。嵌入式开发一般具有以下特点:可裁剪性。支持开放性和可伸缩性的体系结构。强实时性。EOS实时性一般较强,可用于各种设备控制中。统一的接口。提供设备统一的驱动接口。操作方便、简单、提供友好的图形GUI和图形界面,追求易学易用。提供强大的网络功能,支持TCP/IP协议及其他协议,提供TCP/UDP/IP/PPP协议支持及统一的MAC访问层接口,为各种移动计算设备预留接口。强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预、这就要负责系统管理的EOS具有较强的稳定性。嵌入式操作系统的用户接口一般不提供操作命令,它通过系统的调用命令向用户程序提供服务。固化代码。在嵌入式系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。更好的硬件适应性,也就是良好的移植性。嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。73可行性分析3.1可行性分析所采用的方法和步骤可行性分析是通过对项目的主要内容和配套条件,如市场需求、资源供应、建设规模、工艺路线、设备选型、环境影响、资金筹措、盈利能力等,从技术、经济、工程等方面进行调查研究和分析比较,并对项目建成以后可能取得的财务、经济效益及社会环境影响进行预测,从而提出该项目是否值得投资和如何进行建设的咨询意见,为项目决策提供依据的一种综合性的系统分析方法。可行性分析应具有预见性、公正性、可靠性、科学性的特点。我国可行性研究存在的主要问题,一是工程技术方案的研究论证深度不够。按照国外的通常做法,可行性研究阶段的研究深度应能达到定方案的程度,因此要求在工程技术方案论证,应达到BasicDesign或ConceptDesign的程度,基本相当于我国的初步设计应达到的水平,应提出明确的设备清单;二是财务评价就项目论项目,这与国外利用企业理财的理论和方法进行资本预算管理,对投资项目进行投资决策和融资决策的通行做法存在重大差异,并且在经济评价方面不恰当地使用了国民经济评价的概念,由此引起一系列的认识误区;三是在市场分析、组织机构分析等方面与国外差别较大,研究深度严重不足;四是不重视多方案的比选及项目风险分析,或者分析的内容、深度严重不足,缺乏项目周期各阶段风险管理的统一筹划及策略论证。通过研究分析拼图游戏所具备的能力及实现的方法来确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。3.2可行性分析由于本游戏是毕业设计,不过分强调直接的经济效益和其日后的发展方向,只在注重自身水平和能力的提高,同时对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以基本上不用考虑到经济问题。可用与本游戏的编程语言有VB,Java,C等,考虑到用于编写程序的困难度,和对语言的了解程度,选择C作为编程语言。需要对变量定义、变量初始化、界面初始化、游戏初始化、然后进入游戏、处理游戏过程中的各种操作。本游戏的开发作为毕业设计,目的在于巩固先前所学的知识,以个人为单位,仅供个人平常娱乐所用,无须考虑社会影响,不用考虑法律、版权等社会因素,且此软件的开发不触犯法律,所以在这方面是完全可行的。83.3稳定性现在做出来的只是一个拼图游戏的核心部分,这些代码经过许多测试和修改稳定性也比较强了。开始时鼠标单击会选中拼图区之外的图块,经过修改后鼠标不会选中拼图区之外的任何部分,map映射数组和selected结构在使用前都需要经过测试保证其正确,然后才使用的。保证map数组不会出现越界错误,map数组和selected结构不会存入不正确的数据。这些都是经过测试通过了的。鼠标单击图块边缘时选中的图块也是经过精确的计算的到,不会出现单击图块边缘时明明是单击的这个图块,却由于计算偏差选中了另一个图块。这些精确的计算也都是通过了软件的精确性测试通过了的。94总体设计即对有关系统全局问题的设计,也就是设计系统总的处理方案,又称系统概要设计。它包括:计算机配置设计、系统模块结构设计、数据库和文件设计、代码设计以及系统可靠性与内部控制设计等内容。软件功能分解属于下列软件开发中的总体设计阶段。它包括:计算机配置设计、系统模块结构设计、数据库和文件设计、代码设计以及系统可靠性与内部控制设计等内容。软件功能分解属于下列软件开发中的总体设计阶段。4.1功能需求用户对于该拼图游戏软件的需求主要体现在以下几个功能:1.实现程序GUI图形界面;2.实现游戏开始、退出等功能;3.实现鼠标或键盘事件响应模块的功能;4.实现可选难度等级功能;5.实现输赢自动判别功能;6.实现游戏图片更换功能;7.实现进行游戏同时可以查看原图功能;8.实现游戏内图片更换、重玩、返回界面、退出功能;4.2总体设计方案在开始游戏界面后,设计本程序能够载入默认图片(用户也可以选择想要的其它图片),程序默认难度为9宫格(用户也可以选择想要的其他难度),还设计实现背景音乐的播放功能等。在本程序中,对于图片的分割、拼凑、判断图片是否可以移动等都是设计的关键。总体设计方案中主要说明前期工作中对于分割图片以及判断拼图是否成功这两点的设计。对于分割图片是用像素点来实现的,同时对图片进行了自动缩放,这样一来就可以使得图片分割后看起来更连贯。拆分图片后,把分好的图片存储到一个image数组中,对于可移动的块其实是按钮,每个按钮上都有一个icon,通过随机把image数组中的图片通过imageIcon的转化后附给一个按钮,并将按钮数组首先附给一个向量,然后用随机数来确定对应向量的值,然后再附给对应数组按钮,同时去除该值。也就是说在附值的时候图片顺序不变,变的而是数组按钮的顺序。对于图片的是否拼图成功的提示,主要是在每个按钮中加个String的属性值,而且对于正确的排序的值与正在排的各个值比较,一旦所有的按钮对应的值与正确的排10序一致,则为成功。4.3系统流程设计图4-1流程图符号在绘制程序框图时,使用的符号说明如图4-1所示,拼图游戏系统处理方式的合理选择,其实就是一个处理过程的设计问题。选择处理方式实际上就是根据系统的任务、目标和环境条件,合理地选择信息活动的形态及具体方法。程序流程图又称为方框图。表示方法简明直观,是用来描述程序执行的逻辑过程的。它把程序的基本步骤归纳为:处理、判断、输入/输出、开始和结束等几个基本功能,并用不同的记号加以表示,从而描述程序的执行过程。系统流程图表达的是系统各部件的流动情况,而不是表示对信息进行加工处理的控制过程。系统流程图的作用表现在以下几个方面:1,制作系统流程图的过程是系统分析员全面了解系统业务处理概况的过程,它是系统分析员做进一步分析的依据。2,系统流程图是系统分析员、管理员、业务操作员相互交流的工具。3,系统分析员可直接在系统流程图上画出可以有计算机处理的部分。4,可利用系统流程图来分析业务流程的合理性。11首先我在进行软件代码的编写设计之前对于软件的整体流程有一个大致的思路,如图4-2,即先将图片进行打散,然后即可进行拼图的过程,然后可对于拼图成功进行判断。图4-2拼图游戏流程图4.4功能模块设计关于该拼图游戏的功能木模块设计,从逻辑上分析,该拼图游戏主要分成2块,也就是主要的两个窗体,分别为游戏界面部分和游戏部分,下面对该款拼图游戏进行功能设计分析。12游戏功能分为图片打散流程以及拼图流程,如图4-3和图4-4。图4-3拼图游戏随机打散图片流程图4-4拼图游戏拼图流程13首先,我需要对软件系统进行概要设计,即系统设计。概要设计需要对软件系统的设计进行考虑,包括系统的基本处理流程、系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等,为软件的详细设计提供基础。在概要设计的基础上,我需要进行软件系统的详细设计。在详细设计中,描述实现具体模块所涉及到的主要算法、数据结构、类的层次结构及调用关系,需要说明软件系统各个层次中的每一个程序(每个模块或子程序)的设计考虑,以便进行编码和测试。应当保证软件的需求完全分配给整个软件。详细设计应当足够详细,能够根据详细设计报告进行编码。在软件编码阶段,根据概要设计中对数据结构、算法分析和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求。在规范化的研发流程中,编码工作在整个项目流程里最多不会超过1/2,通常在1/3的时间,所谓磨刀不误砍柴功,设计过程完成的好,编码效率就会极大提高,编码时不同模块之间的进度协调和协作是最需要小心的,也许一个小模块的问题就可能影响了整体进度,让很多程序员因此被迫停下工作等待,这种问题在很多研发过程中都出现过。145详细设计5.1关键算法的设计与实现对于一个拼图游戏的核心来说,主要的模块就是图片的随机打散模块和拼图模块。我将屏幕窗口分成9块,如图5-1所示。图5-1拼图区窗口关于八数码问题,是该程序设计的一个难点,也是首要突破的一的难点,搞清楚八数码函数的运算逻辑是该程序设计的关键。八数码问题(九宫问题)在一个3*3的九宫中有1-8这8个数及一个空格随机的摆放在其中的格子里。现在要求实现这个问题:将打乱的九宫格调整为与图片吻合的形式。调整的规则是:每次只能将与空格(上、下、或左、右)相邻的一个数字平移到空格中。具体分析,九宫问题中,程序产生的随机排列转换成目标共有两种可能,而且这两种不可能同时成立,也就是奇数排列和偶数排列。我们可以把一个随机排列的数组从左到右从上到下用一个一维数组表示,我们就可以表示成8,7,1,5,2,6,3,4,0其中0代表空格。状态为:871526340在这个数组中我们首先计算它能够重排列出来的结果,公式是:(),其中()就是一个数他前面比这个数小的数的个数,为奇数和偶数各有一种解法。那么上面的数组我们就可以解出它的结果。(8)0;(数字8前没有比其小的数字)(7)0;(1)0;(5)1;(数字5前有一个比其小的数字“1”)(2)1;15(6)3;(3)2;(4)3;0001132310Y为偶数,所以进行偶数排列。八数码问题是该游戏软件的设计重点,理解八数码函数是程序设计的关键。八数码问题用于拼图游戏中图片的拆分方法。也就是说,当运用到八数码问题后,按照八数码函数进行运算,才能保证图片拆分后,经过用户的拼凑,最终可以完成整个拼图游戏,而不会无解。5.1.1图片随机分割问题我们将图像也分成和屏幕窗口一样的9块,如图5-2所示。图5-2图像分割在Qt中,视口是物理坐标系下指定的任意矩形,窗口指的是同一矩形,只不过是逻辑坐标系下的。我们先将视口设置成屏幕上的一块,然后窗口设置成一块大小和一块图像的大小一样的矩形,我们将一块图像绘制到窗口中,经过窗口-视口变换后就绘制到了视口所对应的屏幕上。为了实现图像的随机打散,使用一个全局的映射数组map33,map数组中存放的数字只能是08之间的数(包括0和8)。map00对应屏幕的0块,map01对应屏幕的1块,依次类推,map33对应屏幕的8块。如果map00里面存放的数是8,那么我们就将图像的第8块绘制到屏幕的第0块。如果map数组中的数字是随机打乱的,那么我们通过这个映射数组将图像绘制到屏幕上后,屏幕上将会是打乱的图像。为了方便代码的重用,我们将map数组的随机打乱编写到一个函数random()中,这样游戏再玩一次的时候就可以直接再调用一次这个函数重新打散一次映射数组就可以了。map数组在初始化的时候,我们给map00map33依次放进去08,然后再16调用一次random()函数后将图像绘制到屏幕上去生成最初的打乱的图像。random()函数的算法是这样的,首先产生两个随机数,然后再将这两个随机数对9求余的到两个9以内(即08且包括0和8)的随机数randData1和randData2,然后对maprandData1/3randData1%3和maprandData2/3randData2%3进行交换。通过循环将这样的交换多进行几轮,然后就得到了一个随机打散的映射数组map。代码:算法1voidPintuWindow:random()inttemp=-1;intrandData1=-1;intrandData2=-1;srand(time(NULL);for(inti=0;irect(),QPix

温馨提示

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

评论

0/150

提交评论