目录
一、需求分析
1.1开发背景 (3)
1.2项目目标 (3)
1.3运行环境 (3)
1.4项目任务书 (3)
二、技术路线
2.1 总体方案 (3)
2.1.1开发平台 (3)
2.1.2基本原理 (4)
2.2 详细设计…………………………………… 4(略)
2.2.1原理 (4)
2.2.2具体程序 (6)
三、工程进度 (6)
四、测试报告 (6)
五、总体小结 (7)
六、分工介绍 (7)
一需求分析
很早很早的时候就玩过这个很简单的游戏,总有一种想法希望有一天我自己可以亲手设计出它,直到今天我学了VC++才敢有此冒险的做法。
通过一个学期的VC++语言课的学习,掌握了一定的基础知识;为了更好地增强对知识的理解,
提高自己对知识的应用能力,决定做完这个游戏。
虽然已经有很多人都做过它,
但是经过我们自己的努力,相信一定可以做的更好!
项目的主要目标
实现打地鼠游戏的游戏性和趣味性
项目运行的软、硬件环境
Windows操作系统以及相应的软硬件
Microsoft Visual C++ 6.0
项目具体的功能要求
拥有多个菜单可以为用户提供多种切换和选择
拥有多个可供用户选择的游戏模式
拥有计时系统,可以提醒用户
拥有完整的系统实现游戏的趣味性
应用单文档编程,并努力提高程序的可读性
二技术路线
采用的软件及开发平台
Micosoft Visual ++6.0
项目的总体方案———基本原理、基本设想、基本算法、基本程序等
基本原理:利用Microsoft Visual C++ 6.0的强大功能和MFC的多程序可视化的作用,我们相信可以实现预期的目标。
只需要在MFC文件中添加相应的函数并将他们联系起来,拓展并实现程序的可操作性
基本设想:首先编辑利用位图资源,实现地鼠洞及地鼠的可视化;利用随机数来产生地鼠的随机位置,变换坐标来实现地鼠的移动;在游戏时右两中设想:1。
利用小键盘的九个数字键来进行游戏,因为它们正好对应于打九个老鼠的位置,在击中老鼠的时候,加分。
2.更进一步,用鼠标左键对锤子进行捕获,右键释放;捕获后单击鼠标左键可以打地鼠。
利用坐标判断锤子是否打中地鼠,打中则改变位图,加分;否则地鼠继续移动,并在打中后有一短暂的停顿。
3.进一步希望通过分数的增多,来提高游戏的难度。
更有一种限时模式,在规定的时间内,看打中老鼠的多少,提高游戏的趣味性。
4.。
客户区右面附有游戏的进行信息(游戏时间,状态等)。
在游戏开始前通过对话框来接受玩家的输入信息,
结束时用对话框输出玩家的信息和排名,实现序列化对数据进行保存。
游戏菜单包括:游戏——开始,结束,重玩;
难度——简单,中等,困难;
游戏模式——一般模式,限时模式,
控制模式———鼠标、小键盘
排行榜————风云榜
利用MFC在View类中添加以下函数:
OnBegin 开始游戏
OnEnd 结束游戏
OnReplay 重新开始游戏
OnUpdateEnd 结束前打勾,开始后才可以结束
OnUpdateBegin 开始前打勾,初始状态可以开始
OnUpdateReplay 重玩前打勾,结束后才可以重玩
OnTimer 实现计时功能,一个控制地鼠的显示,另一个用于计时OnLButtonDown 鼠标左键按下,捕获鼠标和锤子
OnLButtonUp 将锤子捕获
MouseMove 实现鼠标的移动
RbuttonDown 鼠标右键按下,释放鼠标
OnEasy,OnNormal,OnHard 通过改变地鼠位图显示间隔控制游戏的难度OnUpdateEasy,OnUpdateNormal,OnUpdateHard 开始前可以选难度OnGamenormal,OnGametime 游戏两种模式
OnUpdateGamenormal,OnUpdateGametime 开始前可以选择模式
OnKey,OnMouse 始终可以选择游戏的控制模式
OnUpdateKey, OnUpdateMouse 在选中的项前面打勾
此外为了实现序列化添加了以下两个基于对话框的新类:
CPaihangDlg : public CDialog
CShuruDlg : public CDialog
基本算法及步骤简介:
1.首先,通过Ondraw 函数,调用画出的关于地鼠的们图,画出9个老鼠洞:
2.利用rand 产生0至8之间的随机数,用这个随机数来除以9,取其结果和余数,可以产生一个三行三列的矩阵,正好对应于地鼠的九个位置,这样的话,就可以通过结果与余数来随机的产生老鼠出现的地方。
通过再次的调用位图,刷新位图,实现简单的动画效果。
3.通过键盘消息以及简单的记数器,记下游戏的时间,以及打下的老鼠数,从而完成整个游戏。
同时在打中老鼠的时候,会发出声音,提示玩家。
4.通过鼠标消息捕获后打击以及简单的记数器,记下游戏的时间,以及打下的老鼠数,从而完成整个游戏。
同时在打中老鼠的时候,会发出声音,提示玩家。
如上图所示。
5.点击排行榜可以查看当前的英雄排名
三工程进度
由于以前选题不当,后受老师提醒改选打地鼠游戏,由VB程序分析入手,后上网查找相关VC程序,但是没有找到。
只好按照自己的想法来编制程序。
大家在一起反复分析讨论,16号有了初步计划。
后按基本设想进行,不断改进,原设想使用鼠标消息,但实在因为掌握知识有限,时间有限,未能实现。
后改鼠标消息为键盘控制消息,虽然程序大为简化,但对于一些细节的地方,大家仍然绞尽脑汁,尽量把程序完善,经过大家的不断努力,以至放弃了圣诞节出去玩的时间,终在12月26日将程序搞定。
答辩之后,我们继续努力,12月29日我们将未完成的鼠标消息的问题解决并加入了序列化,任务基本完成。
实验报告也由于时间仓促,不是十分的理想和详尽,望老师见谅。
四测试分析
12月18日,目标将视图基本画出,并能够产生随机的老鼠钻出洞穴。
在测试中发现程序运行良好,达到了理想的效果。
12月20日,原定的计划,将鼠标消息加入,完成拖动小锤打老鼠的动画效果。
实际操作中,发现鼠标消息出现问题,始终无法解决,决定每个人单独想出解决办法,再行商议,以免出现思维定式。
12月23日,目标将鼠标消息拿下。
通过将几天来每个人的想法实践到程序中去,但是仍然没有办法达到理想的效果,多次努力,仍然没有办法突破。
距离交创新报告时间不多,决定放弃鼠标消息,改为使用小键盘来控制游戏。
12月24日,目标将键盘消息完成,并加以细节上的完善,使游戏的可玩性增加。
上午去图书馆再次查找资料,熬夜将键盘消息完成,奋战至深夜,终完成程序。
经测试,未出现问题。
12月25日,目标清理程序中冗余部分,再次尝试鼠标消息。
经过大家再次努力,仍
然没有办法把鼠标消息完善,十分遗憾。
总体测试,效果不错,同学玩了之后评价可以12月29日,目标将鼠标消息解决并继续完善程序。
经过一致的努力,我们将鼠标消息原有的障碍全部扫清,,并在其中加入了序列化实现程序的优化,问题基本解决。
经测试,达到了比较理想的效果。
同学都感觉不错。
但在程序中还是存在有一定的问题。
首先,因为大家的美术功底不行,因此游戏的画面不太另人赏心悦目。
其次,在提高难度到一定阶段时,程序会出现刷新上的问题,而难度变低之后就不会出现,大家认真的分析原因,仍然不知原因所在,因而只好到此。
麻烦请老师指导一下。
五小结
1加强了对VC++程序的应用理解。
2锻炼了自己发现问题,解决问题的能力,锻炼了自己。
3在编程的过程中,体会到了团队合作的重要。
大家在合作过程中不仅发挥了自己的专长,而且发现了自己存在的问题,不仅有认真的钻研,还有热烈的争吵。
但通过这次合作,大家成为了更好的朋友。
4对于程序中存在的问题,十分遗憾,知道了自己所学远远不足,还需要不断的学习,不断的学习。
5由于时间紧张,我们的实验还有不足之处,请老师给予帮助解决。
6 谢谢老师在我们编程过程中的帮助和指导。
六分工介绍
特别说明:本实验有李亮发起,后邀贾超和申广杰加入,最中合三人之力完成了本实验,在实验中大家互相帮助互相学习,体现了很好的团队意识和良好的合作精神。
我们感觉收获不小,觉得此次实验是值得的。
组长:李亮主要负责实验的策划、实验前期的准备工作、实验报告的编写处理、试验中的技术处理和故障分析。
成员:贾超主要负责实验中键盘消息的编写处理、实验报告的编写处理申广杰主要负责实验中鼠标消息函数的编写、处理及完善,序列化的构造,对话框的设置。