#include "CommonAPI.h"
#include "stdio.h"
#include "string.h"
void 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 szGotGoldName[20] //当前抓到金子的名称
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 && fSpeedX > -0.00001f &&
fSpeedY < 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 )//生成10个小金块,大小为4
{
iSize = 4
}
else 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 表示播放一次,这里胳膊往下压就是一次
}
}
//==========================================================================
//
// 引擎捕捉键盘d起消息后,将调用到本函数
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 )
}
public int getSalary(int month){return this.salaryPerMonth + super.getSalary(month)+
this.getAddtionalSalary()
}
public int getAddtionalSalary(){
return 2000
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)