广东工业大学课程设计任务书。
一、 课程设计的内容。
1. 项目简介:
项目名称:“猫抓老鼠”游戏设计。
项目类型:娱乐。
编程环境:microsoft visual c++ 6.0
项目经验:学习在mfc框架下编程,提升编程综合能力。
项目说明:本程序采用标准的sdi程序结构,没有考虑有关保存文档的工作,为简单起见,所有的工作都在试图类中完成。通过定时器消息是老鼠在场地中自动随机运动,通过键盘消息移动猫去抓老鼠。
原理很简单,但为了使运动状态逼真且游戏的逻辑正确、完整、也有一定的难度。编写这样一个综合面较广的程序对提升c++初学的编程与设计能力是极有帮助的。
2.功能介绍:
1)通过键盘的上、下、左、右方向键控制猫。
2)老鼠在窗口中自由活动,可随时改变行走方向,与窗口边界则改变方向。(3)猫碰到老鼠后就吃掉老鼠(老鼠不再显示),吃掉老鼠后,游戏结束并显示
所剩余时间;
4)能显示当前时间的老鼠数目和剩余时间值;
5)可以选择游戏的级别和难度。
3.系统实现概述:
1)首先用appwizard生成一个名为catcatchrat的sdi程序框架。
2)调出insert source对话框,利用位图编辑器分别画出一个方向的猫和老鼠的位图(画猫操作如图1所示),然后把它们复制到其他的方向的位图上并用“rotate 90 degrees”命令对其进行旋转。相应的id分别为idb_catup、idb_catdown、idb_catleft、idb_catright、idb_ratup、idb_ratdown、idb_ratleft和 idb_ratright。
图13)在框架窗口的主菜单(idr_mainframe)中添加两个下拉选项,一个为“控件”,添加三个菜单选项“开始”、“停止”和“重玩”;另一个为“难度”,添加三个菜单选项“高”、“中”、“低”,删除其他无关的下拉菜单,各菜单属性设置如表1所示:
具体操作如图2所示:
4)为视图添加菜单选项对应的成员函数。进入classwizard的message maps选项卡,选择class name项为ccatcathratview,在object ids列表框中分别选择新添加的菜单选项的id,在messages列表框中选择commaand,按下add function按钮添加成员函数,然后再在messages列表中选择update_command,按下add function按钮添加另一组成员函数。如图3所示:
图3(5)用classwizard在视图类中建立定时器的消息处理函数ontimer(),以及键盘消息处理函数onkeydown()。具体操作如图4所示·:
图46) 在相应的函数中写入**,完成程序;
7)游戏的运行及输入输出。游戏者可以选择框架窗口的下拉菜单“难度”中的选项设置难度,选择下拉菜单“控制”中的菜单选项“开始”后,老鼠在场地中随机运动,这时通过四个方向键可以移动猫去抓老鼠,猫身体的任何部分碰到老鼠身体的任何部分则猫吃掉老鼠,该老鼠消失,游戏过程中可以选择菜单选项“停止”暂停。如果在规定的时间内抓完所有的老鼠则成功,否则失败。
游戏结束后可以选择菜单选项“重玩”重新开始。场地右边显示剩余的老鼠数目和剩余的游戏时间,如图5所示:
图5胜利时:
失败时:4.关键技术:
本程序主要涉及到的知识点有:键盘消息、菜单、定时器消息、位移显示和移动、位置判断算法。同时还有判断游戏输赢、设置游戏难度系数、显示文字等工作,有一定的难度和工作量。
该题的难点在于猫和老鼠的的显示。使老鼠随机移动以及如何判断老鼠被吃掉。猫和老鼠可以分别用位图画出,显示他们有固定的步骤。
但为了把老鼠和猫的运动模拟得更加逼真,用场要保证脑袋的方向和运动方向一致,这样如果简单地假定只有上、下、左、右四个方向的话,就必须分别使用四幅位图来显示不同方向的猫和老鼠。我们知道,位图在窗口客户区自动移动可以通过一个定时器消息改变位图所显示的坐标来实现,即当定时器消息到来时,计算位图显示的位置,并在新的位置重新显示位图。当老鼠和猫位图的显示位置有重合时,则认为老是被吃掉,这里使用了一个不十分精确的简单算法,当猫和老鼠水平方向的位置差小于老鼠的宽度,并且猫和老鼠垂直方向的位置差小于老鼠的高度时,就认为老鼠被抓住。
关键函数具体如下:
1)在视图类结构函数中添加以下初始化**,这部分**除“载入猫和老鼠的位图资源”外,也可以添加到视图类的oninitilupdate()函数中。
//载入猫和老鼠的位图资源。
m_bmcat[0].loadbitmap(idb_catup);
m_bmcat[1].loadbitmap(idb_catdown);
m_bmcat[2].loadbitmap(idb_catleft);
m_bmcat[3].loadbitmap(idb_catright);
m_bmrat[0].loadbitmap(idb_ratup);
m_bmrat[1].loadbitmap(idb_ratdown);
m_bmrat[2].loadbitmap(idb_ratleft);
m_bmrat[3].loadbitmap(idb_ratright);
//计算猫和老鼠位图的搞和宽。
bitmap bmcat;
m_bmcat[2].getbitmap(&bmcat);
m_ncatw=
m_ncath=
bitmap bmrat[4];
m_bmrat[0].getbitmap(&bmrat[0]);
m_bmrat[1].getbitmap(&bmrat[1]);
m_bmrat[2].getbitmap(&bmrat[2]);
m_bmrat[3].getbitmap(&bmrat[3]);
m_nratw=bmrat[0].bmwidth;
m_nrath=bmrat[0].bmheight;
//场地矩形和老鼠数目设置。
m_rectclient=crect(20,20,380,380);
m_nrat=ratmax;
startflag=-1;
//计算猫和老鼠位图的初时位置和运动方向。
m_ncatx=m_
m_ncaty=m_
m_rectcat=crect(m_ncatx,m_ncaty,m_ncatx+m_ncatw,m_ncaty+m_ncath);
m_ncatdirection=2;
srand((unsigned)time(null));
for(int i=0;i /*for*//初始难度设为中。
m_ndifficulty=1;
m_timework=m_timeset=20;//游戏时间20秒。
m_ncatspeed=5;
m_nratspeed=3;
m_nwinflag=-1;
2)在视图类的ondraw()成员函数中添加以下**:
//显示游戏状态。
cstring strtime;
cstring strrat;
"剩余时间: %2d:%2d:%2d",m_
"待抓老鼠:%3d",m_nrat);
pdc->textout(410,100,strtime);
pdc->textout(410,140,strrat);
//显示猫和老鼠。
cdc memdc[ratmax];
cdc memcatdc;
cbitmap *polddc;
polddc=
pdc->bitblt(m_ncatx,m_ncaty,m_ncatw,m_ncath,&memcatdc,0,0,srcand);
3)在键盘、定时器、菜单消息处理函数中写入老鼠和猫移动的相应****。
void ccatcatchratview::ontimer(uint nidevent)
if(m_nrat>0)
有老鼠未被抓住。
srand((unsigned)time(null));
for(int i=0;i {
if(m_bratlive[i])
对未被抓住的老鼠进行处理。
switch(nidevent)
case 2://该变老鼠运动方向。
m_nratdirection[i]=rand()%4;
break;
case 1: /改变老鼠位置。
invalidaterect(m_rectrat[i]);
int nratmovestep=m_nratspeed+rand()%5;//老鼠移动的距离。
if((abs(m_nratx[i]-m_ncatx)<3*m_nratw)
abs(m_nraty[i]-m_ncaty)<3*m_nrath))
如果老鼠靠近了猫就改变方向。
m_nratdirection[i]=rand()%4;
if*/switch(m_nratdirection[i])
case 0: /向上移动。
if(m_rectrat[i].top-nratmovestep>m_
C 课程设计
自动走迷宫小游戏。根据课堂讲授内容,做相应的自主练习,消化课堂所讲解的内容 通过调试典型例题或习题积累调试c 程序的经验 通过完成辅导教材中的编程题,逐渐培养学生的编程能力 用计算机解决实际问题的能力。同时在设计的过程中发现自己的不足之处,对以前所学过的知识理解的更加深刻,掌握得更加牢固。迷宫生成。...
c 课程设计
哈尔滨 课程设计报告。课程 c 学号 姓名 班级 教师 1.管理系统的功能说明。课程信息管理 能够增加数据,删除数据,显示数据,修改数据,按姓名和首字母查询数据和一些基本的程序功能。2.存储数据的描述。coursenumber 课程号coursename 课程名subject 所属专业xingzhi...
C课程设计
面向对象程序设计课程设计。一 设计要求。1 课程设计以3 4人为一组,每人一个模块 2 课程设计时间为1周 在处理系统的时候,要从分析系统的需求入手,根据系统需求进行详细分析,明确系统功能,然后设计系统整体架构以及划分系统模块,按照模块分配小组中每个组员的具体任务,完成设计。二 系统设计规范。1 命...