《C++语言程序设计》课程设计 推箱子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
辽宁工业大学
《C++语言程序设计》课程设计(论文)题目:推箱子
院(系):软件学院
专业班级:软件工程103班
学号: *********
学生姓名: 11111111
指导教师:***
教师职称:讲师
起止时间:2010.12.20-2010.12.31
课程设计(论文)任务及评语
目录
第1章课程设计目的与要求 (1)
1.1 课程设计目的 (1)
1.2 课程设计的实验环境 (1)
1.3 课程设计的预备知识 (1)
1.4 课程设计要求 (1)
第2章课程设计内容 (2)
2.1 C++语言程序设计------《推箱子》问题分析 (2)
2.1.1 功能分析 (2)
2.1.2 算法设计及程序设计中技术重点 (2)
2.2 程序中涉及的类的UML类图和主要函数流程图或框图。 (5)
2.3 程序源代码 (7)
2.4 程序的实现 (10)
第3章课程设计总结 (13)
参考文献 (14)
第1章课程设计目的与要求
1.1 课程设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。
1.2 课程设计的实验环境
硬件要求能运行Windows 操作系统的微机系统。C++语言应用程序开发软件使用:VC++ 系统,或其他C++语言应用程序开发软件。
1.3 课程设计的预备知识
熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。
1.4 课程设计要求
1.仔细分析设计题目,画出程序流程图,编写程序源代码。
2.积极上机调试源程序,增强编程技巧与调程能力。
3.认真书写课程设计预习报告,课程设计说明书。
4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完
成课程设计内容
第2章课程设计内容
2.1 C++语言程序设计------《推箱子》问题分析
本游戏的目的就是把所有的箱子都推到目标位置上。箱子只能推动而不能拉动。一次只能推动一个箱子。本程序支持键盘操作,可以给用户足够的思考空间,使用户的智力在游戏的乐趣中得到充分的锻炼。此外还可以进行选关游戏。根据难度的不同箱子的位置以及需要移动的数目也不同,在游戏中可以随意选择任何难度的关卡进行游戏。
2.1.1 功能分析
游戏的功能描述如下:首先运行游戏并载入相应的地图,屏幕中出现一个推箱子的工人,其周围是预制好的地图、围墙、人可以行走的通道、几个可以移动的箱子和游戏胜利结束时安放这些箱子的目标位置(用白色的球行标识)。玩家先通过功能按键选择希望到达的关卡,再通过编辑区中的方向键操纵推箱子工人的位置。当工人靠近箱子并朝箱子位置移动的时候,箱子在其移动方向没有被其他物件所阻碍的情况下可以被移动。当所有箱子被工人移到指定的安放位置后,则胜利通关进入下一关的游戏。
2.1.2 算法设计及程序设计中技术重点
大多数的游戏都是通过与用户的交互并根据具体情况来做相应的运算处理的,在整个推箱子的游戏过程中,用户总是通过键盘操作界面的显示来实现交互。下面就从不同的角度来分析这个游戏的特性。
这里先做一个假设:游戏过程中的某一瞬间,工人在某个区域,此时游戏接受到用户的按键动作指示并按照游戏规则判断出该动作应该做出的响应。该响应是在没有违反游戏规则的情况下使工人执行用户指示的运动,对违反游戏规则的指示则不予以响应。下面分析一下工人将会遇到的所有情况,以便归纳出动作的算法。
1.前方是通道:
2.前方是墙:
3.前方是目的地:
4.前方是箱子:
图中符号的含义如下所示:
:辅助查看的方块补充位,无任何物质含义。
:工人。
:墙。
:箱子。
:目的地。
假设移动趋势方向向右,其他方位移动趋势情况也可以变化坐标方向,转为上面向右的情况。图2.1列出工人可能遇到的所有情况,在前面3种情况中,只要根据前方的物件就可以判断出工人是否可以移动了,而第4种情况是工人的前方为箱子,需要深入判断箱子前方的状态才能判断出工人是否可以移动,所以要完全判断出操作指示是否可执行,需要2个工人前方的位置状态值。
选关功能的实现:
对于关卡数目少的游戏可以通过快捷键去选关,如按“F1”跳到上一关,按“F2”则跳到下一关,但当游戏的关数相当大的时候,再使用这种方法选关就比较麻烦了,所以需要增加一个选关的功能。其功能描述如下:通过选取菜单栏目的“选关”选项,弹出一个提示对话框,用户可以在对话框里填入需要载入的关卡数,确定后即可载入该关的地图并开始游戏。
(1)选关功能对话框的设计
首先在项目里添加一个对话框资源IDD_DIALOAG_LOAD_NMU,并利用ClassWizard为它创建一个基于对话框类型的类CLoadMapDlg。接下来在这个对话框中添加一个编辑框IDC_EDIT_LOAD_NUM,用于关数的填写,选框饿类型为数字,使得用户只能填入数字,通过ClassWizard为这个编辑框添加一个关联整形变量m_loadMapNum,这样就可以通过这个整形变量来获取用户的填入关数,从而实现交互。并且在最大、最小值里面分别填写“100”和“1”作为范围限制,这样ClassWizard就会在代码区自动添加一个校验的机