logo资料库

funcode海底世界源代码.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
funcode 海底世界练习 c 语言 注意:将代码粘贴在 main.cpp 中后,需要在 funcode 界面界面上选中两条鱼,并且分别改名 为 fish_muban 和 myfish,改完后需要保存!!然后就可以运行了 //----- //------------------------------------------------------------------------ // float g_fScreenLeft = 0.f; // 屏幕左边界值 float g_fScreenRight = 0.f; // 右 float g_fScreenTop = 0.f; // 上 float g_fScreenBottom = 0.f; // 下 float g_fSpeedLeft = 0.f; // 左方向速度 float g_fSpeedRight = 0.f; // 右 float g_fSpeedTop = 0.f; // 上 float g_fSpeedBottom = 0.f; // 下 //----------------------------------------------------------------------------- #include "CommonAPI.h" #include "LessonX.h" #include "stdio.h" /////////////////////////////////////////////////////////////////////////////////////////// // // 主函数入口 // ////////////////////////////////////////////////////////////////////////////////////////// int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 初始化游戏引擎 if( !dInitGameEngine( hInstance, lpCmdLine ) ) return 0; g_fScreenLeft = dGetScreenLeft(); g_fScreenRight = dGetScreenRight(); g_fScreenTop = dGetScreenTop(); g_fScreenBottom = dGetScreenBottom(); for(int i=0; i<4; i++) { char szName[128]; sprintf(szName, "fish%d", i); // 注意,szName 传入时不能是空指针 } // To do : 在此使用 API 更改窗口标题 dSetWindowTitle("Lesson"); dSetSpriteWorldLimit("myfish", WORLD_LIMIT_NULL, g_fScreenLeft, g_fScreenTop, g_fScreenRight, g_fScreenBottom);
for( int i=0; i<4; i++) { char szName[128]; float fPosX, fPosY; float fSpeedX; sprintf(szName, "fish%d", i); {dCloneSprite("fish_muban", szName);} fPosX = dRandomRange(g_fScreenLeft+10.f, g_fScreenRight-10.f); fPosY = dRandomRange(g_fScreenTop+10.f, g_fScreenBottom-10.f); dSetSpritePosition(szName, fPosX, fPosY); fSpeedX = dRandomRange(10, 20); dSetSpriteLinearVelocity(szName, fSpeedX, 0); dSetSpriteWorldLimit(szName, WORLD_LIMIT_NULL, g_fScreenLeft-20.f, g_fScreenTop, g_fScreenRight+20.f, g_fScreenBottom); } // 引擎主循环,处理屏幕图像刷新等工作 while( dEngineMainLoop() ) { // 获取两次调用之间的时间差,传递给游戏逻辑处理 float fTimeDelta = dGetTimeDelta(); // 执行游戏主循环 GameMainLoop( fTimeDelta ); }; // 关闭游戏引擎 dShutdownGameEngine(); return 0; } //========================================================================= = // // 引擎捕捉鼠标移动消息后,将调用到本函数 void dOnMouseMove( const float fMouseX, const float fMouseY ) { // 可以在此添加游戏需要的响应函数 } //========================================================================= = // // 引擎捕捉鼠标点击消息后,将调用到本函数 void dOnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY ) { // 可以在此添加游戏需要的响应函数 } //========================================================================= = //
// 引擎捕捉鼠标弹起消息后,将调用到本函数 void dOnMouseUp( const int iMouseType, const float fMouseX, const float fMouseY ) { // 可以在此添加游戏需要的响应函数 } void Swimming() { if((g_fSpeedLeft + g_fSpeedRight) > 0) dSetSpriteFlipX("myfish", false); else if((g_fSpeedLeft + g_fSpeedRight) < 0) dSetSpriteFlipX("myfish", true); dSetSpriteLinearVelocity("myfish", g_fSpeedLeft + g_fSpeedRight, g_fSpeedTop + g_fSpeedBottom); } //========================================================================= = // // 引擎捕捉键盘按下消息后,将调用到本函数 // iAltPress iShiftPress iCtrlPress 分别为判断 Shift,Alt,Ctrl 当前是否也处于按下状态。比如 可以判断 Ctrl+E 组合键 void dOnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress ) { switch(iKey) { case KEY_W: g_fSpeedTop = -10.f; break; case KEY_A: g_fSpeedLeft = -15.f; break; case KEY_S: g_fSpeedBottom = 10.f; break; case KEY_D: g_fSpeedRight = 15.f; break; default: break; } Swimming(); dSetSpriteLinearVelocity("myfish", g_fSpeedLeft + g_fSpeedRight, g_fSpeedTop + g_fSpeedBottom); // 可以在此添加游戏需要的响应函数 }
//========================================================================= = // // 引擎捕捉键盘弹起消息后,将调用到本函数 void dOnKeyUp( const int iKey ) { switch(iKey) { case KEY_W: g_fSpeedTop = 0.f; break; case KEY_A: g_fSpeedLeft = 0.f; break; case KEY_S: g_fSpeedBottom = 0.f; break; case KEY_D: g_fSpeedRight = 0.f; break; } Swimming(); dSetSpriteLinearVelocity("myfish", g_fSpeedLeft + g_fSpeedRight, g_fSpeedTop + g_fSpeedBottom); // 可以在此添加游戏需要的响应函数 } //========================================================================= == // // 引擎捕捉到精灵与精灵碰撞之后,调用此函数 void dOnSpriteColSprite( const char *szSrcName, const char *szTarName ) { } //========================================================================= == // // 引擎捕捉到精灵与世界边界碰撞之后,调用此函数. // iColSide : 0 左边,1 右边,2 上边,3 下边 void dOnSpriteColWorldLimit( const char *szName, const int iColSide ) { bool bFlip; float fSpeedX; float fPosY; if(strstr(szName, "fish")!=NULL)
{ if(strcmp(szName, "myfish") == 0) // myfish 精灵 { dSetSpriteLinearVelocity(szName, 0, 0); } else { // 另外 4 条鱼 if(iColSide == 1) // 右边 { bFlip = true; fSpeedX = -dRandomRange(10, 20); } else if(iColSide == 0) // 左边 { bFlip = false; fSpeedX = dRandomRange(10, 20); } dSetSpriteFlipX(szName, bFlip); dSetSpriteLinearVelocity(szName, fSpeedX, 0); fPosY=dRandomRange(g_fScreenTop+10.f,g_fScreenBottom-10.f); dSetSpritePositionY(szName, fPosY); } } }
分享到:
收藏