ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:71.82KB ,
资源ID:10057131      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10057131.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(毕业设计之推箱子.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

毕业设计之推箱子.docx

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

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

3、ed 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 ofalgorithm design in the game. This design was analyzed by rules of the game, determining the task fl

4、ow 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; OpenCV1 引言目前,在中国乃至全世界,游戏产业已经逐渐成为微控制器领域的一个相当庞大的分支。随着网络和智能 的兴起,各种网络游戏和 游戏在国内层出不穷。从魔兽世界、英雄联盟到水果忍者、神庙逃亡,巨大的市场需求量使

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

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

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

8、戏。如果玩家无法将指定的箱子全部推到放置点,则玩家失败,此时玩家可以重新开始当前关卡的游戏或者关闭窗口退出游戏。3 使用软件简介OpenCV实现的。简介,是由微软推出的一款C+编译器,是将“高级语言”翻译为“机器语言低级语言”的程序。VC6.0是一个功能强大的可视化软件开发工具。它不但是一个C+编译器,而且是一个基于Windows操作系统的可视化集成开发环境integrated development environment, IDE。VC6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。这些组件通过一个名为Developer S

9、tudio的组件集成为和谐的开发环境。自1993年微软公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具3。3.2 OpenCV简介OpenCV的全称是:Open Source Computer Vision Library。OpenCV于1999年由Intel建立,现在由Willow Garage提供支持。OpenCV是一个基于开源发行的跨平台电脑视觉库,可以在Linux、Windows、IOS和Mac OS操作系统上运行。它轻量级而且高效,由一系列C函数和少量C+构成,可以不必学C+,同时提供了Ruby、Python、MAT

10、LAB等语言的接口,实现了图像处理和电脑视觉方面的很多通用算法4。较directx方便很多。结合VC本次设计。4 任务描述对游戏设计进行需求分析,描述游戏应该具有的功能。4.1 界面显示能够绘制出各关的地图并能成功的加载到游戏界面上显示出来。4.2 实现键盘操作能够接受到键盘所输入的方向键信息,并根据不同的方向键信息把游戏人物移动到相应的位置。例如,当玩家敲击方向键“S”时,如果向下的位置是可移动的,那么就把游戏人物向下移动一个方格。4.3 图像变化显示当把箱子推到目的区域时,会显示出不同的形象;当人物移动到目的区域时也会显示出另外一种形象。4.4 游戏胜负的判断在游戏中,当玩家把所有的箱子都

11、推到箱子放置点时,则玩家顺利胜利通过当前游戏关卡,并进入下一关游戏。如果玩家无法将所有的箱子推到箱子放置点时,则玩家失败,此时可以重新开始当前关卡的游戏或者退出游戏。5 系统分析介绍游戏界面设计、数据组织以及各种函数和任务执行流程图。5.1 界面设计程序中先创建一个窗口,然后以一副白色的图片大小为600600作为背景图片,再用各种小图块大小为6060复制到背景图片中,来绘制游戏各关的地图。将背景图片显示到窗口中即出现了游戏的界面,游戏第一关的界面如图1所示:图1:第一关界面5.2 数据组织程序中先定义了全局整型变量x和y来表示人物的坐标,一个控制游戏是否重新开始的全局整型loop变量,一个存放

12、地图图片的数组img_num8,以及一个存放背景图的变量img_bgd。 游戏执行流程图游戏从第一关开始,通过上下左右方向键来控制人物移动从而推动箱子,可以在游戏中的任何时刻选择退出。如果游戏无成功希望,可以按空格键回到当前关卡的开始状态;如果成功完成当前关卡,则进入下一关;如果当前关卡是最后一关游戏共四关,则显示通关信息,提示游戏结束,游戏执行流程如图2所示:图2:游戏执行流程5.4 程序中各个函数的简要介绍void Refresh(int a10); /刷新背景图函数void find(int a10); /找人物坐标函数void Smileboy(int a10); /画一个胜利后的开心

13、人物int win(int a10); /判断游戏是否胜利函数void move(int a10, int x1, int y1); /移动函数int play(int a10); /游戏过程void Gamestar(void); /游戏开始函数6 推箱子游戏算法的设计和实现6.1 地图的绘制与读取将地图数组中的数据绘制成地图图像。设计要求如下:1根据要求,实现相应的函数,以到达能够正确的绘制出各个地图,程序中定义了地图数组,地图数组中各元素代表的意思如下:用0表示空地,1表示人物,2表示箱子,3表示目的地,4表示在目的地上的人物,5表示箱子在目的地上,6表示围墙,7表示完成任务后的人物一个

14、开心的人物。2能读取地图数据,根据不同的地图数据绘制出相应的地图。本程序利用刷新函数Refresh,刷新背景图片以得到不同的地图图片。主要代码实现如下:void Refresh(int a10) for(int i=0;i10;i+) for(int j=0;j10;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,drec

15、t); /基于给定的矩形设置图像的ROI cvCopy(img_numaij,img_bgd); /复制 cvResetImageROI(img_bgd); /释放基于给定的矩形设置图像的ROI6.2 查找人物坐标设计中要想使人物移动,首先要找到人物的起始位置,然后才能开始移动。人物在地图中有两种情况:人在空地上和人在目的地上。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程序通过截获当前窗口中

16、键盘按下的信息来判断玩家所按下的按键。2要判断所按的方向键方向是否可以移动,假设可移动则移动后地图数据要根据具体情况刷新。3根据玩家所按下的按键把人物的相关坐标进行加减。4移动后需要重新定位人物的位置坐标。x,y代表人物坐标。下面是移动人物过程中的全部情况:如果人物移动的下一步是空白或者目的地,则可以移动。更改人物移动后地图坐标并刷新地图;if(ax+x1y+y1=0|ax+x1y+y1=3) axy-; ax+x1y+y1+; Refresh(a); return;如果人物移动的下一步是墙,则不可以移动;if(ax+x1y+y1=6) return;如果人物移动的下一步是空地上的箱子,并且移

17、动方向的第二步是空地或者目的地,则可以移动,更改人物移动后地图坐标并刷新地图。如果移动方向的第二步是墙,则不可以移动;if(ax+x1y+y1=2) 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; else return;如果人物移动的下一步是箱子在目的地上,并且移动方向第二步是空地或者目的地,则可以移动,更改人物移动后地图坐标并刷新地图。如果移动方向第二步是墙,则不可以移动。 if(ax+x1y+y1=5) if(ax+2*x1y+2*y1=0|ax+2

18、*x1y+2*y1=3) axy-; ax+x1y+y1-=1; ax+2*x1y+2*y1+=2; Refresh(a); return; else return;6.4 游戏胜利的判断每次在玩家移动人物后,对当前地图数组进行判断,如果还存在箱子即地图数组中存在值为2的元素,就说明玩家未取得胜利;反之就说明玩家已经将所有的箱子推到了目的区域,取得了当前关卡的胜利。主要代码实现如下:for(int x1 = 0; x1 10; x1+) for(int y1 = 0; y1 10; y1+) if(ax1y1 = 2) return 0; /如果还有箱子返回假 return 1; /如果没有箱

19、子返回真6.5 整合与测试1编译链接程序,检查程序是否有错误,假设有则查找错误并进行调试;2编译链接程序无错误后,执行程序,检查结果假设有错误,则查找错误并进行调试;3假设程序成功执行无错误后,看是否能出现游戏界面窗口,假设成功则对游戏的各项进行测试。假设有功能未实现,则需要重新修改代码并进行调试。7 结束语近年来随着科技的飞速发展,VC语言的应用正在不断的深入。本次设计便是基于VC的一个小游戏,这个小游戏在功能方面基本到位。基于小游戏的原则,没有加入太多花俏的图片,也没有华美的界面设计。正如前人所说,小游戏之所以流行,就是因为它小。即使在很破旧的机器上,也基本都能顺畅运行,没有卡顿。正是由于

20、它的简洁方便,才能长盛不衰。本论文阐述了推箱子游戏的设计与实现全过程,并在论文中相应的位置插入了图片、系统设计流程图以及一些编程思想代码,更加清晰的描述了该系统的实现过程。论文主要内容如下:1对推箱子小游戏进行了具体的调研。对推箱子小游戏的游戏起源、操作方法和游戏基本规则进行了详细介绍;2对本程序设计所需要的软件VC6.0和OpenCV进行了简单的介绍;3对游戏设计进行需求分析。描述游戏应该具有的功能并对推箱子游戏设计任务作了具体介绍;4对推箱子游戏设计进行了系统分析。包括游戏界面设计,数据结构的组织和游戏的执行流程;5对推箱子游戏算法的设计和实现进行了描述。本程序是基于VC6.0和OpenC

21、V开发的,基本实现了推箱子游戏的功能,还有待于继续努力设计出更完美的推箱子游戏。主要参考文献:1 杨正华, 张秋生. Visual C+游戏编程导学M. 北京: 清华大学出版社, 2004年.2 夏敏捷, 潘惠勇. Flash AS3实现推箱子游戏J/OL. 电脑编程技巧与维护, 2014(4). 3 高守传等. VisualC+6.0开发指南M. 北京: 人民邮电出版社,2007年.4 布拉德斯基, 克勒等. 学习OpenCVM. 北京: 清华大学出版社, 2009年.致 谢在论文完成之际,我要特别感谢我的指导老师李新华老师的热情关心和悉心指导。在我撰写论文的过程中,我得到了李新华老师悉心细致的教诲和无私的帮助,尤其是其不厌其烦的帮助我进行论文的修改和改良。同时,感谢我的同学们,他们给予了我很多素材,还在论文的撰写和排版过程中提供了热情的帮助。另外,感谢这篇论文所涉及到的所有学者。本文引用了数位学者的研究文献,如果没有各位学者研究成果的帮助和启发,我将很难完成本篇论文的写作。最后,向在百忙中抽出时间对本论文进行评审并提出珍贵意见的各位老师和企业导师表示衷心地感谢。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1