推箱子游戏实习报告书

上传人:wen****ng 文档编号:166489131 上传时间:2022-11-01 格式:DOC 页数:10 大小:381.50KB
收藏 版权申诉 举报 下载
推箱子游戏实习报告书_第1页
第1页 / 共10页
推箱子游戏实习报告书_第2页
第2页 / 共10页
推箱子游戏实习报告书_第3页
第3页 / 共10页
资源描述:

《推箱子游戏实习报告书》由会员分享,可在线阅读,更多相关《推箱子游戏实习报告书(10页珍藏版)》请在装配图网上搜索。

1、信息工程学院数据结构与C语言综合训练报告 (20122013学年第 二学期)报告题目:_推箱子的最短路径_ _ 姓 名:_ _ 程 榜_ 专 业: 软件工程 年级班级:_2012级2班_ 指导教师: 刘全中 完成日期: 2013年7月21号 一、综合训练目的和要求本综合训练是计算机科学与技术、信息管理与信息系统、软件工程、电子商务专业重要的实践性环节之一,是在学生学习完程序设计语言(C)、数据结构课程后进行的一次全面的综合练习。本课综合训练的目的和任务:1. 巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4.

2、 掌握书写程序设计说明文档的能力5. 提高运用C语言、数据结构解决实际问题的能力二、综合训练任务内容1.题目要求:推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个55的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果箱子被推到一个角上那么箱子就不能再被移动了,如果箱子被推到一面墙上,那么箱子只能沿着墙移动.同时,房间里头还有若干障碍物(用阴影部分表示)。现在给定房间的结构,箱子的位置,搬运工的位置和箱子要被推去的位置,请你计算出搬运工至少要推动箱子多少格.2. 扩展实现的内容:绘制图形界面,通过按钮实现推箱子的整个过程,

3、整个过程中可以动态的看到箱子的移动。游戏界面如下图:游戏动态移动的过程图如下:三、总体设计所用算法主要是根据广度优先搜索,纪录路径,然后利用回溯法实现最短路径的查找并纪录保存下来。所用的数据结构主要为顺序结构。返回开始界面进行游戏开 始开始进入游戏界面进行选择选择游戏开始,进行游戏选择游戏说明,了解游戏规则选择关卡,或者返回游戏开始关卡(1)关卡(2)关卡(3)按空格键进行游戏返回游戏开始后,可以单机鼠标右键退出游戏返回游戏开始,单机鼠标右键可以退出游戏四、详细设计说明1、推箱子游戏具有的功能(1)能够显示主菜单和界面游戏需要提供主菜单进行选择,同时能够把地图文件中的信息转换成为图像显示到游戏

4、界面上。(2)能够实现键盘操作功能能够接收到空格键信息,按照软件内部实现的箱子移动到相应的位置。(3) 能够进行关卡选择功能进入开始游戏的界面时,可以进行游戏的关卡的选择,然后利用空格键进行箱子的移动。(4) 提供游戏说明功能进入游戏说明界面时,可以了解游戏的一些规则,及如何进行游戏。2、 程序结构设计运用C+语言,以及VS2010开发环境(1)、typedef struct Pnode int row; int col;int weight;struct Pnode* back_man;Pnode, * Position;某一点的坐标表示,当用来实现箱子的最短路径的搜索时,back_man

5、用来存储箱子移动一个位置后,人所在的位置。(2)、typedef struct Mnode int mrow; int mcol; char mazeMAX_ROWMAX_COL;MNode, *MazeType;用来存储地图的信息 (3) 、算法的实现主要有两个类,第一个类是class ShortestPath ;第二个类是class ManBoxStep: public ShortestPath ;A、第一个类class ShortestPath 是用来实现地图中任意两点之间的最短路径,成员函数及其功能如下:Position NextPosition(Position &curpos, i

6、nt di);用来计算当前点在四个方向下的移动一格得到的下一点的坐标位置,并返回;bool CanArrive( vector list &vec);数据成员有start,end,此函数是判断在地图中能否从 start 到 end ,并利用广度优先搜索搜索从start 到end 的路径,并把所有搜索过的位置全部记录在顺序容器 vec 中,veci 表示存储一系列与start 位置相距i 个格子的被搜索的点的位置;void RecordWay( vector list &vec, vector &way);此函数根据 vec 中所存储的数据,利用回溯法进行往回搜索,找到从 start 到 end

7、 的最短路径, 并把路径存到容器 way 中;B、第二个类class ManBoxStep 是利用第一个类中的函数实现人和箱子一起从起点到箱子应到的位置的最短路径,其中的成员函数及其功能如下:Position NextState(Position box, int di);此函数的功能是纪录当人能够移动箱子的情况下,纪录移动后箱子和人的位置;MazeType UpdateMaze(MazeType mymaze, Position curpos, Position newpos);此函数的功能是每当在搜索下一步时,及时的更新所在的地图(即改变人和箱子的位置),并每次都将地图纪录下来;bool

8、BFSCanArrive( vector list &AllWay, vector vector &man_way, vector &maze_state);此函数的功能是,可以说是有条件的进行广度优先搜索,即每次搜索四个方向中的一个方向时,都要利用第一个类中的 CanArrive 函数判断是否能从人的当前位置移动到推箱子的位置,并记录最短的路径,并保证箱子前面不是墙,AllWay 是用于存储有条件的广度优先搜索中所搜索到的位置,AllWay i 是用来存储从开始走i 个格子的所有被搜索到的位置,man_way 是用来存储人走过的所有的路径,man_wayi 存储走过的某条路径所经过的点的位置

9、;maze_state 用来存储搜索过程中所更新的所有的地图的状态;void RecordBestWay( vector list &AllWay, vector &bestWay, vector vector &man_way,vector &man_bestway);此函数是根据 AllWay 的数据往回进行回溯法找到箱子可以移动的最短的路径,同理,man_bestway 是根据 man_way 来找到人整个过程中所走过的最短的路径;(4) 、界面及图形的绘制此软件的界面设计主要是利用 Easyx 中的函数进行绘画的,游戏的主界面以及一些按钮时利用绘图函数实现的,并且根据所画按钮的坐标范围

10、,来控制鼠标,从而来实现界面中按钮的控制,游戏过程中的箱子、墙、人均是利用函数所插入的图片,移动的时候,在不同的位置插入不同的图片来显示动态的过程;插入图片的函数loadimage(&img0, _T(F:VStestpushboxs.jpg);loadimage(&img1, _T(F:VStestpushboxw.jpg);loadimage(&img2, _T(F:VStestpushboxm.jpg);loadimage(&img3, _T(F:VStestpushboxb.jpg);loadimage(&img4, _T(F:VStestpushboxd.jpg);loadimage

11、(&img5, _T(F:VStestpushboxbd.jpg);绘制按钮:ellipse(580,440,740,490);/画椭圆RECT r2 = 580,440,740,490;drawtext(_T(游戏说明), &r2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);鼠标的响应:MOUSEMSG m;while(true)m = GetMouseMsg();switch(m.uMsg)case(WM_LBUTTONDOWN):.(5) 地图的获得const char Wall = w;/表示墙const char Space = s;/表示通道c

12、onst char Man_Start = m;/表示人开始时的位置const char Box_Start = b;/表示箱子初始时的位置const char Destination = d;/箱子需要到达的目的地根据这些字符的表示含义,将不同关卡的地图存放在不同的 .txt 文件中,在进行游戏时,读取文件,在根据坐标插入相应的图片在界面中显示出来,如下:ifstream infile;infile.open(F:VStestpushboxtest1.txt);int R_C2;for(int i = 0; i R_Ci;mymaze-mrow = R_C0;mymaze-mcol = R_

13、C1;(6) 、结合数据与界面根据所搜索到的最短路径的数据,利用坐标,将数据结合图片的动态移动来表示走过的路径。五、软件使用说明进入开始的界面后就可以进行游戏了,然后选择关卡,然后开始游戏,利用空格键使人和箱子根据计算好的路径进行移动,如下的游戏相邻的两张时的界面:六、 调试与测试编写核心算法的代码时,在一个头文件中实现,并进行测试,测试一般还不是利用文件的输入,直接键盘输入,测试成功后,在分几个文件进行管理,继续调试以及测试,有时出现一些自己不能解决的问题的时候,就咨询辅导老师,帮忙解决,程序执行过程中经常出现的错误就是内存的错误,这样边测试变完善代码;七、 工作日志7月12号 :主要开始进

14、行程序框架的设计;7月13号 :开始根据网上的一些资料,思索其中的核心算法广度优先搜 索;7月14号 :开始编写核心算法的代码,并进行调试;7月15号 :继续调试核心算法的代码,分几个文件管理,并咨询老师帮助解 决一些调试中的问题;7月16号 :开始进行界面的框架设计,即图形的绘制;7月18号 :在界面中添加一些文字,以及相应一些鼠标操作;7月19号 :开始在主程序中读取文件,实现最短路径的数据的存储;7月20号 :根据所得的数据进行联系界面中图片的插入,并调试代码;7月21号 :开始进行代码的优化,继续调试,并且书写实习报告;八、 综合训练心得与体会 感觉通过这次综合的实习,可以将自己所学到的东西真正的利用到了实践当中,使自己对项目开发有了一个大致的流程,在实际问题中解决问题的能力得以提高,并且通过这次实习提高了我编程的能力,以及调试代码的能力,此外,通过这次的实习,使我学习到了利用Easyx 进行绘画以及界面的设计,扩大了自己的知识范围;九、意见和建议 希望刚开始实习时,能有多点辅导老师,因为我们基本上选的题目刚开始都是一片模糊,不知道其中的意思,需要老师的讲解与开导;还就是以后有时间可以进行多些这样的综合性的实习,这样可以锻炼我们运用理论知识到实践中的能力。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!