毕业设计之推箱子_第1页
毕业设计之推箱子_第2页
毕业设计之推箱子_第3页
毕业设计之推箱子_第4页
毕业设计之推箱子_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、安徽大学本科毕业论文(设计、创作)题目: 面向过程的推箱子设计 学生姓名: 王* 学号: P010* 院(系): 电子信息工程专业 专业: 电子信息工程 入学时间: 2010 年 9 月导师姓名: 李* 职称/学位: 副教授/硕士 导师所在单位: 电子信息工程学院 完成时间: 2014 年 6 月面向过程的推箱子设计摘 要推箱子游戏是一款很有趣味的游戏,目的在于训练玩家的逻辑思维能力。游戏中通过控制人物上下左右移动,将箱子推到指定的地点,从而通关游戏。本文主要介绍了推箱子游戏的游戏规则、需求分析、流程设计以及游戏中的主要算法的分析、设计和实现。并通过游戏规则分析,确定任务流程,展开设计。最终在

2、VC6.0和OpenCV上实现图像加载、显示和游戏交互。本次设计实现了推箱子游戏的基本功能。关键词:推箱子;图像处理;OpenCVProcedure Oriented Sokoban DesignAbstractSokoban game, a very interesting game, which is aimed at training  logical thinking ability of player. By controlling the porters moved from top to bottom, or left to ri

3、ght, and push the box to the specified location, and complete the game at last. This paper mainly introduces the rules and features of Sokoban game, analysis of the demand of its design, execution process, analysis and implementation of algorithm design in the game. This design was analyzed by

4、rules of the game, determining the task flow and analysis the system, and finally realized image load, display, mutual in VC6.0 and OpenCV. The design realized the basic functions of Sokoban game.Keywords: Sokoban; image processing; OpenCV- III -目 录1 引言12 推箱子游戏概述22.1 游戏起源22.2 游戏的操作方法22.3 游戏规则23 使用软件

5、简介23.1 VC6.0简介23.2 OpenCV简介24 任务描述34.1 界面显示34.2 实现键盘操作34.3 图像变化显示34.4 游戏胜负的判断35 系统分析35.1 界面设计35.2 数据组织35.3 游戏执行流程图45.4 程序中各个函数的简要介绍56 推箱子游戏算法的设计和实现56.1 地图的绘制与读取56.2 查找人物坐标56.3 键盘操作66.4 游戏胜利的判断76.5 整合与测试77结束语8主要参考文献9致 谢101 引言目前,在中国乃至全世界,游戏产业已经逐渐成为微控制器领域的一个相当庞大的分支。随着网络和智能手机的兴起,各种网络游戏和手机游戏在国内层出不穷。从魔兽世界

6、、英雄联盟到水果忍者、神庙逃亡,巨大的市场需求量使游戏行业在中国飞速发展。未来,游戏必将成为网络竞争中的主角,它的商业利益和商业价值是无法估量的。中国,一个人口众多的国家,随着人们生活水平的提高,温饱已不是最终的目的,我们寻求的是更加多姿多彩的生活,那我们又怎能错过游戏这一最佳休闲娱乐项目呢?所以游戏在我国的发展前景一片大好1。经典的推箱子是一个来自日本的古老游戏,目的在于训练人的逻辑思维能力。在一个狭小的仓库中,要求把箱子推到指定的位置,稍有不慎就会出现箱子无法移动或通道被堵住的情况。所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。目前,推箱子作为一个经典游

7、戏,非但没有没落,还被很多编程爱好者开发出了各种版本、各种类型。本次毕业设计我将就推箱子游戏做一个研究。通过本次设计让我能更好的将理论与实践相结和,加深对理论的理解,同时培养我的动手意识,强化专业知识,为以后研究更加复杂的设计打下坚实的基础。本设计主要是基于VC6.0和OpenCV软件实现的。2 推箱子游戏概述推箱子已被改编成各种版本,有松鼠推箱子、小狐狸推箱子、机器人推箱子、吉豆推箱子以及3D推箱子等,但玩法基本相同。2.1 游戏起源经典的推箱子游戏是一个来自日本的古老游戏,1981年由日本人今林宏行首创,在1982年12月由Thinking Rabbit公司首次发行,名“仓库番”,目的是训

8、练人的逻辑思维能力2。推箱子游戏是目前比较流行的游戏之一,很多操作系统和流行软件都会带有这种游戏。它既能锻炼思维的严密性,又有很多趣味性。游戏中箱子只可以推,不可以拉,并且一次只能推动一个,胜利条件就是把所有的箱子都推到目的地。目前市场上有着各种版本的推箱子,并且可以在多个平台运行。2.2 游戏的操作方法在游戏中会出现一个封闭的围墙,围墙里有一个人物、若干个箱子和箱子的放置点。玩家需要利用方向键控制人物的上下左右移动,来推动界面中的箱子到达指定的箱子放置点。2.3 游戏规则游戏中箱子只能推动而不能拉动,并且一次只能推动一个箱子。注意不要把箱子推到死角,否则就无法再推动它了。当玩家把全部的箱子都

9、推到箱子的放置点时,玩家顺利通过当前游戏关卡,并进行下一关的游戏。如果玩家无法将指定的箱子全部推到放置点,则玩家失败,此时玩家可以重新开始当前关卡的游戏或者关闭窗口退出游戏。3 使用软件简介本设计主要是基于VC6.0和OpenCV实现的。3.1 VC6.0简介VC6.0即Microsoft Visual C+ 6.0,是由微软推出的一款C+编译器,是将“高级语言”翻译为“机器语言(低级语言)”的程序。VC6.0是一个功能强大的可视化软件开发工具。它不但是一个C+编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment

10、, IDE)。VC6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。自1993年微软公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具3。3.2 OpenCV简介OpenCV的全称是:Open Source Computer Vision Library。OpenCV于1999年由Intel建立,现在由Willow Garage提供支持。OpenCV是一个基于开源发行的跨平台计算机视觉库

11、,可以在Linux、Windows、IOS和Mac OS操作系统上运行。它轻量级而且高效,由一系列C函数和少量C+构成,可以不必学C+,同时提供了Ruby、Python、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法4。较directx方便很多。结合VC6.0可以较为容易的完成本次设计。4 任务描述对游戏设计进行需求分析,描述游戏应该具有的功能。4.1 界面显示能够绘制出各关的地图并能成功的加载到游戏界面上显示出来。4.2 实现键盘操作能够接受到键盘所输入的方向键信息,并根据不同的方向键信息把游戏人物移动到相应的位置。例如,当玩家敲击方向键“S”时,如果向下的位置是可移

12、动的,那么就把游戏人物向下移动一个方格。4.3 图像变化显示当把箱子推到目的区域时,会显示出不同的形象;当人物移动到目的区域时也会显示出另外一种形象。4.4 游戏胜负的判断在游戏中,当玩家把所有的箱子都推到箱子放置点时,则玩家顺利胜利通过当前游戏关卡,并进入下一关游戏。如果玩家无法将所有的箱子推到箱子放置点时,则玩家失败,此时可以重新开始当前关卡的游戏或者退出游戏。5 系统分析介绍游戏界面设计、数据组织以及各种函数和任务执行流程图。5.1 界面设计程序中先创建一个窗口,然后以一副白色的图片(大小为600×600)作为背景图片,再用各种小图块(大小为60×60)复制到背景图片

13、中,来绘制游戏各关的地图。将背景图片显示到窗口中即出现了游戏的界面,游戏第一关的界面如图1所示:图1:第一关界面5.2 数据组织程序中先定义了全局整型变量x和y来表示人物的坐标,一个控制游戏是否重新开始的全局整型loop变量,一个存放地图图片的数组img_num8,以及一个存放背景图的变量img_bgd。5.3 游戏执行流程图游戏从第一关开始,通过上下左右方向键来控制人物移动从而推动箱子,可以在游戏中的任何时刻选择退出。如果游戏无成功希望,可以按空格键回到当前关卡的开始状态;如果成功完成当前关卡,则进入下一关;如果当前关卡是最后一关(游戏共四关),则显示通关信息,提示游戏结束,游戏执行流程如图

14、2所示:是否继续 完成? 开始开始游戏有无成功 希望?是否成功?是否是第 4关? 否否是否否是初始化地图退出回到开始进入下一关是是显示通关图2:游戏执行流程5.4 程序中各个函数的简要介绍void Refresh(int a10); /刷新背景图函数void find(int a10); /找人物坐标函数void Smileboy(int a10); /画一个胜利后的开心人物int win(int a10); /判断游戏是否胜利函数void move(int a10, int x1, int y1); /移动函数int play(int a10); /游戏过程void Gamestar(voi

15、d); /游戏开始函数6 推箱子游戏算法的设计和实现6.1 地图的绘制与读取将地图数组中的数据绘制成地图图像。设计要求如下:(1)根据要求,实现相应的函数,以达到能够正确的绘制出各个地图,程序中定义了地图数组,地图数组中各元素代表的意思如下:用0表示空地,1表示人物,2表示箱子,3表示目的地,4表示在目的地上的人物,5表示箱子在目的地上,6表示围墙,7表示完成任务后的人物(一个开心的人物)。(2)能读取地图数据,根据不同的地图数据绘制出相应的地图。本程序利用刷新函数Refresh,刷新背景图片以得到不同的地图图片。主要代码实现如下:void Refresh(int a10)for(int i=

16、0;i<10;i+)for(int j=0;j<10;j+) CvRect srect=cvRect(0,0,60,60); /创造矩形区域 CvRect drect=cvRect(j*60,i*60,60,60); /创造矩形区域 cvSetImageROI(img_numaij,srect); /基于给定的矩形设置图像的ROI cvSetImageROI(img_bgd,drect); /基于给定的矩形设置图像的ROI cvCopy(img_numaij,img_bgd); /复制 cvResetImageROI(img_bgd); /释放基于给定的矩形设置图像的ROI6.2

17、查找人物坐标设计中要想使人物移动,首先要找到人物的起始位置,然后才能开始移动。人物在地图中有两种情况:人在空地上和人在目的地上。void find(int a10)for(x = 0; x < 10; x+)for(y = 0; y < 10; y+)if(axy = 1|axy = 4)return;6.3 键盘操作程序在接受玩家键盘输入信息后,对箱子移动与否等进行处理:(1)程序通过截获当前窗口中键盘按下的信息来判断玩家所按下的按键。(2)要判断所按的方向键方向是否可以移动,若可移动则移动后地图数据要根据具体情况刷新。(3)根据玩家所按下的按键把人物的相关坐标进行加减。(4)移

18、动后需要重新定位人物的位置坐标。(x,y)代表人物坐标。下面是移动人物过程中的全部情况:如果人物移动的下一步是空白或者目的地,则可以移动。更改人物移动后地图坐标并刷新地图;if(ax+x1y+y1=0|ax+x1y+y1=3) axy-;ax+x1y+y1+;Refresh(a);return;如果人物移动的下一步是墙,则不可以移动;if(ax+x1y+y1=6)return;如果人物移动的下一步是空地上的箱子,并且移动方向的第二步是空地或者目的地,则可以移动,更改人物移动后地图坐标并刷新地图。如果移动方向的第二步是墙,则不可以移动;if(ax+x1y+y1=2)if(ax+2*x1y+2*y

19、1=0|ax+2*x1y+2*y1=3) axy-;ax+x1y+y1-=1;ax+2*x1y+2*y1+=2;Refresh(a);return;elsereturn;如果人物移动的下一步是箱子在目的地上,并且移动方向第二步是空地或者目的地,则可以移动,更改人物移动后地图坐标并刷新地图。如果移动方向第二步是墙,则不可以移动。if(ax+x1y+y1=5)if(ax+2*x1y+2*y1=0|ax+2*x1y+2*y1=3)axy-;ax+x1y+y1-=1;ax+2*x1y+2*y1+=2;Refresh(a);return;elsereturn;6.4 游戏胜利的判断每次在玩家移动人物后,

20、对当前地图数组进行判断,如果还存在箱子(即地图数组中存在值为2的元素),就说明玩家未取得胜利;反之就说明玩家已经将所有的箱子推到了目的区域,取得了当前关卡的胜利。主要代码实现如下:for(int x1 = 0; x1 < 10; x1+)for(int y1 = 0; y1 < 10; y1+) if(ax1y1 = 2) return 0; /如果还有箱子返回假return 1;/如果没有箱子返回真6.5 整合与测试(1)编译链接程序,检查程序是否有错误,若有则查找错误并进行调试;(2)编译链接程序无错误后,执行程序,检查结果若有错误,则查找错误并进行调试;(3)若程序成功执行无

21、错误后,看是否能出现游戏界面窗口,若成功则对游戏的各项进行测试。若有功能未实现,则需要重新修改代码并进行调试。7 结束语近年来随着科技的飞速发展,VC语言的应用正在不断的深入。本次设计便是基于VC的一个小游戏,这个小游戏在功能方面基本到位。基于小游戏的原则,没有加入太多花俏的图片,也没有华丽的界面设计。正如前人所说,小游戏之所以流行,就是因为它小。即使在很破旧的机器上,也基本都能顺畅运行,没有卡顿。正是由于它的简洁方便,才能长盛不衰。本论文阐述了推箱子游戏的设计与实现全过程,并在论文中相应的位置插入了图片、系统设计流程图以及一些编程思想代码,更加清晰的描述了该系统的实现过程。论文主要内容如下:(1)对推箱子小游戏进行

温馨提示

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

评论

0/150

提交评论