小游戏黄金矿工设计报告Word下载.docx
- 文档编号:20510147
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:32
- 大小:2.36MB
小游戏黄金矿工设计报告Word下载.docx
《小游戏黄金矿工设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《小游戏黄金矿工设计报告Word下载.docx(32页珍藏版)》请在冰豆网上搜索。
当然,由于技术原因,我们想要设计的软件只是局限于对游戏功能的实现,而实际中正式的欢迎界面,游戏说明等优美的图片,我们并没有进行设计,包括刚开始拟定的金子运动、玩家升级等也取消了。
然而,这并不影响我们制作小游戏的热情,而且我们根据其具体的功能进行了组员之间的分工合作。
二、功能需求
Ⅰ.程序大体流程图:
图1.游戏模块图
Ⅱ.部分函数介绍
本实验用到的API
externfloatdGetScreenLeft();
/*获取世界边界之左边X坐标*/
externfloatdGetScreenTop();
/*获取世界边界之上边Y坐标*/
externfloatdGetScreenRight();
/*获取世界边界之右边X坐标*/
externfloatdGetScreenBottom();
/*获取世界边界之下边Y坐标*/
externvoiddSetSpriteWidth(constchar*szName,constfloatfWidth);
/*设置精灵外形宽度*/
externfloatdGetSpriteWidth(constchar*szName);
/*dGetSpriteWidth:
获取精灵外形宽度*/
externintdRandomRange(constintiMin,constintiMax);
/*获取一个位于参数1到参数2之间的随机数*/
externvoiddSetSpriteRotation(constchar*szName,constfloatfRot);
/*设置精灵的旋转角度*/
externvoiddSetSpriteLinearVelocityPolar(constchar*szName,constfloatfSpeed,constfloatfPolar);
/*设置精灵移动速度*/
externintdAnimateSpritePlayAnimation(constchar*szName,constchar*szAnim,constintiRestore);
/*精灵播放动画*/
externfloatdGetSpriteLinkPointPosX(constchar*szName,constintiId);
/*获取精灵链接点X坐标。
链接点是依附于精灵的一个坐标点*/
externfloatdGetSpriteLinkPointPosY(constchar*szName,constintiId);
/*获取精灵链接点Y坐标。
externvoiddDrawLine(constfloatfStartX,constfloatfStartY,constfloatfEndX,constfloatfEndY,constfloatfLineWidth,constintiLayer,constintiRed,constintiGreen,constintiBlue,constintiAlpha);
/*dDrawLine:
两点之间画线*/
Funcode接口介绍
externvoiddOnSpriteColSprite(constchar*szSrcName,constchar*szTarName);
/*精灵与精灵碰撞后将被调用的函数*/
externintdSpriteMountToSpriteLinkPoint(constchar*szSrcName,constchar*szDstName,constintiPointId);
/*将一个精灵绑定到另一个精灵上,绑定位置为指定*的链接点,暂时的成为另一个精灵的一部分,跟随其运动等*/
externfloatdGetSpritePositionX(constchar*szName);
/*获取精灵X坐标*/
externfloatdGetSpritePositionY(constchar*szName);
/*获取精灵Y坐标*/
funcode函数
(1)/*主函数入口*/
intPASCALWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
/*初始化游戏引擎*/
if(!
dInitGameEngine(hInstance,lpCmdLine))
return0;
/*在此使用API更改窗口标题*/
dSetWindowTitle("
Lesson"
);
/*引擎主循环,处理屏幕图像刷新等工作*/
while(dEngineMainLoop())
/*获取两次调用之间的时间差,传递给游戏逻辑处理*/
floatfTimeDelta=dGetTimeDelta();
/*执行游戏主循环*/
GameMainLoop(fTimeDelta);
};
/*关闭游戏引擎*/
dShutdownGameEngine();
return0;
}
(2)/*引擎捕捉键盘按下消息后,将调用到本函数*/
voiddOnKeyDown(constintiKey,constintiAltPress,constintiShiftPress,constintiCtrlPress)
(3)/*引擎捕捉键盘弹起消息后,将调用到本函数*/
voiddOnKeyUp(constintiKey)
(4)/*引擎捕捉到精灵与精灵碰撞之后,调用此函数*/
voiddOnSpriteColSprite(constchar*szSrcName,constchar*szTarName)
(5)/*引擎捕捉到精灵与世界边界碰撞之后,调用此函数.*/
voiddOnSpriteColWorldLimit(constchar*szName,constintiColSide)
其它函数
(1)出现金块、钻石、炸弹、石头,并增加其碰撞属性
voidAppear();
(2)画出链接钩子的线
voidline();
(3)重置游戏初始状态
voidbegin();
(4)游戏结束后,清楚剩余金块、钻石、炸弹、石头
voidDisappear();
三、总体设计
.下图为主函数及各级嵌套函数的流程图,部分省略。
图2.主函数流程图
、操作使用说明
当钩子摆动到一定角度,玩家可以单击键盘上的上下左右键中的下方向键控制矿工伸出长钩,抓取金子等——抓到一个金子金子加20分,钻石加50分且拉回速度变慢,石头加5分且拉回速度变慢,抓到炸弹不加分且炸弹会爆炸。
获取到金子等往回拉后,矿工是不断转动转轴,知道金子拉动到钩子初始处,矿工恢复静止,钩子继续左右摇摆,直到玩家再次单击向下方向键。
3.存在计分和计时系统。
四、详细设计
1.变量定义部分
变量定义是一个完整的程序中不可或缺的内容。
在本次游戏编写中,我们根据程序需要,也不可缺少的设置了许多变量,下面我们简单介绍一下全局变量和主函数之中的部分变量:
(1)定义全局变量
///////////////////初始化物品数量////////////////////////////////////////
intg_iGoldCount=20;
//金子数量
intg_iBombCount=3;
//炸弹数量
intg_iDiaCount=2;
//钻石数量
intg_iStoneCount=4;
//石头数量
////////////////////////////初始化计时计分///////////////////////////////
floatg_iGameScore=0;
//初始化得分
floatg_fGameTime=60.f;
//计时,设定初始计时
boolg_bStart=0;
//计时,定义开始计时的状态
////////////////////////////设置钩子自由旋转的定义///////////////////////////////
floatg_fHookRotation=0.f;
intg_iGameState=0;
//定义游戏初始状态
floatg_fEmptyHookSpeed=15.f;
//定义钩子的速度
///////////////////////////设置钩子抓精灵的定义////////////////////////////////
floatg_fHookStartPosX;
//存储钩子的初始X位置
floatg_fHookStartPosY;
//存储钩子的初始Y位置
charszGotGoldName[20];
//当前抓到金子的名称
charszGotBombName[3];
//当前抓到炸弹的名称
charszGotDiaName[2];
//当前抓钻石的名称
charszGotStoneName[2];
//当前抓石头的名称
(2)主函数之中的局部变量
//////////////////////////设置钩子摇摆///////////////////////////////////
constfloatfRotateSpeed=45.f;
//摇摆速度,单位度/秒
intiHookRotToLeft=1;
//钩子摆动的方向:
1←;
0→
/////////////////////////设置钩子抓金子///////////////////////////////////
g_fHookStartPosX=dGetSpritePositionX("
goldhook"
//获取钩子的初始X坐标
g_fHookStartPosY=dGetSpritePositionY("
//获取钩子的初始Y坐标
dSetSpriteWorldLimitMode("
WORLD_LIMIT_NULL);
//初始化钩子与世界边界碰撞的模式为NULL
2.主函数模块WinMain()函数模块
实现初始化游戏引擎,执行引擎主循环,处理屏幕图像刷新等工作,包括获取两次调用之间的时间差,传递给游戏逻辑处理等。
我们通过主函数实现设置初始化游戏状态、钩子摇摆、钩子抓金子、炸弹、石头、钻石等内容。
在本游戏中我们设计了5种游戏状态,分别为g_iGameState等于0、1、2、3、4。
其中,状态0为游戏初始状态,状态1和2为游戏运行状态,状态3为游戏结束状态,状态4为过渡到初始状态时运用的一个调整状态。
步骤详细介绍:
第一步,游戏初始化,显示初始界面需要的精灵
if(!
dInitGameEngine(hInstance,lpCmdLine))//初始化游戏引擎
return0;
dSetWindowTitle("
黄金矿工"
//设置窗口名字
begin();
//调用函数,初始游戏,显示初始精灵
第二步,游戏是一直进行的,因此游戏的重点是在while循环中。
While循环中使用“floatfTimeDelta=dGetTimeDelta();
”获取两次调用之间的时间差,传递给游戏逻辑处理,达到不断循环。
下面介绍一下此循环中使用的语句。
游戏倒计时,倒计时结束后实现状态跳转到结束状态
/////////////////////////////////////////////////////////////////倒计时/////////////////////////////////////////////////////////////////
if(g_bStart)//判断游戏是否开始
{
g_fGameTime-=fTimeDelta;
//设置游戏时间
if(g_fGameTime>
0)//判断游戏是否结束
{
dSetTextValue("
Time"
(int)(g_fGameTime));
//设置精灵"
时间"
显示数值
}
if(g_fGameTime<
=0&
&
(g_iGameState==2||g_iGameState==1))
//判断游戏是否结束,且在运行状态1或2时,其他状态不执行
g_iGameState=3;
//变成状态3,实现游戏结束
钩子的自由摆动,此过程是在状态0和1时准备抓金子时出现的
////////////////////////////////////////////////////////////////////钩子自由摆动////////////////////////////////////////////////////
floatfThisRotate=fRotateSpeed*fTimeDelta;
//本次旋转的角度
if(g_iGameState==0||g_iGameState==1)
floatfThisRotate=fRotateSpeed*fTimeDelta;
if(iHookRotToLeft)
{
g_fHookRotation+=fThisRotate;
if(g_fHookRotation>
=180.f)
g_fHookRotation=180.f;
iHookRotToLeft=0;
}
}
else
g_fHookRotation-=fThisRotate;
if(g_fHookRotation<
=0.f)
g_fHookRotation=0.f;
iHookRotToLeft=1;
dSetSpriteRotation("
g_fHookRotation);
//设置钩子的旋转角度
钩子抓金子,钩子抓金子为状态2,不需要钩子自由摆动
/////////////////////////////////////////////////////////////////钩子抓金子///////////////////////////////////////////////////////////
if(g_iGameState==2)
floatfSpeedX=dGetSpriteLinearVelocityX("
//获取钩子X方向的速度
floatfSpeedY=dGetSpriteLinearVelocityY("
//获取钩子Y方向的速度
if(fSpeedX<
0.00001f&
fSpeedX>
-0.00001f&
fSpeedY<
fSpeedY>
-0.00001f)//当速度接近为0时,即可判定其已到达初始点
dSpriteDismount(szGotGoldName);
//解除金块与钩子的锚定
dDeleteSprite(szGotGoldName);
//删除获取的金块
g_iGameState=1;
//回拉结束,设定状态为1,钩子摆动
dAnimateSpritePlayAnimation("
GoldMan"
"
GolderManAnimation2"
0);
//播放矿工的动画,即准备拉金子的动画
}
游戏状态3,显示游戏时间停止
if(g_iGameState==3)
dSetSpriteVisible("
over"
1);
//若结束显示Timeover
游戏状态为4时,实现过渡到游戏状态为1
if(g_iGameState==4)
//调用重置游戏初始化所需精灵
g_iGameState=0;
//实现游戏状态跳转到初始状态0
g_iGameScore=0;
//重置游戏分数为0
g_fGameTime=60.f;
//重置倒计时时间为60
g_bStart=0;
//停止先前状态中的倒计时
score"
(int)0);
dSetTextValue("
time"
(int)60);
dSetSpriteVisible("
0);
//隐藏Timeover
//出现计分装置
dSetSpriteVisible("
//出现计时装置
由于钩子的连线也是一直在游戏运行时存在的,故也应放入此循环中
////////////////////////////////////////////////////////设置与钩子链接的线//////////////////////////////////////////////////////
line();
//调用画线的函数
第四步,游戏结束,关闭游戏引擎,主函数完成
dShutdownGameEngine();
//关闭游戏引擎
3.有关系统给定的函数的设置
(1)dOnKeyDown()函数的详述,对于系统内我们主要使用此函数。
我们使用空格键控制游戏开始,方向下键控制钩子下落,回车键实现从结束状态到开始状态的过渡。
///////////////////////////////////////按下空格游戏开始///////////////////////////////////////////////
g_fEmptyHookSpeed=15.f;
//为之后调整绳子速度做准备
if(iKey==KEY_SPACE&
g_iGameState==0)//按下空格键且游戏状态为0时
g_iGameState=1;
//游戏状态变为1
GameBegin"
//消失游戏开始
HJKG"
//消失“黄金矿工”
Appear();
//调用函数出现金子等东西
g_bStart=1;
//计时开始的条件
////////////////////////////////////////////按下下键钩子下降///////////////////////////////////////////
if(iKey==KEY_DOWN&
g_iGameState==1)//按下下键且游戏状态为1时
g_iGameState=2;
//置游戏状态为2,可用于控制钩子是否摆动
dSetSpriteLinearVelocityPolar("
g_fEmptyHookSpeed,g_fHookRotation);
//以当前朝向给钩子一个向前的速度
dAnimateSpritePlayAnimation("
GolderManAnimation1"
0);
//播放挖金者的动作(一个胳膊往下压的动作),0表示播放一次,这里胳膊下压就是一次
////////////////////////////////按下回车键跳转到初始状态///////////////////////////////////////////
if(iKey==KEY_ENTER&
g_iGameState==3)//按下回车键且游戏状态为3
DisAppear();
//调用函数消除金子等东西
g_iGameState=4;
//游戏状态变为4
(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小游戏 黄金矿工 设计 报告