完整版黄金矿工实验报告.docx

上传人:b****3 文档编号:2889087 上传时间:2022-11-16 格式:DOCX 页数:14 大小:83.89KB
下载 相关 举报
完整版黄金矿工实验报告.docx_第1页
第1页 / 共14页
完整版黄金矿工实验报告.docx_第2页
第2页 / 共14页
完整版黄金矿工实验报告.docx_第3页
第3页 / 共14页
完整版黄金矿工实验报告.docx_第4页
第4页 / 共14页
完整版黄金矿工实验报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

完整版黄金矿工实验报告.docx

《完整版黄金矿工实验报告.docx》由会员分享,可在线阅读,更多相关《完整版黄金矿工实验报告.docx(14页珍藏版)》请在冰豆网上搜索。

完整版黄金矿工实验报告.docx

完整版黄金矿工实验报告

游戏截图

中国石油大学(华东)程序设计实训报告

“黄金矿工”实验报告

图一:

开始游戏

 

 

图二:

按下空格键开始游戏,出现金块,钩子转动

图三:

按下J键,钩子停止转动,开始下放,抓取金块

图四:

抓完金块后返回初始界面

功能描述

1、游戏运行,初始界面出现“空格开始”的提示。

2、玩家按下空格键,开始游戏。

3、游戏开始后,界面随机出现20个大小不同的金子,并且钩子开始转动。

4、按下J键,钩子停止转动,下放,抓取金子。

5、抓到金子后,返回到初始位置,被抓到的金子消失。

6、用户继续按下J键,继续抓取金子,直到金子被抓取完,

这样一局游戏完成。

7、一局游戏完成后,屏幕重新出现“空格开始”的标志,用

户按下空格可以继续游戏,如此往复。

流程图:

 

数据结构:

1、g_fGoldBornMinX

金子左边界

2、g_fGoldBornMaxX

金子右边界

3、g_fGoldBornMinY

金子上边界

4、g_fGoldBornMaxY

金子下边界

算法描述:

游戏状态g_iGameState分为三种状态0,1,2,其中0表示游戏

结束状态,1表示游戏初始化,2则表示游戏运行状态;

01的转换为“空格开始”;

12的转换自然发生,即游戏初始化函数后会自动将游戏状态

从1置为2;

2表示游戏运行状态,在该状态,按下J键可以抓取金子;

20的转换为当金子全被抓完后会自动将游戏状态从2置为0;

金子精灵的初始化:

1、创建金子精灵的对象;

2、生成大小为4的小金块10个、大小为6的中金块6个、大小为8的大金块4个,并保存tmpName数组中,随机获取每个金子的坐标;

3、隐藏“空格开始”精灵;

4、设置屏幕中剩下的金子数目为20,每当被抓走的一块金子消失后屏幕中剩下的金子数目减1;

5、当屏幕中剩下的金子数目为0时,一局游戏结束,返回初始界面,“空格开始”精灵出现;

6、重新进行金子精灵的初始化;dOnKeyDownc(onstintiKey,constboolbAltPress,constboolbShiftPress,constboolbCtrlPress)游戏开始和控制按钮:

1、游戏还未开始,即游戏状态为0,如果空格按被下,则将游戏状态改为1,此时对程序的数据进行初始化,“空格开始”精灵消失,金子出现,钩子转动;

2、游戏状态为0时并按下空格键后,,如果按下J键,钩子开始下放抓金子,当抓到金子后,游戏的状态变为2游戏正式开始运行;

3、游戏状态为2时,钩子抓住金子后,按照金子的大小设置金子的速度,金子越大,回拉速度越小;

4、当钩子和金子回到初始位置后,被抓的金子消失;

源代码:

在Main.cpp文件中

//

//

//

#include"CommonAPI.h"

#include"stdio.h"

#include"string.h"

voidDrawHookLine();

0;

intg_fGoldBornMaxX=intg_fGoldBornMinY=intg_fGoldBornMaxY=intg_iGoldCount=20;intg_iGameState=2;

intflag=1;

intflagnum=0;

charszGotGoldName[20]floatg_fHookRotation=0.f;floatg_fEmptyHookSpeed

0;

0;

0;

;//当前抓到金子的名称

=35.f;

floatfTimeDelta;

floatg_fHookStartPosX;//存储钩子的初始X位置

floatg_fHookStartPosY;//存储钩子的初始Y位置/////////////////////////////////////////////////////////////////////////////////////////////

//主函数入口

//

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

intPASCALWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,

intnCmdShow)

{

//初始化游戏引擎

if(!

dInitGameEngine(hInstance,lpCmdLine))

return0;

//游戏初始化代码

dSetWindowTitle("黄金矿工");

g_fGoldBornMinX=dGetScreenLeft()+5;//金子左边界

g_fGoldBornMaxX=dGetScreenRight()-5;//金子右边界

g_fGoldBornMinY=dGetScreenTop()+20;//金子上边界

g_fGoldBornMaxY=dGetScreenBottom()-5;//金子下边界

g_fHookStartPosX=dGetSpritePositionX("GoldHook");//获取钩子的初始

g_fHookStartPosY=dGetSpritePositionY("GoldHook");//获取钩子的初始

dSetSpriteCollisionSend("goldHook",1);dSetSpriteCollisionReceive("goldTemplate",1);

constfloatfRotateSpeed=45.f;//摇摆速度,单位度/秒

intiHookRotToLeft=1;//钩子摆动的方向:

1—;0

floatfTimeDelta=dGetTimeDelta();

//引擎主循环,处理屏幕图像刷新等工作

while(dEngineMainLoop())

{

//获取两次调用之间的时间差,传递给游戏逻辑处理

floatfTimeDelta=dGetTimeDelta();

DrawHookLine();

//执行游戏主循环

if(g_iGameState==0)

{

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("GoldHook",g_fHookRotation);

}

elseif(g_iGameState==1)

{

dAnimateSpritePlayAnimation("goldMan","GolderManAnimation3",1)播放拉金块的动作

X坐标

Y坐标

//

〃获取钩子X方向的速度

floatfSpeedX=dGetSpriteLinearVelocityX("GoldHook");

//获取钩子Y方向的速度

floatfSpeedY=dGetSpriteLinearVelocityY("GoldHook");

//当速度接近为0时,即可判定其已到达初始点

if(fSpeedX<0.00001f&&fSpeedX>-0.00001f&&fSpeedY<0.00001f&&fSpeedY>-0.00001f)

{

//解除金块与钩子的锚定dSpriteDismount(szGotGoldName);

//删除获取的金块

dDeleteSprite(szGotGoldName);

//回拉结束,设定状态为0

g_iGameState=0;

//播放矿工的动画,即准备拉金子的动画if(flagnum){g_iGoldCount--;

}

}

}

//播放挖金者的动作(恢复初始守候动作)dAnimateSpritePlayAnimation("goldMan","GolderManAnimation2",1);if(g_iGoldCount==0)

{

g_iGameState=0;

dSetSpriteVisible("GameBegin",1);

g_iGoldCount=20;

flag=1;

}

};dAnimateSpritePlayAnimation("goldMan","GolderManAnimation2",1);

//关闭游戏引擎dShutdownGameEngine();return0;

}//=========================================================================

//

//引擎捕捉鼠标移动消息后,将调用到本函数

voiddOnMouseMove(constfloatfMouseX,constfloatfMouseY)

{

//可以在此添加游戏需要的响应函数

}//=========================================================================

//

//引擎捕捉鼠标点击消息后,将调用到本函数

voiddOnMouseClick(constintiMouseType,constfloatfMouseX,constfloatfMouseY)

{

//可以在此添加游戏需要的响应函数

}

//=========================================================================

//

//引擎捕捉键盘按下消息后,将调用到本函数

//iAltPressiShiftPressiCtrlPress分别为判断Shift,Alt,Ctrl当前是否也处于按下状态。

比如可以判断Ctrl+E组合键

voiddOnKeyDown(constintiKey,constintiAltPress,constintiShiftPress,constintiCtrlPress)

{

//可以在此添加游戏需要的响应函数

if(iKey==KEY_SPACE)

{

g_iGameState=1;//初始化之后,将游戏状态设置为进行中dSetSpriteVisible("GameBegin",0);

//生成金子

intiLoop=0;//循环变

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

当前位置:首页 > 医药卫生 > 基础医学

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

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