//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
#include "CommonAPI.h"
#include "LessonX.h"
#include <bits/stdc++.h>
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; // 下
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);
}
///
//
// 主函数入口
//
//
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();
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("yu_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-10.f, g_fScreenTop-10.f, g_fScreenRight+10.f,
g_fScreenBottom+10.f);
}
// To do : 在此使用API更改窗口标题
dSetWindowTitle("Lesson");
// 引擎主循环,处理屏幕图像刷新等工作
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 )
{
// 可以在此添加游戏需要的响应函数
}
//==========================================================================
//
// 引擎捕捉键盘按下消息后,将调用到本函数
// 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();
}
//==========================================================================
//
// 引擎捕捉键盘弹起消息后,将调用到本函数
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();
}
//===========================================================================
//
// 引擎捕捉到精灵与精灵碰撞之后,调用此函数
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精灵
{
if(iColSide==2||iColSide==3)
{
dSetSpriteLinearVelocity("myfish", g_fSpeedLeft + g_fSpeedRight, 0);
}
else if(iColSide==0||iColSide==1)
{
dSetSpriteLinearVelocity("myfish", 0, g_fSpeedTop +g_fSpeedBottom);
}
}
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);
}
}
}