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);
}
}
}