K多媒体111朱在吉综合作业报告.docx

上传人:b****6 文档编号:7377486 上传时间:2023-01-23 格式:DOCX 页数:37 大小:551.14KB
下载 相关 举报
K多媒体111朱在吉综合作业报告.docx_第1页
第1页 / 共37页
K多媒体111朱在吉综合作业报告.docx_第2页
第2页 / 共37页
K多媒体111朱在吉综合作业报告.docx_第3页
第3页 / 共37页
K多媒体111朱在吉综合作业报告.docx_第4页
第4页 / 共37页
K多媒体111朱在吉综合作业报告.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

K多媒体111朱在吉综合作业报告.docx

《K多媒体111朱在吉综合作业报告.docx》由会员分享,可在线阅读,更多相关《K多媒体111朱在吉综合作业报告.docx(37页珍藏版)》请在冰豆网上搜索。

K多媒体111朱在吉综合作业报告.docx

K多媒体111朱在吉综合作业报告

成绩

南京工程学院

游戏编程基础课程

综合作业说明书

 

题目RPG游戏游戏设计

 

班级K多媒体111

学生姓名朱在吉

学号240111338

 

2014年12月30日

一、程序功能与设计思路

整体设计目标:

含有游戏场景、游戏角色、动作控制、动画、交战(可选)、人工智能、音效(可选)、网络支持(可选)等各部分内容,界面风格及应用方法自己根据游戏的特色综合考虑。

1.游戏实现功能说明:

1.切换至战斗场景

2.切换至特殊战斗场景(完成后加载下一地图)

3.切换至商店场景。

4.切换至结束场景。

5.关卡偏移,重读关卡场景(一般用于门)。

6.升级场景。

7.死亡场景。

2.界面效果显示:

 

3.主界面设计思路(简单结构框图):

游戏主要界面

升级场景

两种战斗场景

第二关场景

第一关场景

最终胜利

死亡场景

二、相关原理知识介绍

实现的原理说明:

游戏程序中计算机角色的思考与行为,实际上是对各种不同事件进行分析思考,然后根据不同的情况作出相应的反应。

我们可以利用“if-else”条件句以及“switch-case”语句这类的判断式来完成。

voidSenceMove(HWNDhwnd,HDChdc,HDCmemDC,intScreen)

{

switch(Screen)

{

case1:

//战?

斗·场?

景°

{

PaintBattle(hwnd,hdc,memDC);

}break;

case2:

//特?

殊篴战?

斗·场?

景°

{

PaintBattle(hwnd,hdc,memDC);

toolgate++;

_sleep(500);

InvalidateRect(hwnd,NULL,FALSE);

ZeroMemory(maps,sizeof(maps));

TCHARtogate[256];

ZeroMemory(togate,sizeof(togate)/sizeof(TCHAR));

wsprintf(togate,TEXT("%d.map"),toolgate);

FILE*fp;

fp=fopen(togate,"r+");

fread(maps,sizeof(MAP),320,fp);

fclose(fp);

LoadMap(hdc,memDC);

SenceMove(hwnd,hdc,memDC,maps[hero.x][hero.y].Global);

}break;

case3:

//商Θ?

店台?

读á取?

{

}break;

case4:

{

PaintEnd(hwnd,hdc,memDC);//读á取?

结á束?

场?

景°

}break;

case5:

//关?

卡¨偏?

移?

门?

楼¥梯琘,?

场?

景°读á取?

{

switch(maps[hero.x][hero.y].Events)

{

case35:

toolgate++;

break;

case36:

toolgate--;

break;

default:

break;

}

ZeroMemory(maps,sizeof(maps));

TCHARtogate[256];

ZeroMemory(togate,sizeof(togate)/sizeof(TCHAR));

wsprintf(togate,TEXT("%d.map"),toolgate);

FILE*fp;

fp=fopen(togate,"r+");

fread(maps,sizeof(MAP),320,fp);

fclose(fp);

LoadMap(hdc,memDC);

InvalidateRect(hwnd,NULL,FALSE);

}break;

case99:

//升级?

场?

景°

{

_sleep(500);

PaintLevel(hwnd,hdc,memDC);

}break;

case100:

//死à亡?

场?

景°

{

PaintDead(hwnd,hdc,memDC);

}break;

default:

break;

}

}

 

voidHeroPaint(HDChdc,HDCmemDC)//英?

雄?

行D走?

voidLoadMap(HDChdc,HDCmemDC)//读á取?

地?

图?

voidMain_OnKey(HWNDhwnd,UINTvk,BOOLfDown,intcRepeat,UINTflags)//Main_OnKey

voidSenceMove(HWNDhwnd,HDChdc,HDCmemDC,intScreen)//场?

景°偏?

移?

voidEnemyPaint(HWNDhwnd,HDChdc,HDCmemDC)//场?

景°怪?

物?

读á取?

voidBattleEnemyPaint(HDChdc,HDCmemDC)//战?

斗·画-面?

怪?

物?

读á取?

 

功能流程图:

游戏开始

第二关

第一关

战斗

失败胜利

英雄死亡场景

英雄加经验

特殊战斗

概率

英雄升级

进入商店

与大魔王对战

失败

游戏结束

胜利

 

三、设计步骤说明

1.开发环境配置(路径、头文件、静态或动态链接库等):

头文件:

resource.h、OEM.h、map.h、stdafx.h

2.全局以及局部的各种变量说明

3.自定义类及其成员函数的说明

怪物

英雄

4.实现功能的关键代码及代码含义。

POINThero;//英?

雄?

坐?

MAPmaps[20][16];

inttoolgate=1;

intMkeydown=0;//0无T1下?

2左哩?

3上?

4右?

intidown=0,iup=0,ileft=0,iright=0;

TCHARmoney[256];

TCHARlose[256];

voidMain_OnPaint(HWNDhwnd)

{

HINSTANCEhi=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);

PAINTSTRUCTps;

HDChdc;

hdc=BeginPaint(hwnd,&ps);

HDCmemDC=CreateCompatibleDC(hdc);

HDCmemDC2=CreateCompatibleDC(hdc);

if(maps[hero.x][hero.y].Events!

=0)

{

//场?

景°偏?

移?

SenceMove(hwnd,hdc,memDC,maps[hero.x][hero.y].Global);

}

else

{

//Map

HBITMAPBitMap=LoadBitmap(hi,MAKEINTRESOURCE(IDB_WALL));

SelectObject(memDC,BitMap);

LoadMap(hdc,memDC);

DeleteObject(BitMap);

//Hero

HBITMAPHero=LoadBitmap(hi,MAKEINTRESOURCE(IDB_HERO));

SelectObject(memDC,Hero);

HeroPaint(hdc,memDC);

DeleteObject(Hero);

//Enemy

EnemyPaint(hwnd,hdc,memDC);

}

ReleaseDC(hwnd,memDC);

EndPaint(hwnd,&ps);

}

 

//////////////////////////////////////////////////////////////////////////

//英?

雄?

行D走?

voidHeroPaint(HDChdc,HDCmemDC)

{

switch(Mkeydown)

{

case0:

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HERODOWN,RGB(0,0,0));

}break;

case1:

//下?

{

if(idown%3==0)

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HERODOWN,RGB(0,0,0));

}

elseif(idown%3==1)

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HERODOWN1,RGB(0,0,0));

}

elseif(idown%3==2)

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HERODOWN2,RGB(0,0,0));

}

}break;

case2:

//左哩?

{

if(ileft%3==0)

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HEROLEFT,RGB(0,0,0));

}

elseif(ileft%3==1)

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HEROLEFT1,RGB(0,0,0));

}

elseif(ileft%3==2)

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HEROLEFT2,RGB(0,0,0));

}

}break;

case3:

//上?

{

if(iup%3==0)

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HEROUP,RGB(0,0,0));

}

elseif(iup%3==1)

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HEROUP1,RGB(0,0,0));

}

elseif(iup%3==2)

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HEROUP2,RGB(0,0,0));

}

}break;

case4:

//右?

{

if(iright%3==0)

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HERORIGHT,RGB(0,0,0));

}

elseif(iright%3==1)

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HERORIGHT1,RGB(0,0,0));

}

elseif(iright%3==2)

{

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HERORIGHT2,RGB(0,0,0));

}

}break;

default:

TransparentBlt(hdc,32*hero.x,32*hero.y,32,31,memDC,HERODOWN,RGB(0,0,0));

break;

}

}

//读á取?

地?

图?

voidLoadMap(HDChdc,HDCmemDC)

{

inti,j;

for(i=0;i<20;i++)

{

for(j=0;j<15;j++)

{

switch(maps[i][j].Expect)

{

case0:

TransparentBlt(hdc,32*i,32*j,32,32,memDC,EXPECT1,RGB(255,255,255));

break;

case1:

TransparentBlt(hdc,32*i,32*j,32,32,memDC,EXPECT2,RGB(255,255,255));

break;

......

......

case8:

TransparentBlt(hdc,32*i,32*j,32,32,memDC,EXPECT9,RGB(255,255,255));

break;

case9:

//////////////////////////////////////////////////////////////////////////

//树骸?

背?

景°此?

处鋦错洙?

误ó

TransparentBlt(hdc,32*i,32*j,32,32,memDC,EXPECT7,RGB(255,255,255));

//////////////////////////////////////////////////////////////////////////

TransparentBlt(hdc,32*i,32*j,32,32,memDC,EXPECT10,RGB(255,255,255));

break;

default:

break;

}

}

}

}

//Main_OnKey

//E2(材?

质ê2)30生Θ?

命ü药?

水?

31攻¥+32防え?

33武?

器÷34防え?

具?

35上?

楼¥梯琘36下?

楼¥梯琘

voidMain_OnKey(HWNDhwnd,UINTvk,BOOLfDown,intcRepeat,UINTflags)

{

InvalideHero.left=32*(hero.x-2);

InvalideHero.right=32*(hero.x+2);

InvalideHero.top=32*(hero.y-2);

InvalideHero.bottom=32*(hero.y+2);

switch(vk)

{

caseVK_DOWN:

{

if(maps[hero.x][hero.y].Events==0)

{

Mkeydown=1;

if((hero.y<14)&&(!

maps[hero.x][hero.y+1].Block))//碰?

撞?

路·径?

检ì测a

{

hero.y++;

idown++;

if(maps[hero.x][hero.y].Events!

=0)

{

InvalidateRect(hwnd,FALSE,NULL);

return;

}

InvalidateRect(hwnd,&InvalideHero,FALSE);

}

else

{

}

}

elseif(maps[hero.x][hero.y].Events>29)

{

switch(maps[hero.x][hero.y].Events)

{

case30:

{

if(hr.Life<400)

{

hr.Life+=100;

}

else

{

hr.Life=500;

}

}

break;

case31:

{

hr.attack+=20;

}break;

case32:

{

hr.recover+=5;

}break;

case33:

{

hr.addedattack+=20;

}break;

case34:

{

hr.addrecover+=5;

}break;

......

......

case36:

{

HDChdc=GetDC(hwnd);

HDCmemDC=CreateCompatibleDC(hdc);

LoadMap(hdc,memDC);

ReleaseDC(hwnd,memDC);

ReleaseDC(hwnd,hdc);

}break;

default:

break;

}

maps[hero.x][hero.y].Events=0;

InvalidateRect(hwnd,&InvalideHero,FALSE);

}

}break;

caseVK_LEFT:

{

.....

.....

.....

}break;

caseVK_RIGHT:

{

if(maps[hero.x][hero.y].Events==0)

{

Mkeydown=4;

if((hero.x<19)&&(!

maps[hero.x+1][hero.y].Block))

{

hero.x++;

iright++;

if(maps[hero.x][hero.y].Events!

=0)

{

InvalidateRect(hwnd,FALSE,NULL);

return;

}

InvalidateRect(hwnd,&InvalideHero,FALSE);

}

else

{

}

}

elseif(maps[hero.x][hero.y].Events>29)

{

switch(maps[hero.x][hero.y].Events)

{

case30:

......

......

}break;

default:

break;

}

maps[hero.x][hero.y].Events=0;

InvalidateRect(hwnd,&InvalideHero,FALSE);

}

}break;

caseVK_UP:

{

.....

.....

}break;

caseVK_RETURN:

{

if((hr.Life>0)&&(maps[hero.x][hero.y].Events!

=0))

{

maps[hero.x][hero.y].Events=0;

maps[hero.x][hero.y].Global=0;

InvalidateRect(hwnd,NULL,FALSE);

}

}break;

caseVK_ESCAPE:

{

if(IDYES==MessageBox(hwnd,TEXT("确ā?

认?

退?

出?

?

"),TEXT("确ā?

认?

信?

息¢"),MB_YESNO|MB_ICONINFORMATION|MB_DEFBUTTON2))

{

PostQuitMessage(0);

}

}break;

default:

break;

}

}

 

//////////////////////////////////////////////////////////////////////////

//场?

景°偏?

移?

voidSenceMove(HWNDhwnd,HDChdc,HDCmemDC,intScreen)

{

switch(Screen)

{

case1:

//战?

斗·场?

景°

{

PaintBattle(hwnd,hdc,memDC);

}break;

case2:

//特?

殊篴战?

斗·场?

景°

{

PaintBattle(hwnd,hdc,memDC);

toolgate++;

_sleep(500);

InvalidateRect(hwnd,NULL,FALSE);

ZeroMemory(maps,sizeof(maps));

TCHARtogate[256];

ZeroMemory(togate,sizeof(togate)/sizeof(TCHAR));

wsprintf(togate,TEXT("%d.map"),toolgate);

FILE*fp;

fp=fopen(togate,"r+");

fread(maps,sizeof(MAP),320,fp);

fclose(fp);

LoadMap(hdc,memDC);

SenceMove(hwnd,hdc,memDC,maps[hero.x][hero.y].Global);

}break;

case3:

//商Θ?

店台?

读á取?

{

}break;

case4:

{

PaintEnd(hwnd,hdc,memDC);//读á取?

结á束?

场?

景°

}break;

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

当前位置:首页 > 经管营销 > 企业管理

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

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