东南大学MFC课程设计个人小结.docx

上传人:b****4 文档编号:2997468 上传时间:2022-11-17 格式:DOCX 页数:12 大小:17.89KB
下载 相关 举报
东南大学MFC课程设计个人小结.docx_第1页
第1页 / 共12页
东南大学MFC课程设计个人小结.docx_第2页
第2页 / 共12页
东南大学MFC课程设计个人小结.docx_第3页
第3页 / 共12页
东南大学MFC课程设计个人小结.docx_第4页
第4页 / 共12页
东南大学MFC课程设计个人小结.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

东南大学MFC课程设计个人小结.docx

《东南大学MFC课程设计个人小结.docx》由会员分享,可在线阅读,更多相关《东南大学MFC课程设计个人小结.docx(12页珍藏版)》请在冰豆网上搜索。

东南大学MFC课程设计个人小结.docx

东南大学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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1