北京科技大学论坛北科论坛 → 有谁做过funcode的黄金矿工或者其他的
查看完整版本:有谁做过funcode的黄金矿工或者其他的
2012/7/25 18:25:06

求教现成的,或者帮我修改一下



2012/7/25 22:55:53

//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
#include "CommonAPI.h"




int g_fGoldBornMinX = 0;
int g_fGoldBornMaxX = 0;
int g_fGoldBornMinY = 0;
int g_fGoldBornMaxY = 0;
int g_iGoldCount = 0;
float g_fHookRotation = 0.f; //钩子与地面的夹角
int g_iGameState=0; //0-未开始 1-初始化 2-运行
float g_fEmptyHookSpeed = 20.f;
float g_fHookStartPosX; //存储钩子的初始X位置
float g_fHookStartPosY; //存储钩子的初始Y位置
char szGotGoldName[20];//当前抓到金子的名称




int g_iGetGoldState=0; //钩子状态


float fRotateSpeed = 40.f; // 摇摆速度,单位 度/秒
int iHookRotToLeft = 1; //钩子摆动的方向:1 ← ;0 →// 游戏初始化代码



2012/7/26 15:34:06

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 );
}
void GameInit(void)
{
dSetSpriteVisible("GameBegin",0);
dSetSpriteWorldLimitMode("goldHook", WORLD_LIMIT_NULL);
dSetTextValue("score",0);
g_iGoldCount=15; //金子数量
g_fGoldBornMinX = dGetScreenLeft() + 5; //金子左边界
g_fGoldBornMaxX = dGetScreenRight() - 5; //金子右边界
g_fGoldBornMinY = dGetScreenTop() + 20; //金子上边界
g_fGoldBornMaxY = dGetScreenBottom() - 5; //金子下边界
int iLoop = 0; //循环变量控制
int iSize = 4, iPosX = 0, iPosY = 0; //iSize表示金块大小的变量
dSetSpriteCollisionSend("goldhook", 1); //发送碰撞
dSetSpriteCollisionReceive("redstone", 1);//接收碰撞
dSetSpriteCollisionReceive("Rredstone", 1);//接收碰撞
dSetSpriteCollisionReceive("wine", 1);//接收碰撞
dSetSpriteCollisionReceive("goldTemplate", 1);//接收碰撞
dSetSpriteVisible("goldhook",1);




for( iLoop = 0; iLoop < g_iGoldCount; iLoop++ )
{
if( iLoop < 8) //生成10个小金块,大小为4
{
iSize = 4;
}
else if( iLoop >=8 && iLoop <13) //生成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);




g_iGameState = 2;
}
}



2012/7/27 9:51:00

void GameRun(float fTimeDelta )
{
if(g_iGoldCount>0)
{
float fThisRotate = fRotateSpeed * fTimeDelta * 1.2; // 本次旋转的角度
if( iHookRotToLeft )
{
//向左转,度数不断变大
g_fHookRotation += fThisRotate;
if( g_fHookRotation >= 180.f )
{
//大于180,置为向右转,即0
g_fHookRotation = 180.f;
iHookRotToLeft = 0;
}
}
else
{
//向右转,度数不断变小
g_fHookRotation -= fThisRotate; //小于0,置为向左转,即 1
if( g_fHookRotation <= 0.f )
{
g_fHookRotation = 0.f;
iHookRotToLeft = 1;
}
}
dSetSpriteRotation("goldhook",g_fHookRotation); //设置钩子的当前角度
}
else
{
g_iGameState=0;
}




}




///////////////////////////////////////////////////////////////////////////////////////////
//
// 主函数入口
//
//////////////////////////////////////////////////////////////////////////////////////////
int PASCAL WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// 初始化游戏引擎
if( !dInitGameEngine( hInstance, lpCmdLine ) )
return 0;




// 游戏初始化代码
dSetWindowTitle("GM");




g_fHookStartPosX=dGetSpritePositionX("goldhook");//获取钩子x坐标
g_fHookStartPosY=dGetSpritePositionY("goldhook");//获取钩子y坐标
// 引擎主循环,处理屏幕图像刷新等工作




while( dEngineMainLoop() )
{
// 获取两次调用之间的时间差,传递给游戏逻辑处理
float fTimeDelta=dGetTimeDelta();
DrawHookLine();
switch( g_iGameState )
{
// 初始化游戏,清空上一局相关数据
case 1:
{
GameInit();
g_iGameState=2; // 初始化之后,将游戏状态设置为进行中
}
break;
// 游戏进行中,处理各种游戏逻辑
case 2:
{
// 金子数量大于0的时候,继续游戏
GameRun( fTimeDelta );
}
break;
// 游戏结束/等待按空格键开始
case 0:
default:
break;
}




// 执行游戏主循环


};




// 关闭游戏引擎
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==0)
{
g_iGameState=1;
}




if( KEY_DOWN == iKey && g_iGameState == 2)
{
g_iGameState = 3;
dSetSpriteLinearVelocityPolar("goldhook",g_fEmptyHookSpeed, g_fHookRotation);
// 播放挖金者的动作(一个胳膊往下压的动作)
dAnimateSpritePlayAnimation("goldMan","GolderManAnimation1", 0);
//0 表示播放一次,这里胳膊往下压就是一次
}
else if( KEY_DOWN == iKey && 2 == g_iGameState && 0 == g_iGetGoldState )
{
// 设置抓取状态为:钩子往外伸
g_iGetGoldState=1;
// 以当前朝向给钩子一个向前的速度
dSetSpriteLinearVelocityPolar("GoldHook",g_fEmptyHookSpeed, g_fHookRotation );
// 播放挖金者的动作(一个胳膊往下压的动作)
dAnimateSpritePlayAnimation( "GoldMan", "GolderManAnimation1", 0 );
}
// 可以在此添加游戏需要的响应函数
}




//==========================================================================
//
// 引擎捕捉键盘弹起消息后,将调用到本函数
void dOnKeyUp( const int iKey )
{
// 可以在此添加游戏需要的响应函数




}




//===========================================================================
//
// 引擎捕捉到精灵与精灵碰撞之后,调用此函数
void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )
{
// 发起者为Goldhook,接受者含有GoldBlock字段
if(strcmp(szSrcName,"goldhook")== 0 && strstr(szTarName,"GoldBlock")!=NULL )
{
dSpriteMountToSpriteLinkPoint( szTarName, "goldhook", 2 );//将金块锚定在钩子上
dSpriteMoveTo("goldhook",g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);//使钩子向初始位置移动,即会拉
dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation3", 1 );//播放拉金块的动作
strcpy(szGotGoldName,szTarName);//复制并保存当前抓取到金块的名称
}
g_iGameState = 2;
g_iGetGoldState=1;
if(g_iGetGoldState)
{
//获取钩子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(g_iGetGoldState==1)
{
g_iGoldCount--;
}
}
dAnimateSpritePlayAnimation( "GoldMan", "GolderManAnimation2", 0 );
}
}




//===========================================================================
//
// 引擎捕捉到精灵与世界边界碰撞之后,调用此函数.
// 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", 1 );
//同样设置为回拉,只是没有碰到金子
g_iGameState = 2;
g_iGetGoldState=2;
}
}



2012/7/27 21:40:59

说重复定义错误,怎么办



2012/7/28 9:17:41

想当年,我把大神舍友的代码照搬改了稍微改了下,结果分比他高,这让我很是羞愧



2012/7/28 23:30:30

想当年我们小学期作业就是这个,我负责剧情,搭档负责PPT和画面,找个大神帮我们改代码



2012/7/29 20:03:59

手??机??复??制????这??几??个??字??看??你??多??久??能??删??完??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????听说这个挺多经验的 ???? ??????????????? ????????? ????????? ???? ? ????? ????????? ????????? ???? ? ????? ????????? ????????? ???? ? ????? ????????? ?
   ????????? ???? ? ????? ???????????? ???? ? ???? ? ????? ???????? ???????????? ???? ? ????? ?????????????????? ???? ? ????? ????????? ????????? ???? ? ????? ????????? ????????? ???? ? ????? ???????????



2012/7/30 12:00:37

看样子很高端



2012/7/30 19:34:59

坦克大战适合你



2012/7/31 15:39:04

可惜我做的弹弹堂。。。



2012/8/1 2:51:24

太长不看,当时做的打飞机



2012/8/1 17:36:16

钩子不转怎么办



2012/8/2 12:20:00

然而我的还留着


Powered by ZuoJu X5.0
Processed in 0.06 second(s)