东南大学MFC课程设计个人小结.docx
- 文档编号:2997468
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:12
- 大小:17.89KB
东南大学MFC课程设计个人小结.docx
《东南大学MFC课程设计个人小结.docx》由会员分享,可在线阅读,更多相关《东南大学MFC课程设计个人小结.docx(12页珍藏版)》请在冰豆网上搜索。
东南大学MFC课程设计个人小结
计算机综合课程设计个人小结
小组编号:
G13
课题名称:
推箱子游戏
学号:
姓名:
黄健翔
2011年10月
一、个人承担的工作
1.1程序设计
本人在项目设计的过程中主要担任程序编写的工作,包括程序设计、代码编写、代码检查修改等。
1.2搜集资料
在程序编写的过程中我需要上网查找各种相关资料,阅读相关书籍,从而有足够的知识去编写程序。
1.3提供建议及解释
在项目需要做presentation的时候,我会给做presentation的同学提供一些建议以及程序代码的解释,让他更了解我们的程序,做好充分准备。
在项目需要撰写报告的时候,我会给撰写报告的同学提供一些建议以及程序代码的解释,以便他写好报告。
2二、遇到的困难
2.1核心算法的设计
此困难在于我们以前从没试过设计游戏,因此不知道怎样去用计算机的语言来表达推箱子游戏的规则。
2.2显示的方法
老师一直在强调后台的程序运行和前台的显示应该是分开的,最终才连接起来,其中的连接问题是比较困扰的,也是无法用计算机的语言去表达这种“连接”。
2.3插入图片
我们小组的打算本来是不用枯燥的小人作推箱子的,想换成一个同学的头像,但是一直苦于没找到这么一个函数:
在指定的坐标插入指定大小的图片。
2.4地图的表示方法
我们想要知道怎样储存地图的信息,怎样的表示方法可以完全包含地图的信息。
3三、如何解决困难
3.1核心算法的设计
核心算法我们采用三个点的坐标来控制游戏的进行:
第一个点的坐标是小人当前的位置;
第二个点的坐标是小人将要走向的位置;
第三个点的坐标是,如果小人走向的是箱子,箱子将要被推向到那一点的坐标。
利用这三个坐标可以实现游戏的基本规则设置。
比如,如果小人将要走向的位置是箱子,而箱子前面是空地,那么将“箱子在空地上”改为“人在空地上”;将“空地”改成“箱子在空地上”;再将原来的“人在空地上”改为“空地”。
下面是对应的代码:
voidCBoxMan:
:
UpdateMap(intx1,inty1,intx2,inty2,intx3,inty3)
{
switch(m_cMap[y2][x2])
{
caseMAP_BACKGROUP:
//地图设计错误,不应该出现
AfxMessageBox("wrongmap");
break;
caseMAP_WHITEWALL:
//遇到墙,不做任何事情
break;
caseMAP_BLUEWALL:
//通道,可以行走
m_cMap[y2][x2]=MAP_MANWALL;
if(m_cMap[y1][x1]==MAP_MANWALL)
m_cMap[y1][x1]=MAP_BLUEWALL;
elseif(m_cMap[y1][x1]==MAP_MANBALL)
m_cMap[y1][x1]=MAP_BALL;
m_ptManPosition.x=x2;
m_ptManPosition.y=y2;
m_soundState=SOUND_STATE_MOVE;
break;
caseMAP_BALL:
//目的地,可以行走
m_cMap[y2][x2]=MAP_MANBALL;
if(m_cMap[y1][x1]==MAP_MANWALL)
m_cMap[y1][x1]=MAP_BLUEWALL;
elseif(m_cMap[y1][x1]==MAP_MANBALL)
m_cMap[y1][x1]=MAP_BALL;
m_ptManPosition.x=x2;
m_ptManPosition.y=y2;
m_soundState=SOUND_STATE_MOVE;
break;
caseMAP_YELLOWBOX:
//箱子
if(m_cMap[y3][x3]==MAP_BALL)//目的地可以行走
{
m_cMap[y3][x3]=MAP_REDBOX;
m_cMap[y2][x2]=MAP_MANWALL;
if(m_cMap[y1][x1]==MAP_MANWALL)
m_cMap[y1][x1]=MAP_BLUEWALL;
elseif(m_cMap[y1][x1]==MAP_MANBALL)
m_cMap[y1][x1]=MAP_BALL;
m_ptManPosition.x=x2;
m_ptManPosition.y=y2;
m_soundState=SOUND_STATE_PUSH;
}
elseif(m_cMap[y3][x3]==MAP_BLUEWALL)//通道,可以行走
{
m_cMap[y3][x3]=MAP_YELLOWBOX;
m_cMap[y2][x2]=MAP_MANWALL;
if(m_cMap[y1][x1]==MAP_MANWALL)
m_cMap[y1][x1]=MAP_BLUEWALL;
elseif(m_cMap[y1][x1]==MAP_MANBALL)
m_cMap[y1][x1]=MAP_BALL;
m_ptManPosition.x=x2;
m_ptManPosition.y=y2;
m_soundState=SOUND_STATE_PUSH;
}
break;
caseMAP_REDBOX:
//安放好的箱子
if(m_cMap[y3][x3]==MAP_BALL)//目的地可以行走
{
m_cMap[y3][x3]=MAP_REDBOX;
m_cMap[y2][x2]=MAP_MANBALL;
if(m_cMap[y1][x1]==MAP_MANWALL)
m_cMap[y1][x1]=MAP_BLUEWALL;
elseif(m_cMap[y1][x1]==MAP_MANBALL)
m_cMap[y1][x1]=MAP_BALL;
m_ptManPosition.x=x2;
m_ptManPosition.y=y2;
m_soundState=SOUND_STATE_PUSH;
}
elseif(m_cMap[y3][x3]==MAP_BLUEWALL)//通道,可以行走
{
m_cMap[y3][x3]=MAP_YELLOWBOX;
m_cMap[y2][x2]=MAP_MANBALL;
if(m_cMap[y1][x1]==MAP_MANWALL)
m_cMap[y1][x1]=MAP_BLUEWALL;
elseif(m_cMap[y1][x1]==MAP_MANBALL)
m_cMap[y1][x1]=MAP_BALL;
m_ptManPosition.x=x2;
m_ptManPosition.y=y2;
m_soundState=SOUND_STATE_PUSH;
}
break;
caseMAP_MANWALL:
//地图设计错误,不应该出现
AfxMessageBox("wrongmap");
break;
caseMAP_MANBALL:
//地图设计错误,不应该出现
AfxMessageBox("wrongmap");
break;
}
}
至于如何判断游戏是否完成,我们采用的方法是,扫描一次全地图,如果全地图上没有“人在目的地”或者“目的地上什么都没有”这两项,那么游戏完成。
对应代码如下:
boolCBoxMan:
:
IsFinish()
{
boolbFinish=true;
for(inti=0;i { for(intj=0;j { if(m_cMap[i][j]==MAP_BALL||m_cMap[i][j]==MAP_MANBALL) bFinish=false; } } returnbFinish; } 3.2显示的方法以及插入图片 鉴于我们最终还是没能找到那个函数(在指定的坐标插入指定大小的图片),最终我们采用用函数画图的方法来显示当前游戏的状况,对应代码如下: voidCBoxMan: : DrawGameArea(CDC*pDC) { inti,j,x,y; //绘制整个地图游戏区域 for(i=0;i { for(j=0;j { x=j*BLOCK_WIDTH; y=i*BLOCK_HEIGHT; switch(m_cMap[i][j]) { caseMAP_BACKGROUP: //背景 DrawBackGroup(x,y,pDC); break; caseMAP_WHITEWALL: //墙 DrawWhiteWall(x,y,pDC); break; caseMAP_BLUEWALL: //通道 DrawBlueWall(x,y,pDC); break; caseMAP_BALL: //目的地 DrawBall(x,y,pDC); break; caseMAP_YELLOWBOX: //未安放好的箱子 DrawYellowBox(x,y,pDC); break; caseMAP_REDBOX: //安放好的箱子 DrawRedBox(x,y,pDC); break; caseMAP_MANWALL: //人在通道区域 DrawManWall(x,y,pDC); break; caseMAP_MANBALL: //人在目的地区域 DrawManBall(x,y,pDC); break; } } } //获取旧的文本配置 COLORREFcrOldText=pDC->GetTextColor(); COLORREFcrOldBack=pDC->GetBkColor(); //更改当前的文本配置 pDC->SetTextColor(RGB(0,0,102)); pDC->SetBkColor(RGB(0,0,0)); //输出文本 CStringsTmp; sTmp.Format("当前关数: %d",m_iMissionNum); pDC->TextOut(50,270,sTmp); //恢复原来文本配置 pDC->SetTextColor(crOldText); pDC->SetBkColor(crOldBack); } // //绘制背景 // voidCBoxMan: : DrawBackGroup(intx,inty,CDC*pDC) { COLORREFclr=RGB(0,0,0); pDC->FillSolidRect(x,y,BL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东南大学 MFC 课程设计 个人 小结
![提示](https://static.bdocx.com/images/bang_tan.gif)