嵌入式拼图游戏_第1页
嵌入式拼图游戏_第2页
嵌入式拼图游戏_第3页
嵌入式拼图游戏_第4页
嵌入式拼图游戏_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式拼图游戏摘要拼图游戏是一种可变性很高且耐玩的游戏,在平时空闲的时候可以自己制定图片然后享受智力拼图,空闲之余不妨放松一下。拼图是一种大人与小孩都能玩的游戏,它可以开发智力且帮助大家提高动脑解决问题的能力。玩拼图还有助于手眼协调,玩家能训练和了解“部分”与“全部”的关系,可以知道许多的“部分”能拼凑出一个“全部”,以及一个“全部”是由许多“部分”所组成的。本课题主要是在LINUX环境下用嵌入式C语言及QT对一小型游戏进行开发。选择一个游戏的拼图图片,单击方框可使图片移动,从而能够拼出一幅完整的图片,这类游戏主要考察玩家的反应能力,在游戏之余提高观察和应变能力。本游戏中通过分析C游戏的开发流程,对功能进行设计。该游戏主要实现了开始游戏,更改图片,游戏难度选择(9宫初级,16宫中级和25宫高级),战况成绩统计,成绩排名,背景音乐等功能。游戏界面美观,操作简单,功能齐全,是广大游戏爱好者都喜欢的一款游戏,具有一定的复杂性和可玩性。关键词拼图游戏;嵌入式;LINUX;QTEMBEDDEDPUZZLEGAMEABSTRACTPUZZLEGAMEISAKINDOFHIGHVARIABILITYANDPLAYABLEGAME,INTHEUSUALIDLETIMECANDEVELOPTHEIROWNPICTURESANDENJOYINTELLECTUALPUZZLES,MORETHANTHEIDLEWISHTORELAXJIGSAWISANADULTSANDCHILDRENCANPLAYTHEGAME,ITCANDEVELOPINTELLIGENCEANDABILITYTOHELPPEOPLEIMPROVETHEIRBRAINSTOSOLVEPROBLEMSPUZZLESALSOHELPHANDEYECOORDINATION,PLAYERSCANTRAINANDLEARN“SOME“RELATIONSHIPWITHTHE“ALL“,YOUCANKNOWTHATMANY“PARTS“CANPIECETOGETHERAN“ALL“,ASWELLASAN“ALL“ISCOMPOSEDOFMANY“PARTIAL“COMPOSEDTHEMAINSUBJECTISEMBEDDEDINTHELINUXENVIRONMENTUSINGCLANGUAGEANDQTFORASMALLGAMEDEVELOPMENTSELECTAPICTUREPUZZLEGAME,CLICKTHEBOXTOMAKETHEPICTUREMOVE,WHICHCANSPELLACOMPLETEPICTURE,MAINLYONTHETYPEOFGAMETHEPLAYERSABILITYTORESPONDTOOBSERVEANDIMPROVETHERESILIENCEOFTHEREMAININGGAMESBYANALYZINGTHISGAMECGAMEDEVELOPMENTPROCESS,FUNCTIONALDESIGNTHEMAINACHIEVEMENTOFTHEGAMETOSTARTTHEGAME,CHANGETHEIMAGE,SELECTGAMEDIFFICULTY9PALACEBEGINNER,16INTERMEDIATEAND25PALACEPALACESENIOR,FIGHTINGPERFORMANCESTATISTICS,STANDINGS,BACKGROUNDMUSICANDOTHERFUNCTIONSGAMEBEAUTIFULINTERFACE,EASYOPERATION,COMPLETEFUNCTIONS,ISTHEMAJORITYOFGAMERSLIKEAGAME,WITHACERTAINCOMPLEXITYANDPLAYABILITYKEYWORDSPUZZLEGAMEEMBEDDEDLINUXQT目录摘要IABSTRACTII1前言111项目的目的与意义112系统开发方法介绍113本文结构32项目开发语言及开发环境421C语言4211设计特性4212高效性4213可移植性5214强大的功能和灵活性5215面向编程人员5216缺点522开发环境623QTCREATOR624嵌入式开发63可行性分析831可行性分析所采用的方法和步骤832可行性分析833稳定性94总体设计1041功能需求1042总体设计方案1043系统流程设计1144功能模块设计125详细设计1551关键算法的设计与实现15511图片随机分割问题16512判断图片是否可以交换21513更改图片2352模块命名规则2353QSS文件2754用户界面快照设计概述276软件测试2961测试的目的及相关问题2962测试方法3063部分测试用例32631拼图测试32632游戏难度测试33633拼图游戏窗体外观测试3364测试分析和总结34结论35参考文献37致谢38外文原文39中文原文501前言11项目的目的与意义现代科学技术的发展,改变了人类的生活,作为新世纪的大学生,应该站在时代发展的前沿,掌握最先进的现代科学技术知识,以适应社会的发展,应能够独立地完成各种应要面临的任务,成为一名有创新意识的新型人才。目前,很多技术领域依旧都涉及到了C语言。C语言是面向过程编程,并涉及到网络、多线程等重要的基础知识。该课题的主要目的是使C游戏开发者深入理解所学的C语言,并实践于该游戏设计中,深刻体会以前所学的有关C程序设计方面的语言基础、事件处理、应用程序以及图形用户界面设计等方面的知识,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的结构等。学会使用C系统,其中包括对程序的调试、运行、保存等知识的运用,还包括提高程序开发功能,能运用合理的方法简化C程序的操作,开发过程中应培养分析问题、解决问题的能力。基于QT组件技术的拼图游戏软件是一款具有娱乐性、益智性、便捷性的游戏软件。此软件可以使用户放松心情,享受于拼图游戏的乐趣之中。该游戏软件可以让用户选择适合自己的主题与难度,根据用户的不同水平,锻炼其图片记忆能力以及拼凑还原能力。游戏结束后亦可让用户清晰了解到自己的游戏状态水平,便于调整自己对这款游戏的新的难度要求。另外要求软件设计精致,画面亲和,人机交互高效快捷,能够给用户带来人性化的服务。软件面向的主流群体集中在儿童,但也适宜青年人或者老人使用,提供了适宜各类用户群体的图片风格与难度设置。不论是旨在轻松娱乐,还是益智教育的目的,该软件都是一款家庭生活中以及学习生活的必备软件。设计并实现基于QT组件技术的拼图游戏软件作为自己的毕业课题设计是对学校基础课程、专业课程以及实践课程的一次综合性考查,旨在通过此次实践环节的训练,使我们能够更加全面地掌握游戏设计的整体策划以及系统地掌握游戏设计的体系结构。通过对我们所做游戏进行的类型确定、前期分析、整体策划以及设计制作过程中所涉及的相关技术的学习和掌握,提高了我们的实践能力,为我们在计算机技术的应用上拓宽了道路,对进入游戏设计这一领域的深入研究做了准备。此外,QT组件在界面开发上的应用一直处于热门,这次的系统全面的实践可以说是一次很好的锻炼,会对以后工作生活带来积极的影响。12系统开发方法介绍目前比较成熟的系统开发方法有生命周期法、原型法、面向对象法等。生命周期法把一个信息系统从其提出、分析、设计和使用,直到停止使用的整个生存期视为一个生命周期。整个生命周期划分为五个主要工作阶段可行性分析阶段、系统分析阶段、系统设计阶段、系统实施阶段和系统运行、维护与评价阶段。通常采用结构化系统分析和系统设计方法,自上而下分析、设计,强调开发过程的整体性和全局性;开发过程在时间上基本按阶段进行,任务明确;结合用户需求进行开发;开发周期长,维护不方便。适用于开发需求较明确固定的信息系统。“结构化分析方法STRUCTUREDMETHOD,结构化方法是面向过程的程序设计的方法,是强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法。结构是指系统内各个组成要素之间的相互联系、相互作用的框架。结构化开发方法提出了一组提高软件结构合理性的准则,如分解与抽象、模块独立性、信息隐蔽等。针对软件生存周期各个不同的阶段,它有结构化分析SA、结构化设计SD和结构化程序设计SP等方法。结构化分析方法给出一组帮助系统分析人员产生功能规约的原理与技术。它一般利用图形表达用户需求,使用的手段主要有数据流图、数据字典、结构化语言、判定表以及判定树等。原型法是系统开发者在初步了解用户需求的基础上,开发出能实现系统最基本功能的一个原型,再根据用户对原型使用与评价的意见,提出修改方案,修改完善原型,如此反复多次,直到得到用户满意的最终系统为止。开发过程以用户为中心,开发周期短。适用于开发需求不够明确或不断变化的软件。面向对象方法OBJECTORIENTEDMETHOD是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OOOBJECTORIENTED方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。面向过程方法的开发过程分析当前的情况,做出反映当前物理模型的DFD;推导出等价的逻辑模型的DFD;设计新的逻辑系统,生成数据字典和基元描述;建立人机接口,提出可供选择的目标系统物理模型的DFD;确定各种方案的成本和风险等级,据此对各种方案进行分析;选择一种方案;建立完整的需求规约。面向对象方法的开发过程分析确定在问题空间和解空间出现的全部对象及其属性;确定应施加于每个对象的操作,即对象固有的处理能力;分析对象间的联系,确定对象彼此间传递的消息;设计对象的消息模式,消息模式和处理能力共同构成对象的外部特性;分析各个对象的外部特性,将具有相同外部特性的对象归为一类,从而确定所需要的类;确定类间的继承关系,将各对象的公共性质放在较上层的类中描述,通过继承来共享对公共性质的描述;设计每个类关于对象外部特性的描述;设计每个类的内部实现(数据结构和方法);创建所需的对象(类的实例),实现对象间应有的联系(发消息)。13本文结构本文第一部分主要以前言为主,说明了文章的研究背景、主要工作,概要说明了所做的工作。第二部分主要是C语言以及相应开发工具的相关知识介绍,介绍了C语言,开发环境,QTCREATOR。第三部分叙述了设计可行性。第四部分为总体设计,包括了功能需求,总体设计方案,系统流程设计,功能模块的设计。第五部分为详细设计,包括设计当中涉及到的相关算法,模块命名,系统快照。第六部分为测试部分,包括了所涉及的测试用例,测试方法。2项目开发语言及开发环境21C语言C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔实验室的DENNISMRITCHIE于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件、三维、二维图形和动画,具体应用例如单片机以及嵌入式系统开发。211设计特性C是一种融合了控制特性的现代语言,而在计算机科学的理论与实践中,控制特性是很重要的。其设计使得用户可以自然地采用自顶而下的规划、结构化的编程,以及模块化的设计。这种做法使得编写出的程序更可靠、更易懂。C语言是种通用的、面向过程的程序语言。它具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。下面只介绍了C语言最容易理解的一般特点,由于C语言的这些优点,使C语言应用面很广。212高效性C是一种高效的语言。在设计上它充分利用了当前计算机在能力上的优点。C程序往往很紧凑且运行速度快。事实上,C可以表现出通常只有汇编语言才具有的精细的控制能力。如果愿意,可以细调程序以获得最大的速度或最大的内存使用率。C语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。这些数据类型能用来实现各种复杂的数据结构如链表、树、栈等的运算,尤其是指针类型数据,使用起来比趴SC从更为灵活、多样;C语言的运算符包含的范围很广,共有34种运算符。C把括号、赋值、强制类型转换等都作为运算符处理,从而使C的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。C语言的一个语句可完成多项操作,一个表达式也可以完成多项操作。书写简练,源程序短,因而输入程序工作量小。213可移植性C是一种可移植语言。这意味着,在一个系统上编写的C程序经过很少改动或不经修改就可以在其他系统上运行。如果修改是必须的,则通常只须改变伴随主程序的一个头文件中的几项内容即可。C在可移植性方面处于领先地位。C编译器在大约40中系统上可用,包括从使用8位微处理器的计算机到CARY超级计算机。不过,程序中为访问特定硬件设备或操作系统的特殊功能而专门编写的部分,通常是不能移植的。由于C与UNIX的紧密联系,UNIX系统通常都带有一个C编译器作为程序包的一部分。LINXU中同样也包括一个C编译器。个人计算机,包括运行不同版本的WINDOWS和MACINTOSH的PC,可使用若干种C编译器。所以不论使用的是家用计算机、专业工作站还是大型机,都很容易得到对您的特定系统的C编译器。214强大的功能和灵活性C强大而又灵活。例如强大而灵活的UNIX操作系统的大部分便是C编写的。其他语言(如FORTANT、PERL、PYTHON、PASCAL、LISP、LOGO和BASIC)的许多编译器和解释器也都是C编写的。C程序一般只比汇编程序生成的目标代码的执行效率低10一20却比其他高级语言的执行效率高。C语言的移植性好。主要表现在只要对这种语言稍加修改,使可以适应个向型号的机器或各类操作系统。215面向编程人员C面向编程人员的需要。它允许您访问硬件,并可以操纵内存中的特定位。它具有丰富的运算符供选择,能够简洁地表达自己的意图。在限制所能做的事情方面,C不如PASCAL这样的语言严格。这种灵活性是优点,同时也是一种危险。优点在于许多任务在C中都简单的多。危险在于使用C时,可能会犯在使用其他语言时不会犯的错误。C给予更多的自由,但同时也会承担更大的风险。另外,多数C实现都有一个大型的库,其中包含有用的C函数。这些函数能够处理编程人员通常面对的许多需求。216缺点C也有一些缺点,如C在表达自由方便的自由会增加风险。尤其是C对指针的使用,意味着可能会犯难以追踪的编程错误。C的简洁性与丰富的运算符相结合,使其可能会编写出极难理解的代码。22开发环境操作系统UBUNTU1201处理器PENTIUMRDUALCORECPUE630028GHZ28GH安装内存RAM200GB编译器MINGW移植到WINDOWS下的GCC编译器调试器MINGW移植到WINDOWS下的GDB调试器MAKEMINGW中的MINGW32MAKEQTCGUI23QTCREATORQTCREATOR是跨平台的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的功能,如信号与槽SIGNALSINTRANDDATA11INTRANDDATA21SRANDTIMENULLFORINTI0IRECT,QPIXMAP“/IMAGES/GAMEBACKGROUNDJPG“/整体框架PAINTERDRAWRECT10,10,980,480PAINTERDRAWRECT15,15,970,470PAINTERDRAWLINE498,15,498,485PAINTERDRAWLINE502,15,502,485/绘图区和原图区的绘制PAINTERSETPENQPENQTWHITE,2PAINTERDRAWRECT20,20,473,460PAINTERDRAWRECT507,20,473,460/窗口间距INTSPACEX157INTSPACEY153/加载图像/QSTRINGSTR“/IMAGES/MYIMAGE“INTNUMQRAND31STRQSTRINGNUMBERNUMSTR“JPG“/QIMAGEIMAGESTRIMG/高、宽INTIMAGEWIMAGEWIDTHINTIMAGEHIMAGEHEIGHT/窗口间距INTSPACEWIMAGEW/3INTSPACEHIMAGEH/3/原图视窗体PAINTERSETVIEWPORT507,20,473,460PAINTERSETWINDOW0,0,IMAGEW,IMAGEH/对比图描绘PAINTERDRAWIMAGE0,0,IMAGE/拼图区图像PAINTERSETWINDOW0,0,SPACEW,SPACEHFORINTI0IPOSXINTYEVENTPOSY/进行坐标范围的判定IF20INCLUDE“SUCCESSDIALOGH“INCLUDEINCLUDEINCLUDESTRUCTPAIRINTXINTYCLASSPINTUWINDOWPUBLICQWIDGETQ_OBJECTPUBLICPINTUWINDOWSIGNALSVOIDSUCCESSVOIDSHOWMAINWIDGETPRIVATESLOTS/定义槽函数VOIDRANDOMVOIDSUCCEEDVOIDCLOSEWIDGETVOIDCHANGEIMAGEPRIVATE/定义绘图事件,鼠标事件/定义按钮VOIDPAINTEVENTQPAINTEVENTEVENTVOIDMOUSEPRESSEVENTQMOUSEEVENTEVENT/QPIXMAPIMAGEQPUSHBUTTONREPLAYGAMEQPUSHBUTTONBACKMENUQPUSHBUTTONCHANGEQPUSHBUTTONOVERGAMEINTMAP33STRUCTPAIRSELECTEDSUCCESSDIALOGSUCCESSDIALOGSUCCESSDIALOG类是在游戏成功时显示的一个对话框,继承自QDIALOG,其头文件是SUCESSDIALOGH,实现文件时SUCCESSDIALOGCPP。在这个类中自定义了两个信号VOIDREPLAY和VOIDEXIT。重新实现了VOIDPAINTEVENTQPAINTEVENTEVENT用以在对话框中插入一张图片。然后就是一个QLABELSUCC指向显示祝贺语的QLABLE,一个指向QPUSHBUTTON重玩按钮的QPUSHBUTTONBUTTONREPLAY和一个指向QPUSHBUTTON推出按钮的QPUSHBUTTONBUTTONEXIT。当用户单击重玩按钮时就会先发射REPLAY信号,然后执行关闭这个对话框的槽。REPLAY信号在VOIDPINTUWINDOWSUCCEED函数中是连接到了类PINTUWINDOW的RANDOM槽。所以当我们单击REPLAY按钮的时候会关闭对话框,重新随机打散图像,重新进行拼图游戏。当用户单击EXIT按钮时就是发射EXIT信号,然后执行关闭这个对话框的槽。EXIT信号在VOIDPINTUWINDOWSUCCEED函数中是连接到了类PINTUWINDOW的CLOSE槽,类PINTUWINDOW的CLOSE槽会关闭整个拼图游戏程序的窗口,然后结束拼图游戏。SUCCESSDIALOG文件代码IFNDEFSUCCESSDIALOG_HDEFINESUCCESSDIALOG_HINCLUDEINCLUDEINCLUDEINCLUDECLASSSUCCESSDIALOGPUBLICQDIALOGQ_OBJECTPUBLIC/定义成功窗口SUCCESSDIALOGQWIDGETPARENT0SIGNALS/定义重玩和退出信号VOIDREPLAYVOIDEXITPRIVATE/定义私有成员/绘图事件,按钮VOIDPAINTEVENTQPAINTEVENTEVENTQLABELSUCCQPUSHBUTTONBUTTONREPLAYQPUSHBUTTONBUTTONEXITENDIF模块完成代码SUCCESSDIALOGCPPINCLUDEINCLUDE“SUCCESSDIALOGH“INCLUDESUCCESSDIALOGSUCCESSDIALOGQWIDGETPARENTQDIALOGPARENT/SUCCNEWQLABELQOBJECTTRUTF8“CONGRATULATIONS,NPINTUSUCCEED_1“SUCCNEWQLABELTHISSETWINDOWTITLETR“PINTU“/成功窗口的绘制BUTTONREPLAYNEWQPUSHBUTTONTR“REPLAY“BUTTONEXITNEWQPUSHBUTTONTR“EXIT“QHBOXLAYOUTTOPLAYOUTNEWQHBOXLAYOUTTOPLAYOUTADDSTRETCHTOPLAYOUTADDWIDGETSUCCTOPLAYOUTADDSTRETCHQHBOXLAYOUTBOTTOMLAYOUTNEWQHBOXLAYOUTBOTTOMLAYOUTADDWIDGETBUTTONREPLAYBOTTOMLAYOUTADDWIDGETBUTTONEXITQVBOXLAYOUTMAINLAYOUTNEWQVBOXLAYOUTMAINLAYOUTADDLAYOUTTOPLAYOUTMAINLAYOUTADDLAYOUTBOTTOMLAYOUTSETLAYOUTMAINLAYOUT/槽函数添加CONNECTBUTTONREPLAY,SIGNALPRESSED,THIS,SIGNALREPLAYCONNECTBUTTONREPLAY,SIGNALPRESSED,THIS,SLOTCLOSECONNECTBUTTONEXIT,SIGNALPRESSED,THIS,SIGNALEXITCONNECTBUTTONEXIT,SIGNALPRESSED,THIS,SLOTCLOSE/绘图事件VOIDSUCCESSDIALOGPAINTEVENTQPAINTEVENTEVENTQPAINTERPAINTERTHISQIMAGEIMAGE“/IMAGES/BACKGROUNDSMALLJPG“PAINTERSETWINDOW0,0,IMAGEWIDTH,IMAGEHEIGHTPAINTERDRAWIMAGE0,0,IMAGE53QSS文件设计QT程序UI的时候,可以像WEB端使用CSS一样,使用QSS,使页面美化跟代码层分开,利于维护。以简单按钮为例的代码QPUSHBUTTONBACKGROUNDIMAGEURL/IMAGES/EASYBUTTON2PNGBORDERSTYLEOUTSETBORDERRADIUS10PXQPUSHBUTTONHOVERBACKGROUNDIMAGEURL/IMAGES/EASYBUTTON1PNGBORDERSTYLEOUTSETBORDERRADIUS10PXQPUSHBUTTONPRESSEDBACKGROUNDIMAGEURL/IMAGES/EASYBUTTON3PNGBORDERSTYLEOUTSETBORDERRADIUS10PX54用户界面快照设计概述界面非常简单,一个窗口分成了两个区域,一个拼图区,一个原图区。原图区显示原图,用以作拼图时的参照,拼图区实现拼图,界面快照如图53、图54和图55。图53游戏开始界面快照游戏开始时点击游戏界面中的简单、一般、困难按钮时会进入到正式的游戏界面,即3宫、4宫、5宫的游戏界面,玩家可以根据自己的兴趣及实力选择不同的难度进行游戏。图54简单游戏界面快照进入到正式游戏界面中,开始进行拼图。选择其中的不再适当位置的图片与其横纵相邻的一张图片进行交换,一一进行,知道将所有的图片都交换到自己所在的位置,完成拼图,弹出成功对话框,之后玩家可以进行重玩,重选图片,其他难度或直接退出游戏。图55完成界面快照6软件测试对于一个开发中的软件来说,系统测试是衡量软件产品质量的重要保证活动之一。因为在系统开发以及修改的过程中,在各个阶段都有可能存在错误和缺陷。通过测试可以发现系统设计中存在的种种问题,并可以及时改正,避免在系统投入使用时才发现不必要的错误,从而导致不必要的损失,尤其对于大多数将要投入市场的软件产品而言,及时挽救错误能够保证研发者和用户群体的利益。测试是质量保证一个砝码,它提供对系统规格说明、设计和编码的最终评审,是发现系统缺陷和错误的有力手段。61测试的目的及相关问题软件测试分为几个部分单元测试集中检查软件设计的最小单元模块,包括程序测试,即发现程序中的代码错误,然后逐一解决;组装测试相当于联调,主要是考察模块间的接口和各模块之间的联系。这是一个持续的过程,可以在将组件加入某一项之前逐个的加以测试,也可以把项目连编成应用程序之后再进行测试。确认测试主要检查软件功能与用户的需求是否一致。在一般的情况下,这些步骤都被顺序地实现。在测试和调试应用程序时,应注意以下问题1程序设计者不应测试自己设计的程序;2测试用例的设计不仅要有合理的输入数据,还要有不合理的输出数据;3除了检查程序是否做完了它应做的事之外,还要检查它是否做完了它不应做的事。在测试和调试应用程序后,拼图游戏系统应达到以下要求1能较好的完成系统应具备的基本功能;2运行不会导致崩溃或产生错误信息;3在一般情况下操作正常;4在一定范围内,操作合理,或能提供适当的错误信息。程序调试和组件测试我们在设计和编码的过程中通过编译程序编译、软件错误信息的提供,我们可以逐步修正错误,程序能够得到一步的完善。每当测试一个程序时,人们总希望为程序增加一些价值。利用测试来增加程序的价值,是指通过测试,找出并修改尽可能多的程序缺陷,从而提高程序的可靠性或质量。因此,不要只是为了证明程序能够正确运行而去测试程序。相反,应该一开始就假设程序中隐藏着错误(这种假设几乎对所有的程序都成立),然后测试程序,发现尽可能多的错误。事实上,如果把测试目标定位于要证明程序中没有缺陷,那么就会在潜意识中倾向于实现这个目标。也就是说,测试人员会倾向于挑选那些使程序失效的可能性较小的测试数据。另一方面,如果把测试目标定位于要证明程序中存在缺陷,那么就会选择一些容易发现程序缺陷的测试数据。而后一种态度会比前者给程序增加更多的价值。62测试方法测试,通常有两种方式单元测试和组装测试。对本系统而言,选择单元测试的测试方法。单元测试中设计白盒测试以及黑盒测试。黑盒测试即针对程序所有功能设计的测试方法,而白盒测试针对程序的逻辑结构设计测试用例,用逻辑覆盖率来衡量测试的完整性。黑盒测试的缺点在于其难于衡量测试的完整性,而白盒测试恰恰具有易于衡量测试完整性的优点,两者之间具有极好的互补性。所以在对一个软件产品进行测试时,为了谨慎全面的测试出软件的质量,通常使用白盒测试法,也就是根据程序的内部处理逻辑来设计测试用例。白盒测试法主要的方法有语句覆盖,条件覆盖,判定覆盖,判定条件覆盖,条件组合覆盖,路径覆盖,本系统根据白盒测试法来设计测试用例。白盒技术白盒测试是结构测试,所以被测对象基本上是源程序,以程序的内部逻辑为基础设计测试用例。1逻辑覆盖程序内部的逻辑覆盖程度,当程序中有循环时,覆盖每条路径是不可能的,要设计使覆盖程度较高的或覆盖最有代表性的路径的测试用例。下面根据图71所示的程序,分别讨论几种常用的覆盖技术。(1)语句覆盖。为了提高发现错误的可能性,在测试时应该执行到程序中的每一个语句。语句覆盖是指设计足够的测试用例,使被测试程序中每个语句至少执行一次。(2)判定覆盖。判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次,因此判定覆盖也称分支覆盖。(3)条件覆盖。条件覆盖是指设计足够的测试用例,使得判定表达式中每个条件的各种可能的值至少出现一次。(4)判定条件覆盖。该覆盖标准指设计足够的测试用例,使得判定表达式的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次。(5)条件组合覆盖。条件组合覆盖是比较强的覆盖标准,它是指设计足够的测试用例,使得每个判定表达式中条件的各种可能的值的组合都至少出现一次。(6)路径覆盖。路径覆盖是指设计足够的测试用例,覆盖被测程序中所有可能的路径。在实际的逻辑覆盖测试中,一般以条件组合覆盖为主设计测试用例,然后再补充部分用例,以达到路径覆盖测试标准。2循环覆盖3基本路径测试黑盒技术1等价类划分(1)划分等价类。在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。在规定了输入数据的一组值(假定N个),并且程序要对每一个输入值分别处理的情况下,可确立N个有效等价类和一个无效等价类。在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。(2)确定测试用例。为每一个等价类编号。设计一个测试用例,使其尽可能多地覆盖尚未被覆盖过的合理等价类。重复这步,直到所有合理等价类被测试用例覆盖。设计一个测试用例,使其只覆盖一个不合理等价类。3边界值分析使用边界值分析方法设计测试用例时一般与等价类划分结合起来。但它不是从一个等价类中任选一个例子作为代表,而是将测试边界情况作为重点目标,选取正好等于、刚刚大于或刚刚小于边界值的测试数据。如果输入条件规定了值的范围,可以选择正好等于边界值的数据作为合理的测试用例,同时还要选择刚好越过边界值的数据作为不合理的测试用例。如输入值的范围是1,100,可取0,1,100,101等值作为测试数据。如果输入条件指出了输入数据的个数,则按最大个数、最小个数、比最小个数少1、比最大个数多1等情况分别设计测试用例。如,一个输入文件可包括1255个记录,则分别设计有1个记录、255个记录,以及0个记录的输入文件的测试用例。对每个输出条件分别按照以上原则或确定输出值的边界情况。如,一个学生成绩管理系统规定,只能查询9598级大学生的各科成绩,可以设计测试用例,使得查询范围内的某一届或四届学生的学生成绩,还需设计查询94级、99级学生成绩的测试用例(不合理输出等价类)。由于输出值的边界不与输入值的边界相对应,所以要检查输出值的边界不一定可能,要产生超出输出值之外的结果也不一定能做到,但必要时还需试一试。如果程序的规格说明给出的输入或输出域是个有序集合(如顺序文件、线形表、链表等),则应选取集合的第一个元素和最后一个元素作为测试用例。3错误推测在测试程序时,人们可能根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例,这就是错误推测法。4因果图等价类划分和边界值方法分析方法都只是孤立地考虑各个输入数据的测试功能,而没有考虑多个输入数据的组合引起的错误。5综合策略每种方法都能设计出一组有用例子,用这组例子容易发现某种类型的错误,但可能不易发现另一类型的错误。因此在实际测试中,联合使用各种测试方法,形成综合策略,通常先用黑盒法设计基本的测试用例,再用白盒法补充一些必要的测试用例。63部分测试用例测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。测试用例是将软件测试的行为活动做一个科学化的组织归纳,目的是能够将软件测试的行为转化成可管理的模式;同时测试用例也是将测试具体量化的方法之一,不同类别的软件,测试用例是不同的。不同于诸如系统、工具、控制、游戏软件,管理软件的用户需求更加不同的趋势。631拼图测试表61拼图测试测试用例1描述测试游戏是否能拼图,能否拼图成功测试方法点击鼠标左右键进行游戏,直至拼图成功期望结果成功产生相应的拼图成功效果测试结果正确或错误正确拼图测试的测试用例表如表61所示,表中体现出该用例是针对拼图游戏是否能和正常拼图而进行测试的。测试方法即运行程序即可,若能正常拼图,达到预期目标,即点击鼠标左右键进行游戏,能够拼图,并直至拼图成功,那么说明拼图过程正常,测试完成了预期目标,达到测试目的。632游戏难度测试表62游戏难度测试测试用例2描述测试游戏难度情况测试方法点击游戏难度选择相应的难度,每种都能拼图成功期望结果初级,中级,高级均可拼图成功测试结果(正确或错误)正确游戏难度测试的测试用例表如表62所示,表中体现出该用例是针对拼图游戏能否正常进行难度选择,并完成个难度的拼图游戏而进行测试的。测试方法即运行程序即可,若能选择三中难度并且可以正常拼图,直至拼图成功,即点击游戏难度选择相应的难度,每种都能拼图成功,那么说明拼图过程难度选择功能正常,测试完成了预期目标,达到测试目的。633拼图游戏窗体外观测试表63游戏外观测试测试用例3描述测试拼图游戏窗体外观测试方法点击系统提供的相应外观选项期望结果出来的效果均是选择的相应选项相符测试结果(正确或错误)正确游戏窗体外观测试的测试用例表如表63所示,表中体现出该用例是针对拼图游戏能否正常进行窗体外观选择的。测试方法即运行程序即可,从难度选择按钮到达不同难度游戏界面项,若能选择三种外观样式并且可以正常显示外观,即点击系统提供的相应的外观选项,那么说明拼图过程中外观更换功能正常,测试完成了预期目标,达到测试目的。64测试分析和总结测试的内容应该包括合法性测试、非法测试以及边缘测试,所以除了以上测试用例之外,还对该软件系统进行了边缘测试以及非法测试。通过测试,同样可以证明软件系统能够在非法信息的录入下报错,并且能够对边缘信息的录入做出反应。这个软件相当于一个拼图游戏的内核,可以围绕着这个内核进行许多的扩展,做成符合不同要求的拼图游戏。例如,在这个游戏中加进一个定时器,将拼图的时间设置为一个与重玩次数相关的算法生成的时间或者设置成有用户自定义的形式。当定时器的时间用完的时候如果用户还没有完成拼图,那么就游戏失败。这个扩展时很容易实现的,而且游戏的图片随机打散算法和拼图算法以及拼图区和原图区的绘图等核心部分也不会改变。还例如,还可以扩展成让用户自己选择一副自己喜欢的图片进行拼图。那么这个时候需要一个动态加载用户图片的模块。另外,就是需要将QIMAGE对象QIMAGE对象是表示拼图游戏使用的图片的一个类从PAINTEVENTQPAINTEVENTEVENT函数的局部数据区移动到PINTUWINDOW的全局数据区成为类PINTUWINDOW的一个私有成员。这个动态加载图片的模块就用以更新QIMAGE对象中使用的图片。这种情况下,游戏的图片随机打散算法和拼图算法都不会改变。由于用户选择的图片的像素不同,拼图区和原图区的绘图只需要稍稍修改一个计算就可以了。所以综上所述,该软件一系列的测试能够证明系统数据处理具有安全性及稳定性,在数据出错情况下能够给出正确提示,当系统出现异常时,能够正确捕获并进行相应的处理或给予提示。结论相信在大学期间,很多同学都参与过或者是编写过拼图游戏软件的程序,那么这次作为毕业设计,要想更加出色的完成这个课题,并且具有独特之处,就是我编写程序之前首先要考虑到的问题。但是,对于拼图游戏而言,寻找游戏的创新突破口也有一定的难度。从游戏的功能方面入手寻找创新突破口,我决定在传统的拼图游戏的功能基础之上,增加一个自定义图片功能,让用户可以选择自己电脑里的图片,进行拼图游戏。其次,功能设计方面,出色地完成好难度区分也是一个难题。当然在完成该课题的过程中,都一一解决了这些问题。其他编程过程中的难点还包括如何拆分图片、如何实现背景音乐的播放等。除了对于游戏功能方面的创新,还在制作拼图游戏的选材方面寻求突破,也就是对游戏界面的设计多花心思,多下功夫。尽力去满足更多用户群体的需求,争取满足不同用户的喜好。在做毕业设计以前,我对C游戏开发只是停留在理论知识的水平上,是“纸上谈兵”,缺乏实际的软件开发经验。这次通过做毕业设计,我完成了拼图游戏的软件开发任务。在整个开发过程中也遇到了很多问题,如载入图片的处理,难度选择,外观更换,图片分割,图片移动等。对其设计体会总结如下1为了熟悉拼图游戏的相关运作和功能设计,我从网上下载了各种拼图游戏,了解并研究各自的功能设计,总结出哪些是好的功能设计,哪些是不必要的设计。对尝试过的拼图游戏进行总结,将各自的优点融入我的设计之中。2完成了从“小而全”,到“全而精”的转变。设计过程中,经常会遇到困难,我学会通过反复思考和测试,找出自己的错误并加以改正,再进行下一个步骤。这个程序就是在这样反复的发现错误、改正错误中完成的。完成游戏雏形之后,再进行逐步的完善。3这是一个不断学习新鲜事物的过程,从设计初的不懂到最后能够顺利完成,我体会到在实践中学习的重要性,这对于将来我走上工作岗位具有重要意义,相信这也是布置此项毕业设计的初衷。开发过程中我学到了一些经验系统分析的好坏将决定着的系统开发成功与否,一份好分析设计将是成功开发主要因素。我们在着手开发之前不要急于编程,先应有较长的时间去把分析做好,做好数据库设计工作,写出相关的开发文档等。然后再开始编写程序代码,这样做到每写一步代码心底有数,有条不絮。良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30的工作时间写技术文档是很正常的,缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。这次的这个小小的项目,就因为文档上的一点点理解错误让我们花了很大的工夫去改代码,改页面。很庆幸的是,这是一个小项目,要是大项目,这种问题可能就会导致大量的代码修改,可见文档在一个项目中起者巨大的做用。此外,良好的代码编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。作为一个程序员,对需求的理解能力也是很重要的,只有真正理解了一个模块的作用,才会写出高效率的代码,才能使整个软件项目作出来更加优秀,具备更好的安全性和稳定性,我在写代码的过程中就遇到了需求理解上的问题,使得写出来的代码功能不全,幸好不是给客户发现在,要不,这个软件的商业价值可能就会打折扣了。单元测试对于一个程序员来说是不可不做的一项工作,不做好测试就会给后期的集成工作带来麻烦,往往为了一个小问题会让我们查找好多模块,给后期工作带来很大麻烦。此外,我还觉得,我个人在这次设计中走了很多弯路。主要是因为平时很少接触软件开发工作,尽管相关理论考试已经通过了,但在应用方面缺乏经验,如果及时得到老师或专家的指点,象这样的系统开发起来应该还比较容易。经过三个月的不断努力,毕业设计内容已经完成了。回顾这个设计过程,我学到了许多书本上没有学到的知识。通过这次自己制作软件,丰富了自己的实践技能,扩展了相关知识,使我受益匪浅,也感受到了软件开发的不易。由于我对软件开发还只是一个新手,了解的不多,这其中一定还有很多的不足,也许有些模块未能做得尽如人意。但可以肯定的是,通过此次毕业设计,我确实收获了许多意想不到的东西,不光是编程语言,也包括对于软件设计的重新认识以及对于软件开发人员工作的理解。总的来说,我认为此次毕业设计还是比较成功的,这也是我大学四年来最具成就感的软件开发程序设计。参考文献1杜晨互联网上的拼图游戏JIT经理世界,2005,(11)2谭浩强C程序设计(第3版)M清华大学出版社,20053刘海燕,荆涛LINUX系统应用与开发教程M机械工业出版社,20104严蔚敏,吴伟民数据结构(C语言版)M清华大学出版社,20075章英,叶颖泽在“拼图”游戏中学习C语言J湖北教育学院院报,2007,026刘天时,李皎,陈明晰游戏算法分析在C语言教学中的应用J中国科学信息,2007,(04)7杜晨互联网上的拼图游戏JIT经理世界,2005,(11)8龚立威一种嵌入式游戏系统的研究与实现D华南理工大学,20109AAPUNTAMBEKARADVANCEDSTRUCTURESANDALGORITHMSMTECHNICALPUBLICATIONS,200810STPHENPRATACPRIMERPLUS,FIFTHEDITIONMSAMSPUBLISHING,200511ANDREWANDREWCTRAPSANDPITFALLSMAADDISONWESLEY,1988致谢论文都是闫宏印老师全面、具体指导下完成进行的,闫宏印老师渊博的学识、敏锐的思维、民主而严谨的作风使我受益非浅,并终生难忘。在整个软件设计完成过程中,在整体的思路设计,功能分析的设计方法和处理技巧以及功能实现的算法等方面得到了亢海波老师的大量指导和帮助。感谢闫宏印老师、亢海波老师在毕业设计工作中给予的帮助。感谢我的学友和朋友对我的关心和帮助。外文原文CMAINARTICLECVARIABLETYPESANDDECLARATIONS,CHASASTATICWEAKTYPINGTYPESYSTEMTHATSHARESSOMESIMILARITIESWITHTHATOFOTHERALGOLDESCENDANTSSUCHASPASCALTHEREAREBUILTINTYPESFORINTEGERSOFVARIOUSSIZES,BOTHSIGNEDANDUNSIGNED,FLOATINGPOINTNUMBERS,CHARACTERS,ANDENUMERATEDTYPESENUMC99ADDEDABOOLEANDATATYPETHEREAREALSODERIVEDTYPESINCLUDINGARRAYS,POINTERS,RECORDSSTRUCT,ANDUNTAGGEDUNIONSUNIONCISOFTENUSEDINLOWLEVELSYSTEMSPROGRAMMINGWHEREESCAPESFROMTHETYPESYSTEMMAYBENECESSARYTHECOMP

温馨提示

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

评论

0/150

提交评论