A. 游戲從2D到3D與c語言的發展是否有關
C語言是游戲開發的工具之一,許多游戲的開發並不只使用了C語言,還包括底層匯編語言,網頁游戲更是使用了Javascrip和flash。編程語言只是游戲開發的工具,需求推動了應用,應用促進了工具的發展,反過來,編程語言的發展對應用開發也提供了更好的輔助。這是相輔相承的。但僅僅把游戲和C語言聯系起來,就顯得很片面。只能說有聯系,但非必然。
B. 用c語言在funcode上做黃金礦工的游戲 求發整個文件
//funcode黃金礦工源文件
#include"CommonAPI.h"
#include"stdio.h"
#include"string.h"
voidDrawHookLine();
intg_fGoldBornMinX=0;
intg_fGoldBornMaxX=0;
intg_fGoldBornMinY=0;
intg_fGoldBornMaxY=0;
intg_iGoldCount=20;
intg_iGameState=2;
intflag=1;
floatScore=0.f;
intflagnum=0;
charszGotGoldName[20];//當前抓到金子的名稱
floatg_fHookRotation=0.f;
floatg_fEmptyHookSpeed=35.f;
floatfTimeDelta;
floatg_fHookStartPosX;//存儲鉤子的初始X位置
floatg_fHookStartPosY;//存儲鉤子的初始Y位置
///////////////////////////////////////////////////////////////////////////////////////////
//
//主函數入口
//
//////////////////////////////////////////////////////////////////////////////////////////
intPASCALWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
//初始化游戲引擎
if(!dInitGameEngine(hInstance,lpCmdLine))
return0;
//游戲初始化代碼
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);
constfloatfRotateSpeed=45.f;//搖擺速度,單位度/秒
intiHookRotToLeft=1;//鉤子擺動的方向:1←;0→
floatfTimeDelta=dGetTimeDelta();
//引擎主循環,處理屏幕圖像刷新等工作
while(dEngineMainLoop())
{
//獲取兩次調用之間的時間差,傳遞給游戲邏輯處理
floatfTimeDelta=dGetTimeDelta();
DrawHookLine();
//執行游戲主循環
if(g_iGameState==0)
{
floatfThisRotate=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);
}
elseif(g_iGameState==1)
{
dSetTextValue("Score",Score);
//播放拉金塊的動作
dAnimateSpritePlayAnimation("goldMan","GolderManAnimation3",1);//獲取鉤子X方向的速度
floatfSpeedX=dGetSpriteLinearVelocityX("GoldHook");
//獲取鉤子Y方向的速度
floatfSpeedY=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();
return0;
}
//==========================================================================
//
//引擎捕捉滑鼠移動消息後,將調用到本函數
voiddOnMouseMove(constfloatfMouseX,constfloatfMouseY)
{
//可以在此添加游戲需要的響應函數
}
//==========================================================================
//
//引擎捕捉滑鼠點擊消息後,將調用到本函數
voiddOnMouseClick(constintiMouseType,constfloatfMouseX,constfloatfMouseY)
{
//可以在此添加游戲需要的響應函數
}
//==========================================================================
//
//引擎捕捉鍵盤按下消息後,將調用到本函數
//分別為判斷Shift,Alt,Ctrl當前是否也處於按下狀態。比如可以判斷Ctrl+E組合鍵
voiddOnKeyDown(constintiKey,constintiAltPress,constintiShiftPress,constintiCtrlPress)
{
//可以在此添加游戲需要的響應函數
if(iKey==KEY_SPACE)
{
g_iGameState=1;//初始化之後,將游戲狀態設置為進行中
dSetSpriteVisible("GameBegin",0);
//生成金子
intiLoop=0;//循環變數控制
intiSize=4,iPosX=0,iPosY=0;//iSize表示金塊大小的變數
if(flag)
{
for(iLoop=0;iLoop<g_iGoldCount;iLoop++)
{
if(iLoop<10)//生成10個小金塊,大小為4
{
iSize=4;
}
elseif(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表示播放一次,這里胳膊往下壓就是一次
}
}
//==========================================================================
//
//引擎捕捉鍵盤彈起消息後,將調用到本函數
voiddOnKeyUp(constintiKey)
{
//可以在此添加游戲需要的響應函數
}
//===========================================================================
//
//引擎捕捉到精靈與精靈碰撞之後,調用此函數
voiddOnSpriteColSprite(constchar*szSrcName,constchar*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.該小數乘以空鉤子的速度即得到掛接不同金子後的實際速度
floatfWidth=dGetSpriteWidth(szTarName);
floatfSpeed=((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下邊
voiddOnSpriteColWorldLimit(constchar*szName,constintiColSide)
{
if(strcmp(szName,"GoldHook")!=0)
{
//碰到邊界的為鉤子時
//同樣設置為回拉,只是沒有碰到金子
dSpriteMoveTo(szName,g_fHookStartPosX,g_fHookStartPosY,g_fEmptyHookSpeed,1);
//播放拉金塊的動作
dAnimateSpritePlayAnimation("goldMan","GolderManAnimation3",0);g_iGameState=1;
flagnum=0;
}
}
voidDrawHookLine()
{
//首先,從礦工精靈上獲取一個纜繩鏈接點作為繩子的起始點
floatfStartX=dGetSpriteLinkPointPosX("GoldMan",1);
floatfStartY=dGetSpriteLinkPointPosY("GoldMan",1);
//繩子終點在鉤子精靈上獲取
floatfEndX=dGetSpriteLinkPointPosX("GoldHook",1);
floatfEndY=dGetSpriteLinkPointPosY("GoldHook",1);
//在這兩點之間劃線.線的顏色紅綠藍值都為50,即灰色
dDrawLine(fStartX,fStartY,fEndX,fEndY,2.f,0,50,50,50,255);
}