拍飛蟲實習報告_第1頁
拍飛蟲實習報告_第2頁
拍飛蟲實習報告_第3頁
拍飛蟲實習報告_第4頁
拍飛蟲實習報告_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、中國石油大學(華東)程序設(shè)計實訓報告拍飛蟲專業(yè)班級: 實習時間: 7月3號-7月6號 實習地點: 文理樓110 組長: 組員: 游戲截圖圖一:開始游戲圖二:開始打飛蟲圖三:打中紅色飛蟲扣五分圖四:一局游戲結(jié)束,按空格繼續(xù)游戲功能描述拍飛蟲游戲是玩家用鼠標控制拍子,拍飛蟲。飛蟲每次從不同的位置、以不同的速度飛來飛去。玩家拍的飛蟲越多,分數(shù)越高。1. 游戲運行,界面出現(xiàn)“空格開始”的提示框。2. 按下空格鍵,游戲開始,玩家移動鼠標控制拍子移動;點擊鼠標左鍵,用拍子拍飛蟲。3. 每局游戲時間為30秒。游戲開始時,在屏幕左上角顯示開局時間,并隨著游戲進行,實時顯示游戲剩余時間。4. 有3種飛蟲,大飛蟲

2、、小飛蟲和紅色飛蟲,拍到大飛蟲得1分,拍到小飛蟲得2分,拍到紅色飛蟲扣5分。分數(shù)實時顯示在屏幕左上角。5. 飛蟲從各個方向,以隨機速度在屏幕中穿梭。游戲過程當中,始終有飛蟲讓玩家拍打。6. 游戲時間到后,游戲停止,重新顯示初始界面。7. 記錄最高的5次游戲得分,按從大到小的順序排列,顯示在底部。8. 玩家按空格可以繼續(xù)游戲,如此往復。流程圖數(shù)據(jù)結(jié)構(gòu)1) g_iGameScore 保存游戲獲得的分數(shù)。2) g_fGameTime 記錄游戲的時間。3) FlyBug 用一個結(jié)構(gòu)體來存放飛蟲的名字和分數(shù)。4) iHighScore5 用一個int型數(shù)組來存放每局游戲的分數(shù)。5) g_bStart 用

3、于判斷游戲是否開始。6) g_fOldRotation 拍子拍打角度。7) g_fRotateTime 用于計算拍子拍打一次使用時間。8) g_ihuihe 用于計量所進行的游戲的回合數(shù)。9) g_fScreenLeft 左邊界值。10) g_fScreenRight 右邊界值。11) g_fScreenTop 上邊界值。12) g_fScreenBottom 下邊界值。13) g_iCount,i ,j計量變量。14) szName128 用于給飛蟲命名的字符串。15) iScore 計量飛蟲所帶的分數(shù)。16) fPosX 拍子的X方向的位置。17) fPosY 拍子的Y方向的位置。算法描述

4、有14只蚊子,存儲在FlyBug結(jié)構(gòu)體中,每一只蚊子都有對應的名字和分數(shù)。g_bStart控制游戲的開始和結(jié)束,true的時候開始,false的時候結(jié)束。按下空格鍵,g_bStart由false變?yōu)閠rue,游戲開始,倒計時開始計時30秒,warning和kaishi精靈消失,AddFlyBugs添加飛蟲精靈,飛蟲精靈添加后通過克隆三種模板精靈的運動使用自己定義的flying函數(shù)使蚊子自由飛舞。游戲開始,鼠標消失,拍子捕捉鼠標位置跟隨其運動,并改變其角度,然后通過給定函數(shù)的改變拍子的角度來實現(xiàn)拍子拍打的動畫。當蚊子的坐標在拍子的坐標周圍的時候,g_iGameScore變量進行計分,小飛蟲2分,

5、大飛蟲1分,紅色飛蟲-5分。在時間到的時候飛蟲精靈消失,kaishi精靈出現(xiàn),分數(shù)被送至iHighScore5進行排序。當一局所得分數(shù)高于iHighScore4時,就將其賦值到iHighScore4,并將iHighScore數(shù)組中的數(shù)據(jù)進行冒泡法排序。當再次按下空格鍵時,倒計時從30秒開始,計分清零,回合數(shù)增加,又進行下一輪的游戲。再進行游戲調(diào)試的時候遇到多個bug,我組成員都將其一一修復。開始時,按下空格鍵開始,接著按空格鍵游戲又將重頭開始,于是添加了一個對g_bStart的判斷,保證了他們不會在游戲進行中初始化。在完成題目上給的要求的基礎(chǔ)上,我們?yōu)榱朔乐褂腥烁呐淖拥拇笮碜鞅?,于是添加?/p>

6、紅色飛蟲進行扣分,增加了難度。源代碼#include "CommonAPI.h"#include "stdio.h"#include "string.h"bool g_bStart = false; int g_iGameScore =0;floatg_fGameTime =0;float g_fOldRotation = 0.f;float g_fRotateTime =0.f;int g_ihuihe = 0;floatg_fScreenLeft=0.f; / 屏幕左邊界值floatg_fScreenRight=0.f; / 右f

7、loatg_fScreenTop=0.f; / 上floatg_fScreenBottom=0.f; / 下int g_iCount = 0;int iHighScore5 = 0, 0, 0, 0, 0;char szName128;int i;structFlyBugcharszName128;/飛蟲名字intiScore;/分數(shù)值 FlyBugs15;void AddFlyBugs()sprintf(FlyBugsg_iCount.szName, "feichong_%d", g_iCount);FlyBugsg_iCount.iScore = 1;g_iCount+

8、;void Flying(char *szName)float fSpeed,fPosY,fPosX;int iDir = 0;iDir = dRandomRange(0,3);switch(iDir)case 0:fPosX = dRandomRange(g_fScreenLeft-5.f, g_fScreenRight);fPosY = dRandomRange(g_fScreenTop-5.f, g_fScreenBottom+5.f);/ 左方break;case 1: fPosX = dRandomRange(g_fScreenLeft-5.f, g_fScreenRight+5.f

9、);fPosY = dRandomRange(g_fScreenTop, g_fScreenBottom+5.f);/ 下方break;case 2:fPosX = dRandomRange(g_fScreenLeft, g_fScreenRight+5.f);fPosY = dRandomRange(g_fScreenTop-5.f, g_fScreenBottom+5.f);/ 右方break;case 3: fPosX = dRandomRange(g_fScreenLeft-5.f, g_fScreenRight+5.f);fPosY = dRandomRange(g_fScreenT

10、op-5.f, g_fScreenBottom);/ 上方break;dSetSpritePosition(szName, fPosX, fPosY);fSpeed= dRandomRange(10, 40);dSpriteMoveTo(szName, dRandomRange(g_fScreenLeft+15.f, g_fScreenRight-15.f),dRandomRange(g_fScreenTop+15.f, g_fScreenBottom-15.f),fSpeed,false);/ 主函數(shù)入口int PASCAL WinMain(HINSTANCE hInstance, HINS

11、TANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)/ 初始化游戲引擎if( !dInitGameEngine( hInstance, lpCmdLine ) )return 0;/ 游戲初始化代碼dSetWindowTitle("killfeichong"); dGetSpriteRotation("paizi"); g_fScreenLeft = dGetScreenLeft(); g_fScreenRight = dGetScreenRight(); g_fScreenTop = dGetScree

12、nTop(); g_fScreenBottom = dGetScreenBottom();/ 引擎主循環(huán),處理屏幕圖像刷新等工作while( dEngineMainLoop() )/ 獲取兩次調(diào)用之間的時間差,傳遞給游戲邏輯處理floatfTimeDelta=dGetTimeDelta(); if(g_bStart=true) / 游戲開始 g_fGameTime -= fTimeDelta;if(g_fGameTime > 0) / 游戲進行中dSetSpriteVisible("kaishi",false);if(g_fRotateTime > 0)g_fR

13、otateTime -= fTimeDelta;if(g_fRotateTime <= 0)dSetSpriteRotation("paizi", g_fOldRotation);else / 一局游戲時間到g_bStart=false;dSetSpriteVisible("kaishi",true);dShowCursor(true);for(i=0;i<15;i+)dDeleteSprite(FlyBugsi.szName);dSetSpritePosition("paizi", 0, 0);/ 設(shè)置游戲進入結(jié)束狀態(tài)i

14、f(g_iGameScore>=iHighScore4)iHighScore4=g_iGameScore;while(g_iGameScore<iHighScore4)break;int i,j,t;for(i=0;i<4;i+)for(j=4;j>i;j-)if(iHighScorej-1<iHighScorej)t=iHighScorej;iHighScorej=iHighScorej-1;iHighScorej-1=t;dSetTextValue("Score0",iHighScore0 );dSetTextValue("Sco

15、re1",iHighScore1 );dSetTextValue("Score2",iHighScore2 );dSetTextValue("Score3",iHighScore3 );dSetTextValue("Score4",iHighScore4 );else/游戲結(jié)束 dSetSpriteVisible("kaishi",true);for(i=0;i<15;i+)dDeleteSprite(FlyBugsi.szName);dSetSpritePosition("paizi&q

16、uot;, 0, 0);/ 執(zhí)行游戲主循環(huán)dSetTextValue("Time",g_fGameTime );dSetTextValue("Score",g_iGameScore );dSetTextValue("huihe",g_ihuihe); / 關(guān)閉游戲引擎dShutdownGameEngine();return 0;/ 引擎捕捉鼠標移動消息后,將調(diào)用到本函數(shù)void dOnMouseMove( const float fMouseX, const float fMouseY ) if(g_bStart) dSetSprit

17、ePosition("paizi",fMouseX,fMouseY);/ 可以在此添加游戲需要的響應函數(shù)/ 引擎捕捉鼠標點擊消息后,將調(diào)用到本函數(shù)void dOnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY ) int i;for(i=0;i<15;i+)float fPosX,fPosY;g_fRotateTime=0.05;dSetSpriteRotation("paizi",-30);fPosX= dGetSpritePositionX(F

18、lyBugsi.szName);fPosY=dGetSpritePositionY(FlyBugsi.szName);if(dIsPointInSprite("paizi",fPosX,fPosY)Flying(FlyBugsi.szName);if(g_bStart = true)if(i<5)g_iGameScore+;else if(i>=5 && i<12)g_iGameScore+=2;elseg_iGameScore-=5; / 可以在此添加游戲需要的響應函數(shù)/ 引擎捕捉鍵盤按下消息后,將調(diào)用到本函數(shù)/ iAltPress iS

19、hiftPress iCtrlPress 分別為判斷Shift,Alt,Ctrl當前是否也處于按下狀態(tài)。比如可以判斷Ctrl+E組合鍵void dOnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress )switch(iKey)case KEY_SPACE:if(g_bStart=false)g_bStart=true;dShowCursor(false);dSetSpriteVisible("warning",false);g_fGameTime

20、 = 31 ;g_iGameScore =0 ;g_iCount = 0 ;g_ihuihe+;for(g_iCount=0;g_iCount<15;)AddFlyBugs();for(i=0;i<15;i+)if(i<5)dCloneSprite("muban",FlyBugsi.szName);dSetSpriteWorldLimit(FlyBugsi.szName, WORLD_LIMIT_NULL,g_fScreenLeft-10.f,g_fScreenTop-10.f,g_fScreenRight+10.f, g_fScreenBottom+10

21、.f);Flying(FlyBugsi.szName);else if(i>=5 && i<12)dCloneSprite("muban2",FlyBugsi.szName);dSetSpriteWorldLimit(FlyBugsi.szName, WORLD_LIMIT_NULL,g_fScreenLeft-10.f,g_fScreenTop-10.f,g_fScreenRight+10.f, g_fScreenBottom+10.f);Flying(FlyBugsi.szName);elsedCloneSprite("muban3

22、",FlyBugsi.szName);dSetSpriteWorldLimit(FlyBugsi.szName, WORLD_LIMIT_NULL,g_fScreenLeft-10.f,g_fScreenTop-10.f,g_fScreenRight+10.f, g_fScreenBottom+10.f);Flying(FlyBugsi.szName);break;default:break;/ 可以在此添加游戲需要的響應函數(shù)/ 引擎捕捉鍵盤彈起消息后,將調(diào)用到本函數(shù)void dOnKeyUp( const int iKey )/ 可以在此添加游戲需要的響應函數(shù)/ 引擎捕捉到精靈與精

23、靈碰撞之后,調(diào)用此函數(shù)void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )/ 引擎捕捉到精靈與世界邊界碰撞之后,調(diào)用此函數(shù)./ iColSide : 0 左邊,1 右邊,2 上邊,3 下邊void dOnSpriteColWorldLimit( const char *szName, const int iColSide )int i;if(strstr("feichong", "feichong")!=NULL)for(i=0;i<15;i+)if(strcmp(FlyBugsi.szName, szName)=0)Flying(FlyBugsi.szName);心得體會 我們已經(jīng)學習了一年的C語言,初步掌握了一定的C語言的基礎(chǔ)知識。當然,以前聽說程序?qū)嵱柕臅r候會編寫最多上千行的程序,內(nèi)心也是有些彷徨的。畢竟覺得自己的知識水平以及自己的能力還不足以完成這個任務。而且,在進行程序設(shè)計實訓的時候,還接觸了一個新的平臺funcode。所以,開始的時候盡管有老師的演示,但是還是覺得云里霧里的,不知所措。在經(jīng)過一些簡單的習

溫馨提示

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

評論

0/150

提交評論