LessonX.CPP文件
#include <Stdio.h>
#include “CommonAPI.h”
#include “LessonX.h”
#include <stdlib.h>
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,“winmm.lib”)
//
//
int g_iGameState = 0; // 游戏状态,0 – 游戏结束等待开始状态;1 – 按下空格键开始,初始化游戏;2 – 游戏进行中
//
void GameInit();
void GameRun( float fDeltaTime );
void GameEnd();
float g_gameTime=10.f;
float g_gameScore=0.f;
float fPaiziPosX=0.f;
float fPaiziPosY=0.f;
float fOldPaiziRotation=0.f;
float fResetPaiziRotation=0.f;
float fPosX=0.f,fPosY=0.f;
float fSpeed=0.f;
float fScreenLeft=0.f,fScreenRight=0.f,fScreenTop=0.f,fScreenBottom=0.f;
float fPosX1=0.f,fPosY1=0.f;
struct FlyBug
{
char szName[128];
int iScore;
}FlyBugs[15];
int g_iCount=0;
int g_HighScore[5];
//==============================================================================
//
// 大体的程序流程为:GameMainLoop函数为主循环函数,在引擎每帧刷新屏幕图像之后,都会被调用一次。
//==============================================================================
//
// 游戏主循环,此函数将被不停的调用,引擎每刷新一次屏幕,此函数即被调用一次
// 用以处理游戏的开始、进行中、结束等各种状态.
// 函数参数fDeltaTime : 上次调用本函数到此次调用本函数的时间间隔,单位:秒
void GameMainLoop( float fDeltaTime )
{
switch( g_iGameState )
{
// 初始化游戏,清空上一局相关数据
case 1:
{
GameInit();
g_iGameState = 2; // 初始化之后,将游戏状态设置为进行中
}
break;
// 游戏进行中,处理各种游戏逻辑
case 2:
{
// TODO 修改此处游戏循环条件,完成正确游戏逻辑
g_gameTime-=fDeltaTime;
if( g_gameTime>0 )
{
GameRun( fDeltaTime );
}
else
{
// 游戏结束。调用游戏结算函数,并把游戏状态修改为结束状态
g_iGameState = 0;
GameEnd();
}
}
break;
// 游戏结束/等待按空格键开始
case 0:
default:
break;
};
}
//==============================================================================
//
// 每局开始前进行初始化,清空上一局相关数据
void GameInit()
{
g_gameTime=10.f;
fPaiziPosX=dGetSpritePositionX("PAIZI");//huo de pai zi de hong zuo biao
fPaiziPosY=dGetSpritePositionY("PAIZI");//huo de pai zi de zong zuo biao
fOldPaiziRotation=dGetSpriteRotation("PAIZI");//huoqu pai zi de chushi zuobiao
fScreenLeft=dGetScreenLeft();//huoqu bing mu jie xian
fScreenRight=dGetScreenRight();//huoqu ping mu jie xian
fScreenTop=dGetScreenTop();//huo qu ping mu jie xian
fScreenBottom=dGetScreenBottom();//huo qu ping mu jie xian
dSetSpriteVisible("HY",false);//rang huang ying xiao shi
dSetSpriteVisible("KAISHI",false);//rang kai shi xiao shi
dSetTextValue("Time",g_gameTime);
dSetTextValue("Score",g_gameScore);
dShowCursor(false);//rang shu biao xiao shi
AddFlyBugs();//shiyong jia ru feichong de fang fa
for(int i=0;i<g_iCount;i++)//xian zhi shu liang
{
if(FlyBugs[i].iScore==1)//fen bie dui bu tong fen shu de jin xin pan duan
{
dCloneSprite("FEICHONG_MUBAN1",FlyBugs[i].szName);
}else{
if(FlyBugs[i].iScore==2)//butong de fen shu panduan
{
dCloneSprite("FEICHONG_MUBAN2",FlyBugs[i].szName);//ke long jing ling
}
if(FlyBugs[i].iScore==-1)//hudie de fenshu pan duan
{
dCloneSprite("HU",FlyBugs[i].szName);//ke long jing ling
}
}
dSetSpriteWorldLimit(FlyBugs[i].szName,WORLD_LIMIT_NULL,fScreenLeft-10.f,fScreenTop-10.f,fScreenRight+10.f,fScreenBottom+10.f);
Flying((FlyBugs[i].szName));
}
}
//==============================================================================
//
// 每局游戏进行中
void GameRun( float fDeltaTime )
{
dPlaySound("1",1,1);//bei jing yin yue
dSetTextValue("Time",g_gameTime);//huoqu you xi shi jian
if(fResetPaiziRotation>0)
{
fResetPaiziRotation-=fDeltaTime;
if(fResetPaiziRotation<0)
{
dSetSpriteRotation("PAIZI",fOldPaiziRotation);//paizi fu wei
}
}
dSetTextValue("Time",g_gameTime);
dSetTextValue("Score",g_gameScore);
}
//==============================================================================
//
// 本局游戏结束
void GameEnd()
{
FILE *fp;
fp=fopen(“1.TXT”,“w”);
if(fp!=NULL)
{
fprintf(fp,“Score”,1);
}
dSetSpriteVisible(“KAISHI”,true);//yi ju you xi jie shu shi ,chong xin xian shi chu lai
dSetSpritePosition(“PAIZI”,fPaiziPosX,fPaiziPosY);//pai zi fu wei
for(int i=0;i<g_iCount;i++)
{
dDeleteSprite(FlyBugs[i].szName);//pai da fei chong hou ,feichong xiao shi
}
int length=0;
length=sizeof(g_HighScore)/sizeof(g_HighScore[0]);//ce ding changdu
if(g_gameScore>g_HighScore[4])//jingxing bi jiao
{
g_HighScore[4]=g_gameScore;
MAOPAO(g_HighScore,length);
}
char szTextName[128];//dui fen shu jinxing bi jiao oai xu
for(int i=0;i<5;i++)
{
sprintf(szTextName,"Score%d",i);
dSetTextValue(szTextName,g_HighScore[i]);
}
g_gameScore=0;//chu shi hua
g_iCount=0;//chu shi hua ding yi
}
//==========================================================================
//
// 鼠标移动
// 参数 fMouseX, fMouseY:为鼠标当前坐标
void OnMouseMove( const float fMouseX, const float fMouseY )
{
if(g_iGameState==2)
{
dSetSpritePosition(“PAIZI”,fMouseX,fMouseY);//paizi gen sui shu biao yi dong
}
}
//==========================================================================
//
// 鼠标点击
// 参数 iMouseType:鼠标按键值,见 enum MouseTypes 定义
// 参数 fMouseX, fMouseY:为鼠标当前坐标
void OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY )
{
if(g_iGameState==2)
{
float fFeichongPosX=0.f,fFeichongPosY=0.f;//ding yi fei chong wei zhi
float fHuPosX=0.f,fHuPosY=0.f;//hu die weizhi chushihua
for(int i=0;i<g_iCount;i++)
{
fFeichongPosX=dGetSpritePositionX(FlyBugs[i].szName);//huo de fei chong jing ling de wei zhi
fFeichongPosY=dGetSpritePositionY(FlyBugs[i].szName);
if(dIsPointInSprite(“PAIZI”,fFeichongPosX,fFeichongPosY))//dang paizi weizhi yu fei chong weizhi cheng he shi
{
Flying(FlyBugs[i].szName);
g_gameScore+=FlyBugs[i].iScore;//huo de bu tong fei chong de fenshu,bing jiarufenshuzhong
}
fHuPosX=dGetSpritePositionX(FlyBugs[i].szName);//hudie de wei zhi huo qu
fHuPosY=dGetSpritePositionY(FlyBugs[i].szName);
if(dIsPointInSprite("PAIZI",fHuPosX,fHuPosY))//dang pai zi yu hu die chenghe shi
{
Flying(FlyBugs[i].szName);
g_gameScore+=FlyBugs[i].iScore;//kou chu fen shu
}
}
dSetSpriteRotation("PAIZI",fOldPaiziRotation-10.f);//pai zi de pai dong xiao guo
fResetPaiziRotation=0.2f;
}
}
//==========================================================================
//
// 鼠标弹起
// 参数 iMouseType:鼠标按键值,见 enum MouseTypes 定义
// 参数 fMouseX, fMouseY:为鼠标当前坐标
void OnMouseUp( const int iMouseType, const float fMouseX, const float fMouseY )
{
}
//==========================================================================
//
// 键盘按下
// 参数 iKey:被按下的键,值见 enum KeyCodes 宏定义
// 参数 iAltPress, iShiftPress,iCtrlPress:键盘上的功能键Alt,Ctrl,Shift当前是否也处于按下状态(0未按下,1按下)
void OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress )
{
if(iKeyKEY_SPACE&&g_iGameState0)//dan jianpan an xia kong geshi kai shi you xi
{
g_iGameState=1;
}
}
//==========================================================================
//
// 键盘弹起
// 参数 iKey:弹起的键,值见 enum KeyCodes 宏定义
void OnKeyUp( const int iKey )
{
}
//===========================================================================
//
// 精灵与精灵碰撞
// 参数 szSrcName:发起碰撞的精灵名字
// 参数 szTarName:被碰撞的精灵名字
void OnSpriteColSprite( const char *szSrcName, const char *szTarName )
{
}
//===========================================================================
//
// 精灵与世界边界碰撞
// 参数 szName:碰撞到边界的精灵名字
// 参数 iColSide:碰撞到的边界 0 左边,1 右边,2 上边,3 下边
void OnSpriteColWorldLimit( const char *szName, const int iColSide )
{
if(strstr(szName,“FEICHONG”))//xian zhi fei chong shu liang
{
for(int i=0;i<g_iCount;i++)
{
if(strcmp(szName,FlyBugs[i].szName)==0)
{
Flying(FlyBugs[i].szName);
}
}
}
if(strstr(szName,"HU"))//xian zhi hu die shu liang
{
for(int i=0;i<g_iCount;i++)
{
if(strcmp(szName,FlyBugs[i].szName)==0)
{
Flying(FlyBugs[i].szName);
}
}
}
}
void Flying(const char *szName)//fei chong fei xing de hanshu
{
int iDir=0;
iDir=dRandomRange(0,3);//suiji shuzi
switch(iDir)//an zhao shu zi lai chan sheng sui ji wei zhi
{
case 0:
fPosX=dRandomRange(fScreenLeft-5,fScreenLeft);
fPosY=dRandomRange(fScreenTop,fScreenBottom+5);
break;
case 1:
fPosX=dRandomRange(fScreenLeft-5,fScreenRight+5);
fPosY=dRandomRange(fScreenBottom-5,fScreenBottom+5);
break;
case 2:
fPosX=dRandomRange(fScreenRight,fScreenRight+5);
fPosY=dRandomRange(fScreenTop-5,fScreenBottom+5);
break;
case 3:
fPosX=dRandomRange(fScreenLeft-5,fScreenRight+5);
fPosY=dRandomRange(fScreenTop-5,fScreenTop+5);
break;
}
fSpeed=dRandomRange(10,40);//sui ji su du
dSetSpritePosition(szName,fPosX,fPosY);
fPosX1=dRandomRange(fScreenLeft+15,fScreenRight-15);
fPosY1=dRandomRange(fScreenTop+15,fScreenBottom-15);
dSpriteMoveTo(szName,fPosX1,fPosY1,fSpeed,false);
}
void AddFlyBugs()//zong jia fei chong yu hudie de han shu fang fa
{
for(int i=0;i<5;i++)
{
sprintf(FlyBugs[g_iCount].szName,“FEICHONG_%d”,g_iCount);
FlyBugs[g_iCount].iScore=1;//ding yi da fei chong de fen zhi
g_iCount++;
}
for(int i=0;i<7;i++)
{
sprintf(FlyBugs[g_iCount].szName,"FEICHONG_%d",g_iCount);
FlyBugs[g_iCount].iScore=2;//ding yi xiao fei chong de fen zhi
g_iCount++;
}
for(int i=0;i<3;i++)
{
sprintf(FlyBugs[g_iCount].szName,"HU%d",g_iCount);
FlyBugs[g_iCount].iScore=-1;//ding yi hu die de fen zhi
g_iCount++;
}
}
void MAOPAO(int a[],int length)//dui fen shu you gao dao di jing xing pai xu de han shu fang fa
{
int i,j,temp;
for(int i=0;i<length;++i)
{
for(int j=length-1;j>i;–j)
{
if(a[j]>a[j-1])
{
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
}
LessonX.h文件(头文件)
#ifndef LESSON_X_H
#define LESSON_X_H
//
#include <Windows.h>
extern void GameMainLoop( float fDeltaTime );
extern void OnMouseMove( const float fMouseX, const float fMouseY );
extern void OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY );
extern void OnMouseUp( const int iMouseType, const float fMouseX, const float fMouseY );
extern void OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress );
extern void OnKeyUp( const int iKey );
extern void OnSpriteColSprite( const char *szSrcName, const char *szTarName );
extern void OnSpriteColWorldLimit( const char *szName, const int iColSide );
#endif // LESSON_X_H
void Flying(const char *szName);
void AddFlyBugs();
void MAOPAO(int a[],int length);