黄金矿工代码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

//-----------------------------------------------------------------------------////-----------------------------------------------------------------------------#includeCommonAPI.h#includestdio.h#includestring.hvoidDrawHookLine();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=0.f){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(fSpeedX0.00001f&&fSpeedX-0.00001f&&fSpeedY0.00001f&&fSpeedY-0.00001f){//解除金块与钩子的锚定dSpriteDismount(szGotGoldName);//删除获取的金块dDeleteSprite(szGotGoldName);//回拉结束,设定状态为0g_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;iLoopg_iGoldCount;iLoop++){if(iLoop10)//生成10个小金块,大小为4{iSize=4;}elseif(iLoop=10&&iLoop16)//生成6个中金块,大小为6{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){//按下↓并且游戏状态为0g_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.该小数乘以空钩子

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功