黄金矿工代码Word格式.docx

上传人:b****5 文档编号:21417817 上传时间:2023-01-30 格式:DOCX 页数:6 大小:39.91KB
下载 相关 举报
黄金矿工代码Word格式.docx_第1页
第1页 / 共6页
黄金矿工代码Word格式.docx_第2页
第2页 / 共6页
黄金矿工代码Word格式.docx_第3页
第3页 / 共6页
黄金矿工代码Word格式.docx_第4页
第4页 / 共6页
黄金矿工代码Word格式.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

黄金矿工代码Word格式.docx

《黄金矿工代码Word格式.docx》由会员分享,可在线阅读,更多相关《黄金矿工代码Word格式.docx(6页珍藏版)》请在冰豆网上搜索。

黄金矿工代码Word格式.docx

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"

//获取钩子的初始X坐标

g_fHookStartPosY=dGetSpritePositionY("

//获取钩子的初始Y坐标

dSetSpriteCollisionSend("

goldHook"

1);

dSetSpriteCollisionReceive("

goldTemplate"

g_fHookRotation=180.f;

iHookRotToLeft=0;

}

else

{

g_fHookRotation-=fThisRotate;

if(g_fHookRotation<

=0.f)

g_fHookRotation=0.f;

iHookRotToLeft=1;

dSetSpriteRotation("

g_fHookRotation);

elseif(g_iGameState==1)

{

dSetTextValue("

Score"

Score);

//播放拉金块的动作

dAnimateSpritePlayAnimation("

goldMan"

"

GolderManAnimation3"

1);

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

floatfSpeedX=dGetSpriteLinearVelocityX("

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

floatfSpeedY=dGetSpriteLinearVelocityY("

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

if(fSpeedX<

0.00001f&

&

fSpeedX>

-0.00001f&

fSpeedY<

fSpeedY>

-0.00001f)

//解除金块与钩子的锚定

dSpriteDismount(szGotGoldName);

//删除获取的金块

dDeleteSprite(szGotGoldName);

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

g_iGameState=0;

if(flagnum)

{g_iGoldCount--;

//播放挖金者的动作(恢复初始守候动作)

"

GolderManAnimation2"

if(g_iGoldCount==0)

Score=0;

dSetSpriteVisible("

GameBegin"

1);

g_iGoldCount=20;

flag=1;

};

//关闭游戏引擎

dShutdownGameEngine();

}

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

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

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;

//初始化之后,将游戏状态设置为进行中

0);

//生成金子

intiLoop=0;

//循环变量控制

intiSize=4,iPosX=0,iPosY=0;

//iSize表示金块大小的变量

if(flag)

for(iLoop=0;

iLoop<

g_iGoldCount;

iLoop++)

if(iLoop<

10)//生成10个小金块,大小为4

iSize=4;

elseif(iLoop>

=10&

16)//生成6个中金块,大小为6

iSize=6;

else//生成4个大金块,大小为8

iSize=8;

}//初始化金子精灵实例

char*tmpName;

//生成金块名字

tmpName=dMakeSpriteName("

GoldBlock"

iLoop);

dCloneSprite("

tmpName);

//设置金块的宽度

dSetSpriteWidth(tmpName,(float)iSize);

//设置金块的高度

dSetSpriteHeight(tmpName,(float)iSize);

//设置金子精灵位置

iPosX=dRandomRange(g_fGoldBornMinX,g_fGoldBornMaxX);

iPosY=dRandomRange(g_fGoldBornMinY,g_fGoldBornMaxY);

dSetSpritePosition(tmpName,(float)iPosX,(float)iPosY);

flag=0;

g_iGoldCount=20;

if(iKey==KEY_S&

g_iGameState==0)

{//按下↓并且游戏状态为"

0"

g_iGameState=2;

//置游戏状态为2,可用于控制钩子是否摆动

//以当前朝向给钩子一个向前的速度

dSetSpriteLinearVelocityPolar("

g_fEmptyHookSpeed,g_fHookRotation);

//播放挖金者的动作(一个胳膊往下压的动作)

GolderManAnimation1"

0);

//0表示播放一次,这里胳膊往下压就是一次

}

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

voiddOnKeyUp(constintiKey)

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

//引擎捕捉到精灵与精灵碰撞之后,调用此函数

voiddOnSpriteColSprite(constchar*szSrcName,constchar*szTarName)

//发起者为GoldHook,接受者含有GoldBlock字段

if(strcmp(szSrcName,"

)==1&

strstr(szTarName,"

)!

=NULL)

//将金块锚定在钩子上

dSpriteMountToSpriteLinkPoint(szTarName,"

2);

//使钩子向初始位置移动,即会拉

dSpriteMoveTo("

g_fHookStartPosX,g_fHookStartPosY,g_fEmptyHookSpeed,1);

//复制并保存当前抓取到金块的名称

strcpy(szGotGoldName,szTarName);

//根据金子大小,计算钩子的往回收的速度,越大的越慢。

//算法:

之前设置的金子大小为4,6,8,用10减去该大小再除以10,得到3个小数:

0.6,0.4,0.2.该小数乘以空钩子的速度即得到挂接不同金子后的实际速度

floatfWidth=dGetSpriteWidth(szTarName);

floatfSpeed=((10.f-fWidth)/10.f)*g_fEmptyHookSpeed;

Score+=fWidth;

//钩子往初始位置移动

dSpriteMoveTo("

goldhook"

g_fHookStartPosX,g_fHookStartPosY,fSpeed,1);

0);

flagnum=1;

//引擎捕捉到精灵与世界边界碰撞之后,调用此函数.

//iColSide:

0左边,1右边,2上边,3下边

voiddOnSpriteColWorldLimit(constchar*szName,constintiColSide)

if(strcmp(szName,"

=0)

//碰到边界的为钩子时

//同样设置为回拉,只是没有碰到金子

dSpriteMoveTo(szName,g_fHookStartPosX,g_fHookStartPosY,g_fEmptyHookSpeed,1);

//播放拉金块的动作

flagnum=0;

voidDrawHookLine()

//首先,从矿工精灵上获取一个缆绳链接点作为绳子的起始点

floatfStartX=dGetSpriteLinkPointPosX("

GoldMan"

floatfStartY=dGetSpriteLinkPointPosY("

//绳子终点在钩子精灵上获取

floatfEndX=dGetSpriteLinkPointPosX("

floatfEndY=dGetSpriteLinkPointPosY("

//在这两点之间划线.线的颜色红绿蓝值都为50,即灰色

dDrawLine(fStartX,fStartY,fEndX,fEndY,2.f,0,50,50,50,255);

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

当前位置:首页 > 工程科技 > 能源化工

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

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