黃金礦工實習(xí)報告_第1頁
黃金礦工實習(xí)報告_第2頁
黃金礦工實習(xí)報告_第3頁
黃金礦工實習(xí)報告_第4頁
黃金礦工實習(xí)報告_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

“黃金礦工”實驗報告游戲截圖圖一:開始游戲圖二:礦工準(zhǔn)備就緒圖三:礦工在努力采金礦功能描述:玩家通過鍵盤的按鍵控制礦工抓取金塊,將鉤子碰觸到的金塊抓取過來。進(jìn)入游戲,初始界面出現(xiàn)“空格開始”。單擊鍵盤上的空格鍵開始游戲,“空格開始”精靈消失,同時出現(xiàn)20塊金塊,大小有三個尺寸,位置是隨機(jī)的。鉤子左右擺動,玩家單擊鍵盤上的上下左右鍵中的下方向鍵控制礦工伸出長鉤,抓取金子獲取到金子往回拉后,直到回到鉤子初始處,礦工恢復(fù)靜止,鉤子上的金塊消失,鉤子繼續(xù)左右搖擺,直到玩家再次單擊向下方向鍵。如果鉤子沒有碰觸到金子,而是碰觸到左右和下的邊界,則鉤子保持原來的速度往回收。如果玩家將所有金子抓取完,游戲返回初始界面。流程圖:金塊的總數(shù)金塊的總數(shù)20,大小位置隨機(jī)的。沒有抓取時,鉤子左右擺動,此時礦工的是靜止的伸出的鉤子如果碰觸到金子,則鉤子和金子一起往回拉抓取到的金子拉回到轉(zhuǎn)軸處消失,此時金子數(shù)目減少一個。直到玩家將所有金子抓取完游戲的初始界面,單機(jī)鍵盤上的空格鍵進(jìn)入游戲數(shù)據(jù)結(jié)構(gòu):g_iHookRotToLeft表示鉤子當(dāng)前是往左擺動還是往右擺動g_fHookRotation表示鉤子當(dāng)前轉(zhuǎn)動的朝向g_fHookRotation表示鉤子當(dāng)前角度g_iGoldCount表示金礦數(shù)量g_iGameState表示游戲狀態(tài),0——游戲初始化,1——伸出鉤子,2——回收鉤子flag控制控制金塊的初始化,初始值為1lag表示鉤子是否捉住金塊的狀態(tài),初始值為1iSize表示金塊大小的變量iPosX,iPosY表示金塊的位置算法描述:有20塊金塊,儲存在szGotGoldName數(shù)組里,位置儲存在dSetSpritePosition里。1.游戲狀態(tài)g_iGameState分為四種狀態(tài),,3——游戲初始化,0——表示游戲進(jìn)行中,1——伸出鉤子,2——回收鉤子:30的轉(zhuǎn)換是“空格開始”;01的轉(zhuǎn)換是按下“↓”鍵;12的轉(zhuǎn)換是鉤子鉤住金塊或者碰到邊界;當(dāng)30時,游戲開始隨機(jī)生成20塊金塊,鉤子開始轉(zhuǎn)動;當(dāng)01時,鉤子伸出當(dāng)12,鉤子原速度返回2.當(dāng)游戲狀態(tài)g_iGameState由30,生成金子,flag由10,金子停止生成。3.當(dāng)鉤子捉到金子,游戲狀態(tài)g_iGameState由12,lag由12,金子數(shù)量g_iGoldCount減少一個。當(dāng)g_iGoldCount變成0,flag由01,金子重新進(jìn)入初始化。源代碼//-----------------------------------------------------------------------------////-----------------------------------------------------------------------------#include"CommonAPI.h"#include"stdio.h"intg_fGoldBornMinX = 0;int g_fGoldBornMaxX = 0;int g_fGoldBornMinY = 0;int g_fGoldBornMaxY = 0;intg_iGoldCount=20;floatg_fHookRotation=0.f;int g_iGameState=3;floatg_fEmptyHookSpeed =15.f;floatfTimeDelta;floatg_fHookStartPosX; //存儲鉤子的初始X位置floatg_fHookStartPosY; //存儲鉤子的初始Y位置charszGotGoldName[20] ; //當(dāng)前抓到金子的名稱intflag=1; intlag=1; ///////////////////////////////////////////////////////////////////////////////////////////////主函數(shù)入口////////////////////////////////////////////////////////////////////////////////////////////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坐標(biāo) g_fHookStartPosY=dGetSpritePositionY("GoldHook"); //獲取鉤子的初始Y坐標(biāo) dSetSpriteCollisionSend("goldHook",1); dSetSpriteCollisionReceive("goldTemplate",1); //生成金子int iLoop = 0; //循環(huán)變量控制 int iSize = 4,iPosX=0,iPosY=0;//iSize表示金塊大小的變量 constfloat fRotateSpeed=45.f; //搖擺速度,單位度/秒 intiHookRotToLeft=1; //鉤子擺動的方向:1←;0→ dSetWindowTitle("Lesson"); //引擎主循環(huán),處理屏幕圖像刷新等工作 while(dEngineMainLoop()) { //獲取兩次調(diào)用之間的時間差,傳遞給游戲邏輯處理 float fTimeDelta = dGetTimeDelta(); //執(zhí)行游戲主循環(huán) 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==2) { 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); //設(shè)置金塊的寬度 dSetSpriteHeight(tmpName,(float)iSize); //設(shè)置金塊的高度 //設(shè)置金子精靈位置 iPosX = dRandomRange(g_fGoldBornMinX,g_fGoldBornMaxX); iPosY = dRandomRange(g_fGoldBornMinY,g_fGoldBornMaxY); dSetSpritePosition(tmpName,(float)iPosX,(float)iPosY); flag=0;} }//獲取鉤子X方向的速度 float fSpeedX = dGetSpriteLinearVelocityX("GoldHook"); //獲取鉤子Y方向的速度 float fSpeedY = dGetSpriteLinearVelocityY("GoldHook"); //當(dāng)速度接近為0時,即可判定其已到達(dá)初始點if(fSpeedX<0.00001f&&fSpeedX>-0.00001f&&fSpeedY<0.00001f&&fSpeedY>-0.00001f) {//解除金塊與鉤子的錨定 dSpriteDismount(szGotGoldName); //刪除獲取的金塊 dDeleteSprite(szGotGoldName); g_fEmptyHookSpeed =15.f; if(lag==2) { g_iGoldCount=g_iGoldCount-1; lag=1; }//回拉結(jié)束,設(shè)定狀態(tài)為0 g_iGameState=0; //播放礦工的動畫,即準(zhǔn)備拉金子的動畫 dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation2",0); } } //播放挖金者的動作(恢復(fù)初始守候動作) //dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation2",0); if(g_iGoldCount==0) { dSetSpriteVisible("GameBegin",1); flag=1;g_iGoldCount=20; } //首先,從礦工精靈上獲取一個纜繩鏈接點作為繩子的起始點(該鏈接點在編輯器里編輯好) floatfStartX= dGetSpriteLinkPointPosX("GoldMan",1); floatfStartY=dGetSpriteLinkPointPosY("GoldMan",1); //繩子終點在鉤子精靈上獲取(該鏈接點在編輯器里編輯好) floatfEndX =dGetSpriteLinkPointPosX("GoldHook",1); floatfEndY =dGetSpriteLinkPointPosY("GoldHook",1); //在這兩點之間劃線.線的顏色紅綠藍(lán)值都為50,即灰色;255表示不透明,2.0f表示線的粗細(xì), 0表示所在的層 dDrawLine(fStartX,fStartY,fEndX,fEndY,2.f,0,50,50,50,255); }; //關(guān)閉游戲引擎 dShutdownGameEngine(); return0;}//==========================================================================////引擎捕捉鼠標(biāo)移動消息后,將調(diào)用到本函數(shù)voiddOnMouseMove(constfloatfMouseX,constfloatfMouseY){ //可以在此添加游戲需要的響應(yīng)函數(shù)}//==========================================================================////引擎捕捉鼠標(biāo)點擊消息后,將調(diào)用到本函數(shù)voiddOnMouseClick(constintiMouseType,constfloatfMouseX,constfloatfMouseY){ //可以在此添加游戲需要的響應(yīng)函數(shù)}//==========================================================================////引擎捕捉鍵盤按下消息后,將調(diào)用到本函數(shù)//iAltPressiShiftPressiCtrlPress分別為判斷Shift,Alt,Ctrl當(dāng)前是否也處于按下狀態(tài)。比如可以判斷Ctrl+E組合鍵voiddOnKeyDown(constintiKey,constintiAltPress,constintiShiftPress,constintiCtrlPress){ //可以在此添加游戲需要的響應(yīng)函數(shù) if(iKey==KEY_SPACE) { g_iGameState = 2;//初始化之后,將游戲狀態(tài)設(shè)置為進(jìn)行中 dSetSpriteVisible("GameBegin",0); } if(iKey==KEY_DOWN) { //按下↓并且游戲狀態(tài)為 "1" g_iGameState=1; //置游戲狀態(tài)為1,可用于控制鉤子是否擺動 //以當(dāng)前朝向給鉤子一個向前的速度 dSetSpriteLinearVelocityPolar("GoldHook",g_fEmptyHookSpeed,g_fHookRotation); //播放挖金者的動作(一個胳膊往下壓的動作) dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation1",1); //0表示播放一次,這里胳膊往下壓就是一次 } }//==========================================================================////引擎捕捉鍵盤彈起消息后,將調(diào)用到本函數(shù)voiddOnKeyUp(constintiKey){ //可以在此添加游戲需要的響應(yīng)函數(shù)}//===========================================================================////引擎捕捉到精靈與精靈碰撞之后,調(diào)用此函數(shù)voiddOnSpriteColSprite(constchar*szSrcName,constchar*szTarName){ int iSize; //發(fā)起者為GoldHook,接受者含有GoldBlock字段 if(strcmp(szSrcName,"GoldHook")==1&&strstr(szTarName,"GoldBlock")!=NULL) { dSpriteMountToSpriteLinkPoint(szTarName,"GoldHook",2);//將金塊錨定在鉤子上 //找到哪個是金子的名字constchar *szGoldName = NULL;if(strstr(szSrcName,"GoldBlock")) szGoldName=szSrcName;elseif(strstr(szTarName,"GoldBlock")) szGoldName=szTarName;else return; //算法:之前設(shè)置的金子大小為4,6,8,用10減去該大小再除以10,得到3個小//數(shù):0.6,0.4,0.2.該小數(shù)乘以空鉤子的速度即得到掛接不同金子后的實際速度float fWidth = dGetSpriteWidth(szGoldName);float fSpeed = ((10.f-fWidth)/10.f)*g_fEmptyHookSpeed;//鉤子往初始位置移動dSpriteMoveTo("GoldHook",g_fHookStartPosX,g_fHookStartPosY,fSpeed,1);//播放

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論