




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C語言課程設(shè)計報告 C語言課程設(shè)計報告機房名稱 時 間 學(xué) 院 專業(yè)班級 姓 名 學(xué) 號 指導(dǎo)教師 小游戲“黃金礦工”設(shè)計報告目錄C語言課程設(shè)計報告1一、課題簡述3二、功能需求4.程序大體流程圖:4.部分函數(shù)介紹5Funcode接口介紹5三、總體設(shè)計81.下圖為主函數(shù)及各級嵌套函數(shù)的流程圖,部分省略。82、操作使用說明9四、詳細(xì)設(shè)計101.主函數(shù)模塊WinMain()函數(shù)模塊102.部分自己設(shè)置定義的函數(shù)12五、運行相關(guān)界面及簡介20六、程序運行測試及遇到問題的解決方案25七、成員分工表27八、總結(jié)與體會28九、教師評語30一、課題簡述通過一年的c語言程序設(shè)計的學(xué)習(xí),我們僅僅掌握了c語言最基本
2、的知識,還有很多內(nèi)容是我們沒有涉及的。所以通過c語言課程設(shè)計的學(xué)習(xí)實踐活動和實際演練,使我們能夠在實際操作中提高運用c語言解決問題的能力和程序設(shè)計的能力。得知本次課程設(shè)計任務(wù)是小游戲的設(shè)計,我們既興奮又不安,興奮是十分期待自己親手做出的游戲,不安的是我們對funcode這個軟件很不了解。幸好這次實踐的過程,讓我們從做平時簡單的小程序過渡到現(xiàn)在的綜合應(yīng)用程序,將學(xué)過的c語言知識融入新接觸到的funcode操作中,不僅能鞏固所學(xué)的知識,還能加強對新事物的接受及應(yīng)用的本領(lǐng),在不斷的挑戰(zhàn)問題中大大的提升自己,同時也是對c語言程序設(shè)計這門課的深入理解的過程。而什么樣的小游戲是我們能實現(xiàn)而又不乏趣味呢?經(jīng)
3、過反復(fù)思考、討論,我們小組設(shè)計了“黃金礦工”這樣一個小游戲:玩家通過鍵盤的按鍵控制礦工抓取金塊,將鉤子碰觸到的金塊抓取過來。1.單機鍵盤上的空格鍵進(jìn)入游戲,金塊的總數(shù)是20,鉆石的總數(shù)是2,炸彈的總數(shù)是3,石頭的總數(shù)是4,大小位置是隨機的。2.在沒有抓取狀態(tài)下,鉤子左右擺動,此時礦工的是靜止的。當(dāng)鉤子擺動到一定角度,玩家可以單擊鍵盤上的上下左右鍵中的下方向鍵控制礦工伸出長鉤,抓取金子等抓到一個金子金子加20分,鉆石加50分且拉回速度變快,石頭加5分且拉回速度變慢,抓到炸彈不加分且炸彈會爆炸。此時礦工是向下?lián)u動轉(zhuǎn)軸。獲取到金子等往回拉后,礦工是不斷轉(zhuǎn)動轉(zhuǎn)軸,直到金子拉動到鉤子初始處,礦工恢復(fù)靜止
4、,鉤子繼續(xù)左右搖擺,直到玩家再次單擊向下方向鍵。如果鉤子沒有碰觸到金子,而是碰觸到左右和下的邊界,則鉤子保持原來的速度往回收。3加入計分和計時系統(tǒng)。60秒倒計時時間內(nèi)抓取的金子越多得分越高。接下來,我們開始思索,要如何實現(xiàn)這些功能,如何將所有功能連接在一起。于是我們先用funcode 熟悉小游戲制作的操作,認(rèn)真按照老師給我們的實驗指南進(jìn)行練習(xí),反復(fù)閱讀其內(nèi)容,并用vc6.0進(jìn)行對各種小游戲源代碼的簡單探索。當(dāng)然,由于技術(shù)原因,我們想要設(shè)計的軟件只是局限于對游戲功能的實現(xiàn),而實際中正式的歡迎界面,游戲說明等優(yōu)美的圖片,我們并沒有進(jìn)行設(shè)計,包括剛開始擬定的金子運動、玩家升級等也取消了。然而,這并不
5、影響我們制作小游戲的熱情,而且我們根據(jù)其具體的功能進(jìn)行了組員之間的分工合作。二、功能需求.程序大體流程圖:空格鍵開始游戲金子、鉆石、石頭、炸彈隨機分布;鉤子搖擺;計時器倒計時60秒計分器顯示為0分下鍵抓取金子鉆石石頭炸彈計分器加20分計分器加50分計分器加5分;拉升速度減緩計分器加0分炸彈爆炸計時器減為0否鉤子停止抓?。挥螒蚪Y(jié)束是按回車鍵,所有數(shù)據(jù)清零,回到初始狀態(tài)圖1. 游戲模塊圖.部分函數(shù)介紹本實驗用到的APIextern floatdGetScreenLeft(); /*獲取世界邊界之左邊X坐標(biāo)*/extern floatdGetScreenTop(); /*獲取世界邊界之上邊Y坐標(biāo)*/
6、extern floatdGetScreenRight(); /*獲取世界邊界之右邊X坐標(biāo)*/extern floatdGetScreenBottom(); /*獲取世界邊界之下邊Y坐標(biāo)*/extern voiddSetSpriteWidth( const char *szName, const float fWidth ); /*設(shè)置精靈外形寬度*/extern floatdGetSpriteWidth( const char *szName ); /*dGetSpriteWidth:獲取精靈外形寬度*/extern int dRandomRange( const int iMin, con
7、st int iMax ); /*獲取一個位于參數(shù)1到參數(shù)2之間的隨機數(shù)*/extern voiddSetSpriteRotation( const char *szName, const float fRot ); /*設(shè)置精靈的旋轉(zhuǎn)角度*/extern void dSetSpriteLinearVelocityPolar( const char *szName, const float fSpeed, const float fPolar ); /*設(shè)置精靈移動速度*/extern int dAnimateSpritePlayAnimation( const char *szName, c
8、onst char *szAnim, const int iRestore ); /*精靈播放動畫*/extern float dGetSpriteLinkPointPosX( const char *szName, const int iId ); /*獲取精靈鏈接點X坐標(biāo)。鏈接點是依附于精靈的一個坐標(biāo)點*/extern float dGetSpriteLinkPointPosY( const char *szName, const int iId ); / *獲取精靈鏈接點Y坐標(biāo)。鏈接點是依附于精靈的一個坐標(biāo)點*/extern voiddDrawLine( const float fSta
9、rtX, const float fStartY, const float fEndX, const float fEndY, const float fLineWidth, const int iLayer, const int iRed, const int iGreen, const int iBlue, const int iAlpha );/* dDrawLine:兩點之間畫線*/Funcode接口介紹extern void dOnSpriteColSprite( const char *szSrcName, const char *szTarName ); /*精靈與精靈碰撞后將被
10、調(diào)用的函數(shù)*/extern int dSpriteMountToSpriteLinkPoint( const char *szSrcName, const char *szDstName, const int iPointId ); /*將一個精靈綁定到另一個精靈上,綁定位置為指定*的鏈接點,暫時的成為另一個精靈的一部分,跟隨其運動等*/extern floatdGetSpritePositionX( const char *szName ); /*獲取精靈X坐標(biāo)*/extern floatdGetSpritePositionY( const char *szName ); /*獲取精靈Y坐標(biāo)
11、*/funcode函數(shù)(1)/*主函數(shù)入口*/int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) /*初始化游戲引擎*/ if( !dInitGameEngine( hInstance, lpCmdLine ) ) return 0; /*在此使用API更改窗口標(biāo)題*/ dSetWindowTitle(Lesson); /*引擎主循環(huán),處理屏幕圖像刷新等工作*/ while( dEngineMainLoop() ) /*獲取兩次調(diào)用之間的時間差,傳遞給游戲
12、邏輯處理*/ floatfTimeDelta=dGetTimeDelta(); /*執(zhí)行游戲主循環(huán)*/ GameMainLoop( fTimeDelta ); ; /*關(guān)閉游戲引擎*/ dShutdownGameEngine(); return 0;(2)/*引擎捕捉鍵盤按下消息后,將調(diào)用到本函數(shù)*/void dOnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress )(3)/*引擎捕捉鍵盤彈起消息后,將調(diào)用到本函數(shù)*/void dOnKeyUp( const int
13、 iKey )(4)/*引擎捕捉到精靈與精靈碰撞之后,調(diào)用此函數(shù)*/void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )(5)/* 引擎捕捉到精靈與世界邊界碰撞之后,調(diào)用此函數(shù). */void dOnSpriteColWorldLimit( const char *szName, const int iColSide )其它函數(shù)(1) 出現(xiàn)金塊、鉆石、炸彈、石頭,并增加其碰撞屬性voidAppear();(2) 畫出鏈接鉤子的線voidline();(3) 重置游戲初始狀態(tài)void begin();(4)
14、 游戲結(jié)束后,清楚剩余金塊、鉆石、炸彈、石頭void Disappear();三、總體設(shè)計I.下圖為主函數(shù)及各級嵌套函數(shù)的流程圖,部分省略。主函數(shù)入口IntPASCAL WinMain()設(shè)置游戲窗口名字dSetWindowTitle(Lesson)引擎主循環(huán)dEngineMainLoop()執(zhí)行游戲主循環(huán)GameMainLoop()g_iGameState=0g_iGameState=1g_iGameState=2g_iGameState=3游戲初始界面;初始化游戲執(zhí)行dOnKeyDown函數(shù)調(diào)用Appear()生成金子等;鉤子自由擺動;調(diào)用dOnKeyDown,鉤子運動;調(diào)用dOnSpri
15、te-ColSprite、dOnSprite-ColWorldLimit實現(xiàn)抓取按空格鍵按下鍵時間到游戲結(jié)束時間減為0g_iGameState=4精靈消失所有數(shù)據(jù)重置回到初始狀態(tài)自 動 跳 轉(zhuǎn)按回車鍵鍵盤按下Void dOnKeyDown()開始游戲caseKEY_SPACE鉤子下降CaseKEY_DOWNN狀態(tài)轉(zhuǎn)換CaseKEY_ENTER精靈與精靈碰撞void dOnSpriteColSprite()顯示消失及爆炸動畫加分圖 2.主函數(shù)流程圖 II、操作使用說明玩家通過鍵盤的按鍵控制礦工抓取金塊,將鉤子碰觸到的金塊抓取過來。1.單機鍵盤上的空格鍵進(jìn)入游戲,金塊的總數(shù)是20,鉆石的總數(shù)是2,
16、炸彈的總數(shù)是3,石頭的總數(shù)是4,大小位置是隨機的。2.在沒有抓取狀態(tài)下,鉤子左右擺動,此時礦工的是靜止的。當(dāng)鉤子擺動到一定角度,玩家可以單擊鍵盤上的上下左右鍵中的下方向鍵控制礦工伸出長鉤,抓取金子等抓到一個金子金子加20分,鉆石加50分且拉回速度變慢,石頭加5分且拉回速度變慢,抓到炸彈不加分且炸彈會爆炸。此時礦工是向下?lián)u動轉(zhuǎn)軸。獲取到金子等往回拉后,礦工是不斷轉(zhuǎn)動轉(zhuǎn)軸,知道金子拉動到鉤子初始處,礦工恢復(fù)靜止,鉤子繼續(xù)左右搖擺,直到玩家再次單擊向下方向鍵。如果鉤子沒有碰觸到金子,而是碰觸到左右和下的邊界,則鉤子保持原來的速度往回收。3存在計分和計時系統(tǒng)。60秒倒計時時間內(nèi)抓取的金子越多得分越高。
17、四、詳細(xì)設(shè)計1.變量定義部分變量定義是一個完整的程序中不可或缺的內(nèi)容。在本次游戲編寫中,我們根據(jù)程序需要,也不可缺少的設(shè)置了許多變量,下面我們簡單介紹一下全局變量和主函數(shù)之中的部分變量:(1)定義全局變量/初始化物品數(shù)量/int g_iGoldCount=20;/金子數(shù)量int g_iBombCount=3; /炸彈數(shù)量int g_iDiaCount=2; /鉆石數(shù)量int g_iStoneCount=4; /石頭數(shù)量/初始化計時計分/float g_iGameScore= 0; /初始化得分float g_fGameTime= 60.f; /計時,設(shè)定初始計時bool g_bStart =
18、0; /計時,定義開始計時的狀態(tài)/設(shè)置鉤子自由旋轉(zhuǎn)的定義/float g_fHookRotation = 0.f;int g_iGameState = 0; /定義游戲初始狀態(tài)float g_fEmptyHookSpeed= 15.f;/定義鉤子的速度/設(shè)置鉤子抓精靈的定義/float g_fHookStartPosX;/存儲鉤子的初始X位置float g_fHookStartPosY;/存儲鉤子的初始Y位置char szGotGoldName20;/當(dāng)前抓到金子的名稱char szGotBombName3 ; /當(dāng)前抓到炸彈的名稱 char szGotDiaName2 ; /當(dāng)前抓鉆石的名稱
19、 char szGotStoneName2 ; /當(dāng)前抓石頭的名稱 (2)主函數(shù)之中的局部變量/設(shè)置鉤子搖擺/const floatfRotateSpeed = 45.f; / 搖擺速度,單位 度/秒int iHookRotToLeft = 1;/鉤子擺動的方向:1 ;0 /設(shè)置鉤子抓金子/g_fHookStartPosX = dGetSpritePositionX(goldhook);/獲取鉤子的初始X坐標(biāo)g_fHookStartPosY = dGetSpritePositionY(goldhook);/獲取鉤子的初始Y坐標(biāo)dSetSpriteWorldLimitMode(goldhook,
20、 WORLD_LIMIT_NULL); /初始化鉤子與世界邊界碰撞的模式為NULL2.主函數(shù)模塊WinMain()函數(shù)模塊實現(xiàn)初始化游戲引擎,執(zhí)行引擎主循環(huán),處理屏幕圖像刷新等工作,包括獲取兩次調(diào)用之間的時間差,傳遞給游戲邏輯處理等。我們通過主函數(shù)實現(xiàn)設(shè)置初始化游戲狀態(tài)、鉤子搖擺、鉤子抓金子、炸彈、石頭、鉆石等內(nèi)容。在本游戲中我們設(shè)計了5種游戲狀態(tài),分別為g_iGameState等于0、1、2、3、4。其中,狀態(tài)0為游戲初始狀態(tài),狀態(tài)1和2為游戲運行狀態(tài),狀態(tài)3為游戲結(jié)束狀態(tài),狀態(tài)4為過渡到初始狀態(tài)時運用的一個調(diào)整狀態(tài)。步驟詳細(xì)介紹:第一步,游戲初始化,顯示初始界面需要的精靈if( !dIni
21、tGameEngine( hInstance, lpCmdLine ) ) / 初始化游戲引擎return 0;dSetWindowTitle(黃金礦工); /設(shè)置窗口名字dSetWindowTitle(Lesson);begin(); /調(diào)用函數(shù),初始游戲,顯示初始精靈第二步,游戲是一直進(jìn)行的,因此游戲的重點是在while循環(huán)中。While循環(huán)中使用“float fTimeDelta=dGetTimeDelta();”獲取兩次調(diào)用之間的時間差,傳遞給游戲邏輯處理,達(dá)到不斷循環(huán)。下面介紹一下此循環(huán)中使用的語句。游戲倒計時,倒計時結(jié)束后實現(xiàn)狀態(tài)跳轉(zhuǎn)到結(jié)束狀態(tài)/倒計時/if(g_bStart) /
22、判斷游戲是否開始g_fGameTime -= fTimeDelta; /設(shè)置游戲時間if(g_fGameTime 0) /判斷游戲是否結(jié)束 dSetTextValue(Time, (int)(g_fGameTime); /設(shè)置精靈時間顯示數(shù)值if(g_fGameTime= 180.f ) g_fHookRotation=180.f;iHookRotToLeft=0; elseg_fHookRotation-= fThisRotate;if( g_fHookRotation = 0.f )g_fHookRotation=0.f;iHookRotToLeft=1;dSetSpriteRotatio
23、n(goldhook,g_fHookRotation); /設(shè)置鉤子的旋轉(zhuǎn)角度鉤子抓金子,鉤子抓金子為狀態(tài)2,不需要鉤子自由擺動/鉤子抓金子/if(g_iGameState = 2)floatfSpeedX=dGetSpriteLinearVelocityX(goldhook); /獲取鉤子X方向的速度floatfSpeedY=dGetSpriteLinearVelocityY(goldhook); /獲取鉤子Y方向的速度if( fSpeedX -0.00001f & fSpeedY -0.00001f ) /當(dāng)速度接近為0時,即可判定其已到達(dá)初始點dSpriteDismount(szGotG
24、oldName); /解除金塊與鉤子的錨定dDeleteSprite(szGotGoldName); /刪除獲取的金塊g_iGameState = 1; /回拉結(jié)束,設(shè)定狀態(tài)為1,鉤子擺動dAnimateSpritePlayAnimation(GoldMan,GolderManAnimation2, 0 ); /播放礦工的動畫,即準(zhǔn)備拉金子的動畫游戲狀態(tài)3,顯示游戲時間停止if(g_iGameState=3)dSetSpriteVisible( over,1); /若結(jié)束顯示Time over游戲狀態(tài)為4時,實現(xiàn)過渡到游戲狀態(tài)為1if(g_iGameState = 4)begin(); /調(diào)用
25、重置游戲初始化所需精靈g_iGameState = 0 ; /實現(xiàn)游戲狀態(tài)跳轉(zhuǎn)到初始狀態(tài)0 g_iGameScore = 0; / 重置游戲分?jǐn)?shù)為0g_fGameTime= 60.f; / 重置倒計時時間為60g_bStart=0; / 停止先前狀態(tài)中的倒計時 dSetTextValue(score,(int)0); / 重置游戲分?jǐn)?shù)為0dSetTextValue(time,(int)60); / 重置倒計時時間為60dSetSpriteVisible(over,0); /隱藏TimeoverdSetSpriteVisible(score,1); /出現(xiàn)計分裝置 dSetSpriteVisib
26、le(time,1); /出現(xiàn)計時裝置由于鉤子的連線也是一直在游戲運行時存在的,故也應(yīng)放入此循環(huán)中/設(shè)置與鉤子鏈接的線/line(); /調(diào)用畫線的函數(shù)第四步,游戲結(jié)束,關(guān)閉游戲引擎,主函數(shù)完成dShutdownGameEngine(); / 關(guān)閉游戲引擎return 0;3.有關(guān)系統(tǒng)給定的函數(shù)的設(shè)置(1)dOnKeyDown()函數(shù)的詳述,對于系統(tǒng)內(nèi)我們主要使用此函數(shù)。我們使用空格鍵控制游戲開始,方向下鍵控制鉤子下落,回車鍵實現(xiàn)從結(jié)束狀態(tài)到開始狀態(tài)的過渡。/按下空格游戲開始/g_fEmptyHookSpeed=15.f; /為之后調(diào)整繩子速度做準(zhǔn)備if(iKey=KEY_SPACE & g_
27、iGameState = 0) /按下空格鍵且游戲狀態(tài)為0時 g_iGameState = 1; /游戲狀態(tài)變?yōu)? dSetSpriteVisible( GameBegin,0); /消失游戲開始 dSetSpriteVisible( HJKG,0); /消失“黃金礦工” Appear(); /調(diào)用函數(shù)出現(xiàn)金子等東西 g_bStart=1; /計時開始的條件/按下下鍵鉤子下降/if( iKey=KEY_DOWN & g_iGameState = 1) /按下下鍵且游戲狀態(tài)為1時g_iGameState = 2; /置游戲狀態(tài)為2,可用于控制鉤子是否擺動dSetSpriteLinearVeloc
28、ityPolar(goldhook,g_fEmptyHookSpeed, g_fHookRotation); /以當(dāng)前朝向給鉤子一個向前的速度dAnimateSpritePlayAnimation(GoldMan,GolderManAnimation1, 0);/ 播放挖金者的動作(一個胳膊往下壓的動作) ,0 表示播放一次,這里胳膊下壓就是一次/按下回車鍵跳轉(zhuǎn)到初始狀態(tài)/if( iKey=KEY_ENTER & g_iGameState = 3 ) /按下回車鍵且游戲狀態(tài)為3DisAppear(); /調(diào)用函數(shù)消除金子等東西g_iGameState = 4; /游戲狀態(tài)變?yōu)?(2)dOnSp
29、riteColSprite()函數(shù)是引擎捕捉到精靈與精靈碰撞之后被調(diào)用的,這個函數(shù)也是我們本次編程中的重點函數(shù),用于鉤子碰到金子等東西之時,同時增加積分系統(tǒng)于此函數(shù)之中,每當(dāng)碰撞發(fā)生,對于不同的東西產(chǎn)生不同的加分,其中金子加20分,鉆石加50分,石頭加5分,炸彈不加分。并且調(diào)整了抓石頭是與抓其他物品時的速度不同,還未炸彈消失過程中附加了粒子效應(yīng)。以下是函數(shù)詳述:void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )/ 發(fā)起者為goldhook,接受者含有GoldBlock字段/if(strcmp(szSrc
30、Name,goldhook)= 0 & strstr(szTarName,GoldBlock)!=NULL )if (dGetSpriteIsMounted(szTarName)=0)g_iGameScore+=20;dSpriteMountToSpriteLinkPoint( szTarName, goldhook, 2 );/將金塊錨定在鉤子上dSpriteMoveTo(goldhook,g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);/使鉤子向初始位置移動,即會拉dAnimateSpritePlayAnimation(G
31、oldMan,GolderManAnimation3, 1 );/播放拉金塊的動作strcpy(szGotGoldName,szTarName); /復(fù)制并保存當(dāng)前抓取到金塊的名稱g_fEmptyHookSpeed= 15.f;g_iGameState = 2;/表示繩索回拉/2表示回拉狀態(tài),用于控制金塊的回拉和刪除/ 發(fā)起者為goldhook,接受者含有DiaBlock字段/if(strcmp(szSrcName,goldhook)= 0 & strstr(szTarName,DiaBlock)!=NULL ) if (dGetSpriteIsMounted(szTarName)=0)g_i
32、GameScore+=50;dSpriteMountToSpriteLinkPoint( szTarName, goldhook, 2 ); /將鉆石錨定在鉤子上dSpriteMoveTo(goldhook,g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);/使鉤子向初始位置移動,即會拉dAnimateSpritePlayAnimation(GoldMan,GolderManAnimation3, 1 );/播放拉鉆石的動作strcpy(szGotGoldName,szTarName); /復(fù)制并保存當(dāng)前抓取到鉆石的名稱g_fE
33、mptyHookSpeed= 25.f; /提高拉鉆石速度g_iGameState = 2;/表示繩索回拉/2表示回拉狀態(tài),用于控制金塊的回拉和刪除/ 發(fā)起者為goldhook,接受者含有BombBlock字段/if(strcmp(szSrcName,goldhook)= 0 & strstr(szTarName,BombBlock)!=NULL )dDeleteSprite(szGotBombName);/炸彈消失float hPosX=dGetSpritePositionX(goldhook);float hPosY=dGetSpritePositionY(goldhook);dPlayE
34、ffect(bigbang, 2.f, hPosX, hPosY, 0.f ); /跟隨鉤子增加粒子效應(yīng)dSpriteMoveTo(goldhook,g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);/使鉤子向初始位置移動,即會拉dAnimateSpritePlayAnimation(GoldMan,GolderManAnimation3, 1 );/播放拉炸彈的動作strcpy(szGotGoldName,szTarName); /復(fù)制并保存當(dāng)前抓取到炸彈的名稱g_fEmptyHookSpeed= 15.f;g_iGameSt
35、ate = 2;/表示繩索回拉/2表示回拉狀態(tài),用于控制金塊的回拉和刪除/ 發(fā)起者為goldhook,接受者含有StoneBlock字段/if(strcmp(szSrcName,goldhook)= 0 & strstr(szTarName,StoneBlock)!=NULL ) if (dGetSpriteIsMounted(szTarName)=0)g_iGameScore+=5;dSpriteMountToSpriteLinkPoint( szTarName, goldhook, 2 ); /將石頭錨定在鉤子上dSpriteMoveTo(goldhook,g_fHookStartPosX
36、, g_fHookStartPosY, g_fEmptyHookSpeed, 1);/使鉤子向初始位置移動,即會拉dAnimateSpritePlayAnimation(GoldMan,GolderManAnimation3, 1 );/播放拉鉆石的動作strcpy(szGotGoldName,szTarName); /復(fù)制并保存當(dāng)前抓取到石頭的名稱g_fEmptyHookSpeed= 5.f; /減緩拉石頭的速度g_iGameState = 2;/表示繩索回拉/2表示回拉狀態(tài),用于控制金塊的回拉和刪除/計分/dSetTextValue(score,g_iGameScore);5. dOnSp
37、riteColWorldLimit()引擎捕捉到精靈與世界邊界碰撞之后,調(diào)用此函數(shù)。此函數(shù)相對比較簡單,用于處理鉤子未抓到物品碰到世界邊界時的處理。void dOnSpriteColWorldLimit( const char *szName, const int iColSide )if(strcmp(szName,goldhook) = 0) dSpriteMoveTo(szName,g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1); /碰到邊界的為鉤子時dAnimateSpritePlayAnimation(GoldMan
38、,GolderManAnimation3, 1 ); /同樣設(shè)置為回拉,只是沒有碰到金子g_iGameState = 2;4.部分自己設(shè)置定義的函數(shù)(1)定義金子、鉆石、炸彈、石頭顯示的函數(shù)Appear(),其內(nèi)還添加了少許碰撞屬性。這也是我們組本次編程較突出的地方。void Appear()/與顯示金子有關(guān)的定義 int g_fGoldBornMinX=0; intg_fGoldBornMaxX=0; intg_fGoldBornMinY=0; intg_fGoldBornMaxY=0; /與炸彈有關(guān)的定義 int g_fBombBornMinX=0; intg_fBombBornMaxX=
39、0; intg_fBombBornMinY=0; intg_fBombBornMaxY=0; /與鉆石有關(guān)的定義 int g_fDiaBornMinX=0; intg_fDiaBornMaxX=0; intg_fDiaBornMinY=0; intg_fDiaBornMaxY=0; /與石頭有關(guān)的定義 int g_fStoneBornMinX=0; intg_fStoneBornMaxX=0; intg_fStoneBornMinY=0; intg_fStoneBornMaxY=0;/設(shè)置金子/ g_fGoldBornMinX=dGetScreenLeft() + 5; /金子左邊界g_fGo
40、ldBornMaxX=dGetScreenRight() - 5; /金子右邊界g_fGoldBornMinY=dGetScreenTop() + 20; /金子上邊界g_fGoldBornMaxY=dGetScreenBottom() - 5; /金子下邊界intiLoop=0; /循環(huán)變量控制intiSize=4, iPosX = 0, iPosY = 0; /iSize表示金塊大小的變量 dSetSpriteCollisionSend(goldhook, 1); /鉤子抓金子的定義dSetSpriteCollisionReceive(goldTemplate, 1); /在WinMain的復(fù)制金子前給金塊加上接受碰撞屬性for( iLoop = 0;
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度中小企業(yè)貸款擔(dān)保合作協(xié)議
- 獨家合同:兩個單位聯(lián)合體投標(biāo)協(xié)議
- 環(huán)境樣本中微生物的檢驗試題及答案
- 注冊會計師備考方法分享試題及答案
- 醫(yī)院保安工作總結(jié)計劃
- 開展社團(tuán)特色活動的思路計劃
- 增強品牌知名度的戰(zhàn)略規(guī)劃計劃
- 新型微生物檢測方法的研究進(jìn)展試題及答案
- 2025年注冊會計師考試成功之路反思試題及答案
- 2025年證券從業(yè)資格證重要考點清理試題及答案
- 500字作文標(biāo)準(zhǔn)稿紙A4打印模板-直接打印
- 兒童康復(fù)家庭指導(dǎo)培訓(xùn)課件
- 單元2-任務(wù)3 水利工程年運行費及年費用計算
- 鑄鐵機維護(hù)保養(yǎng)及故障預(yù)防策略
- 個人分紅保險精算規(guī)定
- JB T 7946.1-2017鑄造鋁合金金相
- 榮威汽車內(nèi)飾環(huán)保材料研發(fā)與應(yīng)用
- SCA涂膠機內(nèi)部培訓(xùn)資料課件
- 美妝護(hù)膚直播培訓(xùn)課件
- 流動人口計劃生育服務(wù)管理信息系統(tǒng)培訓(xùn)
- 招投標(biāo)培訓(xùn)教程課件
評論
0/150
提交評論