當前位置:編程學習大全網 - 源碼下載 - 用c語言在funcode上做黃金礦工的遊戲 求發整個文件

用c語言在funcode上做黃金礦工的遊戲 求發整個文件

//funcode黃金礦工源文件

#include?"CommonAPI.h"

#include?"stdio.h"

#include?"string.h"

voidDrawHookLine();

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,

intnCmdShow)

{

//?初始化遊戲引擎

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?表示播放壹次,這裏胳膊往下壓就是壹次

}?

}

//==========================================================================

//

//?引擎捕捉鍵盤彈起消息後,將調用到本函數

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

}

  • 上一篇:求:等值線填充源代碼(C,C++ )小女子在此謝過
  • 下一篇:CAD中病毒了,會產生acadcoc.lsp的文件,找了很多方法都不管用,求高手,求解決辦法!!!!!!
  • copyright 2024編程學習大全網