黄金矿工游戏(apex黄金矿工是什么意思)

黄金矿工游戏(apex黄金矿工是什么意思)

黄金矿工游戏(apex黄金矿工是什么意思)

//funcode黄金矿工源文件

#include"CommonAPI.h"

#include"stdio.h"

#include"string.h"

voidDrawHookLine();

intg_fGoldBornMinX=0;

intg_fGoldBornMaxX=0;

intg_fGoldBornMinY=0;

intg_fGoldBornMaxY=0;

intg_iGoldCount=20;

intg_iGameState=2;

intflag=1;

floatScore=0.f;

intflagnum=0;

charszGotGoldName[20];//当前抓到金子的名称

floatg_fHookRotation=0.f;

floatg_fEmptyHookSpeed=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");//获取钩子的初始X坐标

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

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

{

g_fHookRotation=0.f;

iHookRotToLeft=1;

}

}

dSetSpriteRotation("GoldHook",g_fHookRotation);

}

elseif(g_iGameState==1)

{

dSetTextValue("Score",Score);

//播放拉金块的动作

dAnimateSpritePlayAnimation("goldMan","GolderManAnimation3",1);//获取钩子X方向的速度

floatfSpeedX=dGetSpriteLinearVelocityX("GoldHook");

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

floatfSpeedY=dGetSpriteLinearVelocityY("GoldHook");

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

if(fSpeedX-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;

Score=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;//循环变量控制

intiSize=4,iPosX=0,iPosY=0;//iSize表示金块大小的变量

if(flag)

{

for(iLoop=0;iLoop

{

if(iLoop

{

iSize=4;

}

elseif(iLoop>=10&&iLoop

{

iSize=6;

}

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

{

iSize=8;

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

char*tmpName;

//生成金块名字

tmpName=dMakeSpriteName("GoldBlock",iLoop);

dCloneSprite("goldTemplate",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;

}

}

if(g_iGoldCount==0)

{

flag=1;

g_iGoldCount=20;

}

}

if(iKey==KEY_S&&g_iGameState==0)

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

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

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

dSetSpriteLinearVelocityPolar("GoldHook",g_fEmptyHookSpeed,g_fHookRotation);

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

dAnimateSpritePlayAnimation("goldMan","GolderManAnimation1",0);

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

}

}

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

//

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

voiddOnKeyUp(constintiKey)

{

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

}

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

//

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

voiddOnSpriteColSprite(constchar*szSrcName,constchar*szTarName)

{

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

if(strcmp(szSrcName,"GoldHook")==1&&strstr(szTarName,"GoldBlock")!=NULL)

{

//将金块锚定在钩子上

dSpriteMountToSpriteLinkPoint(szTarName,"GoldHook",2);

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

dSpriteMoveTo("GoldHook",g_fHookStartPosX,g_fHookStartPosY,g_fEmptyHookSpeed,1);

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

strcpy(szGotGoldName,szTarName);

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

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

//算法:之前设置的金子大小为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);

//播放拉金块的动作

dAnimateSpritePlayAnimation("goldMan","GolderManAnimation1",0);

g_iGameState=1;

flagnum=1;

}

}

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

//

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

//iColSide:0左边,1右边,2上边,3下边

voiddOnSpriteColWorldLimit(constchar*szName,constintiColSide)

{

if(strcmp(szName,"GoldHook")!=0)

{

//碰到边界的为钩子时

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

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

//播放拉金块的动作

dAnimateSpritePlayAnimation("goldMan","GolderManAnimation3",0);g_iGameState=1;

flagnum=0;

}

}

voidDrawHookLine()

{

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

floatfStartX=dGetSpriteLinkPointPosX("GoldMan",1);

floatfStartY=dGetSpriteLinkPointPosY("GoldMan",1);

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

floatfEndX=dGetSpriteLinkPointPosX("GoldHook",1);

floatfEndY=dGetSpriteLinkPointPosY("GoldHook",1);

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

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

}

本文来自投稿,不代表本站立场,如有侵权联系即删除,站长QQ:192398865:https://www.fulishes.com/99030/

(0)
上一篇 2023年11月3日 下午12:59
下一篇 2023年11月3日 下午1:02

相关推荐