版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、中國石油大學(華東)程序設計實訓報告拍飛蟲專業(yè)班級: 實習時間: 7月3號-7月6號 實習地點: 文理樓110 組長: 組員: 游戲截圖圖一:開始游戲圖二:開始打飛蟲圖三:打中紅色飛蟲扣五分圖四:一局游戲結束,按空格繼續(xù)游戲功能描述拍飛蟲游戲是玩家用鼠標控制拍子,拍飛蟲。飛蟲每次從不同的位置、以不同的速度飛來飛去。玩家拍的飛蟲越多,分數(shù)越高。1. 游戲運行,界面出現(xiàn)“空格開始”的提示框。2. 按下空格鍵,游戲開始,玩家移動鼠標控制拍子移動;點擊鼠標左鍵,用拍子拍飛蟲。3. 每局游戲時間為30秒。游戲開始時,在屏幕左上角顯示開局時間,并隨著游戲進行,實時顯示游戲剩余時間。4. 有3種飛蟲,大飛蟲
2、、小飛蟲和紅色飛蟲,拍到大飛蟲得1分,拍到小飛蟲得2分,拍到紅色飛蟲扣5分。分數(shù)實時顯示在屏幕左上角。5. 飛蟲從各個方向,以隨機速度在屏幕中穿梭。游戲過程當中,始終有飛蟲讓玩家拍打。6. 游戲時間到后,游戲停止,重新顯示初始界面。7. 記錄最高的5次游戲得分,按從大到小的順序排列,顯示在底部。8. 玩家按空格可以繼續(xù)游戲,如此往復。流程圖數(shù)據(jù)結構1) g_iGameScore 保存游戲獲得的分數(shù)。2) g_fGameTime 記錄游戲的時間。3) FlyBug 用一個結構體來存放飛蟲的名字和分數(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結構體中,每一只蚊子都有對應的名字和分數(shù)。g_bStart控制游戲的開始和結束,true的時候開始,false的時候結束。按下空格鍵,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ù)增加,又進行下一輪的游戲。再進行游戲調試的時候遇到多個bug,我組成員都將其一一修復。開始時,按下空格鍵開始,接著按空格鍵游戲又將重頭開始,于是添加了一個對g_bStart的判斷,保證了他們不會在游戲進行中初始化。在完成題目上給的要求的基礎上,我們?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() )/ 獲取兩次調用之間的時間差,傳遞給游戲邏輯處理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);/ 設置游戲進入結束狀態(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/游戲結束 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); / 關閉游戲引擎dShutdownGameEngine();return 0;/ 引擎捕捉鼠標移動消息后,將調用到本函數(shù)void dOnMouseMove( const float fMouseX, const float fMouseY ) if(g_bStart) dSetSprit
17、ePosition("paizi",fMouseX,fMouseY);/ 可以在此添加游戲需要的響應函數(shù)/ 引擎捕捉鼠標點擊消息后,將調用到本函數(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ù)/ 引擎捕捉鍵盤按下消息后,將調用到本函數(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ù)/ 引擎捕捉鍵盤彈起消息后,將調用到本函數(shù)void dOnKeyUp( const int iKey )/ 可以在此添加游戲需要的響應函數(shù)/ 引擎捕捉到精靈與精
23、靈碰撞之后,調用此函數(shù)void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )/ 引擎捕捉到精靈與世界邊界碰撞之后,調用此函數(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);心得體會 我們已經學習了一年的C語言,初步掌握了一定的C語言的基礎知識。當然,以前聽說程序實訓的時候會編寫最多上千行的程序,內心也是有些彷徨的。畢竟覺得自己的知識水平以及自己的能力還不足以完成這個任務。而且,在進行程序設計實訓的時候,還接觸了一個新的平臺funcode。所以,開始的時候盡管有老師的演示,但是還是覺得云里霧里的,不知所措。在經過一些簡單的習
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年小學生寒假學習計劃范本(五篇)
- 2024年學校傳染病工作制度范文(二篇)
- 2024年國際勞務合同例文(四篇)
- 2024年單位租房合同樣本(二篇)
- 2024年學生會秘書處工作計劃樣本(四篇)
- 2024年城鄉(xiāng)勞動者臨時務工勞動合同(三篇)
- 2024年小學教師年終工作總結簡單版(四篇)
- 2024年單位年度工作計劃樣本(六篇)
- 2024年大學教師個人工作計劃范本(二篇)
- 2024年小學學校體育工作計劃范文(二篇)
- 小學體育《爬越80-100厘米高的障礙物與游戲》教學設計
- 京東商城電子商務物流分析
- 《西方行政學說史》丁煌
- 創(chuàng)業(yè)指導智慧樹知到答案章節(jié)測試2023年威海職業(yè)學院
- 中國古代文學史(全套)課件
- 中國社會問題與當代大學生智慧樹知到答案章節(jié)測試2023年
- 面試真題及答案銷售類結構化面試題目
- 基本建設項目竣工財務決算審核表
- 普通高考考生戶籍情況審查登記表
- 南京文化創(chuàng)意和設計服務與相關產業(yè)融合發(fā)展報告
- 社區(qū)工作者考試考前必背300題
評論
0/150
提交評論