黄金矿工代码

上传人:bei****lei 文档编号:180631737 上传时间:2023-01-07 格式:DOCX 页数:8 大小:17.78KB
返回 下载 相关 举报
黄金矿工代码_第1页
第1页 / 共8页
黄金矿工代码_第2页
第2页 / 共8页
黄金矿工代码_第3页
第3页 / 共8页
点击查看更多>>
资源描述
/-/-#include CommonAPI.h#include stdio.h#include string.hvoid DrawHookLine();int g_fGoldBornMinX = 0;int g_fGoldBornMaxX = 0;int g_fGoldBornMinY = 0;int g_fGoldBornMaxY = 0;int g_iGoldCount = 20;int g_iGameState=2;int flag=1; float Score=0.f;int flagnum=0; char szGotGoldName20 ; /当前抓到金子的名称float g_fHookRotation = 0.f;float g_fEmptyHookSpeed =35.f;float fTimeDelta;float g_fHookStartPosX; /存储钩子的初始X位置float g_fHookStartPosY; /存储钩子的初始Y位置/ 主函数入口/int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) / 初始化游戏引擎 if( !dInitGameEngine( hInstance, lpCmdLine ) ) return 0; / 游戏初始化代码 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); const float fRotateSpeed = 45.f; / 摇摆速度,单位 度/秒 int iHookRotToLeft = 1; /钩子摆动的方向:1 ;0 float fTimeDelta = dGetTimeDelta(); / 引擎主循环,处理屏幕图像刷新等工作 while( dEngineMainLoop() ) / 获取两次调用之间的时间差,传递给游戏逻辑处理 float fTimeDelta = dGetTimeDelta(); DrawHookLine(); / 执行游戏主循环 if(g_iGameState = 0) float fThisRotate = 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); else if(g_iGameState = 1) dSetTextValue(Score,Score); /播放拉金块的动作 dAnimateSpritePlayAnimation(goldMan,GolderManAnimation3, 1 ); /获取钩子X方向的速度 float fSpeedX = dGetSpriteLinearVelocityX(GoldHook); /获取钩子Y方向的速度 float fSpeedY = 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(); return 0;/=/ 引擎捕捉鼠标移动消息后,将调用到本函数void dOnMouseMove( const float fMouseX, const float fMouseY ) / 可以在此添加游戏需要的响应函数/=/ 引擎捕捉鼠标点击消息后,将调用到本函数void dOnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY ) / 可以在此添加游戏需要的响应函数/=/ 引擎捕捉键盘按下消息后,将调用到本函数/ iAltPress iShiftPress iCtrlPress 分别为判断Shift,Alt,Ctrl当前是否也处于按下状态。比如可以判断Ctrl+E组合键void dOnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress ) / 可以在此添加游戏需要的响应函数 if(iKey=KEY_SPACE) g_iGameState = 1; / 初始化之后,将游戏状态设置为进行中 dSetSpriteVisible(GameBegin,0); /生成金子 int iLoop = 0; /循环变量控制 int iSize = 4, iPosX = 0, iPosY = 0; /iSize表示金块大小的变量 if(flag) for( iLoop = 0; iLoop g_iGoldCount; iLoop+ ) if( iLoop = 10 & iLoop 16 )/生成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 ) /按下并且游戏状态为 0 g_iGameState = 2; /置游戏状态为2,可用于控制钩子是否摆动 / 以当前朝向给钩子一个向前的速度 dSetSpriteLinearVelocityPolar(GoldHook,g_fEmptyHookSpeed,g_fHookRotation); / 播放挖金者的动作(一个胳膊往下压的动作) dAnimateSpritePlayAnimation(goldMan,GolderManAnimation1, 0); /0 表示播放一次,这里胳膊往下压就是一次 /=/ 引擎捕捉键盘弹起消息后,将调用到本函数void dOnKeyUp( const int iKey ) / 可以在此添加游戏需要的响应函数/=/ 引擎捕捉到精灵与精灵碰撞之后,调用此函数void dOnSpriteColSprite( const char *szSrcName, const char *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.该小数乘以空钩子的速度即得到挂接不同金子后的实际速度 float fWidth = dGetSpriteWidth( szTarName ); float fSpeed = (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 下边void dOnSpriteColWorldLimit( const char *szName, const int iColSide ) if(strcmp(szName,GoldHook)!=0) /碰到边界的为钩子时/同样设置为回拉,只是没有碰到金子 dSpriteMoveTo(szName,g_fHookStartPosX,g_fHookStartPosY, g_fEmptyHookSpeed, 1);/播放拉金块的动作 dAnimateSpritePlayAnimation(goldMan,GolderManAnimation3, 0); g_iGameState = 1; flagnum=0; void DrawHookLine() / 首先,从矿工精灵上获取一个缆绳链接点作为绳子的起始点 float fStartX = dGetSpriteLinkPointPosX( GoldMan, 1 ); float fStartY = dGetSpriteLinkPointPosY( GoldMan, 1 ); / 绳子终点在钩子精灵上获取 float fEndX = dGetSpriteLinkPointPosX( GoldHook, 1 ); float fEndY = dGetSpriteLinkPointPosY( GoldHook, 1 ); / 在这两点之间划线.线的颜色红绿蓝值都为50,即灰色 dDrawLine( fStartX, fStartY, fEndX, fEndY, 2.f, 0, 50, 50, 50, 255 );
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!