




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 程序設(shè)計(jì)實(shí)訓(xùn)報(bào)告坦克大戰(zhàn)專業(yè)班級(jí): 裝控1401 實(shí)習(xí)時(shí)間:2015年7月10日至7月14日 實(shí)習(xí)地點(diǎn): 微401 成 員 1: 趙振華 成 員 2: 許晨歡 成 員 3: 蔣緒濤 考勤(10%)文檔(30%)創(chuàng)意及實(shí)現(xiàn)(30%)視頻(30%)總成績(100%)個(gè)人分成員1成員2成員311一、作品概述1.1 創(chuàng)新點(diǎn):1、自定義并命名樹林和鋼板精靈,設(shè)置樹林屬性為不接受碰撞可以自由穿梭,鋼板為接受任何碰撞但不做任何處理(即子彈和坦克均不能摧毀鋼板)。2、添加坦克發(fā)炮、擊中目標(biāo)和坦克移動(dòng)的特殊聲效。12 概述:這款游戲是我們QWER小組以經(jīng)典90版坦克大戰(zhàn)為背景制作的坦克大戰(zhàn)的改編款,玩家通過控
2、制坦克摧毀敵方坦克來保衛(wèi)主基地不被摧毀。當(dāng)敵我雙方坦克相碰或己方基地被子彈摧毀時(shí)游戲結(jié)束(敵我雙方子彈均可摧毀基地),每隔3秒鐘出現(xiàn)一輛敵方坦克,游戲最大時(shí)長為100秒。此款游戲與經(jīng)典90版坦克大戰(zhàn)較為相似,操作簡(jiǎn)單,能喚起我們對(duì)童年的回憶。二、功能設(shè)計(jì)玩家坦克與敵方坦克在街道中進(jìn)行巷戰(zhàn),玩家坦克被擊中或與敵方坦克相撞、玩家指揮部被擊中或游戲時(shí)間到,一局游戲結(jié)束。按下空格鍵后游戲開始,“空格開始”消失,載入地圖,100秒倒計(jì)時(shí)開始,并把玩家坦克設(shè)置在指揮部左側(cè)。游戲時(shí)間到,玩家坦克被敵方坦克摧毀,與敵方坦克相撞,或者玩家指揮部被摧毀,一局游戲結(jié)束,游戲回到初始界面,并顯示上一局的分?jǐn)?shù)。玩家用W
3、、A、S、D鍵控制坦克上、下、左、右運(yùn)行,按J鍵開炮。坦克行進(jìn)過程中有特殊聲效,坦克發(fā)射或擊中目標(biāo)都有相應(yīng)的聲效。玩家坦克碰到墻和鋼板就停下來,需要調(diào)轉(zhuǎn)方向才能繼續(xù)前進(jìn)。玩家坦克開炮,一炮就能摧毀一塊墻或者一輛敵方坦克,但不能摧毀鋼板,玩家可穿梭于樹林中。玩家每摧毀一輛敵方坦克,加1分。玩家指揮部被坦克或者炮彈(不管玩家還是敵方)碰上,都會(huì)被摧毀。每隔3秒鐘,就會(huì)產(chǎn)生一輛敵方坦克。敵方坦克每隔一段時(shí)間,就自動(dòng)開炮。敵方坦克遇到墻就會(huì)停下來。停下來的坦克,前方的墻如果被摧毀了,又能繼續(xù)前進(jìn)。每隔幾秒鐘,敵方坦克就會(huì)順時(shí)針變換一個(gè)方向前進(jìn)。每局最大時(shí)長為100秒。三、功能實(shí)現(xiàn)3.1 數(shù)據(jù)結(jié)構(gòu)str
4、uct WeaponcharszName128; / 精靈名稱floatfPosX, fPosY; / 精靈坐標(biāo)floatfSpeedX, fSpeedY;/ X和Y方向上速度floatfFireTime; / 敵方坦克距下一次開炮的剩余時(shí)間 float fRotateTime;intiHp; / 生命值intiDir; / 朝向:0 - 上方;1 - 右方;2 - 下方;3 - 左方intiType; / 類型: 0 - 我方坦克;1 - 敵方坦克;2 - 我方/ 子彈; 3 - 敵方子彈Weapon* pNext; / 指向下一個(gè)節(jié)點(diǎn)的指針;enum DirectionUP=0, / 上方
5、 RIGHT=1, / 右方DOWN=2, / 下方LEFT =3 / 左方;enum RoleMYTANK=0, / 我方坦克ENEMYTANK=1, / 敵方坦克MYBULLET=2, / 我方子彈ENEMYBULLET =3/ 敵方子彈;const floatGAME_TIME =100.f; / 一局游戲時(shí)間const float CREATE_TANK_TIME = 2.f; / 每批次生成坦克的時(shí)間間隔const floatTANK_SPEED = 20.f; / 坦克速度const float BULLET_SPEED = 30.f; / 子彈速度const floatFIRE_
6、TIME = 2.f; / 坦克開炮時(shí)間間隔const floatWORLD_LEFT = -26.f; / 游戲場(chǎng)景邊界左值const floatWORLD_TOP = -22.f; / 游戲場(chǎng)景邊界左值const floatWORLD_RIGHT = 26.f; / 游戲場(chǎng)景邊界左值const floatWORLD_BOTTOM = 22.f; / 游戲場(chǎng)景邊界左值int g_iMap1113; / 二維數(shù)組定義游戲地圖intg_iWallCount=0; / 游戲中墻的數(shù)量intg_iNum=0; / 記錄全部精靈的數(shù)目,用來給精靈命名float g_fCreateTime =0.f;
7、/ 每批次生成坦克的剩余時(shí)間int g_listSize;const floatROTATE_TIME = 2.f; / 敵方坦克調(diào)轉(zhuǎn)方向的時(shí)間bool g_bStart; / 定義游戲開始與否intg_iScore; / 游戲中的分?jǐn)?shù)float g_fGameTime=30.f; / 定義游戲時(shí)間int maxscore=0; / 定義初始最高分3.2 算法描述3.2.1 游戲開始和結(jié)束1、游戲狀態(tài)g_bstart分為兩種狀態(tài)0,1 ,其中0表示游戲結(jié)束狀態(tài),1表示游戲開始; 當(dāng)游戲未開始時(shí)即g_start狀態(tài)為0,按下空格鍵,游戲g_bstart狀態(tài)變?yōu)?,游戲開始,將“空格開始”與“sp
8、lash”設(shè)置為不可見,游戲開始計(jì)時(shí)為100秒,顯示最高分?jǐn)?shù),將本局游戲分?jǐn)?shù)初始化為0,初始化地圖中墻,goal,玩家坦克的位置。一局游戲進(jìn)行中,每循環(huán)一次,g_fGameTime減去一次刷屏的時(shí)間。當(dāng)g_fGameTime0,說明一局游戲時(shí)間已完,游戲停止,重新顯示“空格開始“字樣。2、按W、S、A、D鍵,控制坦克上下左右運(yùn)動(dòng)。定義MoveMyTank函數(shù),按下W鍵,設(shè)置玩家坦克向上的速度;按下A鍵,設(shè)置向左速度;按下S鍵,設(shè)置向下的速度,按下D鍵,設(shè)置向右速度。松開鍵盤,坦克速度為0。同時(shí)設(shè)置玩家坦克朝向iDir。3、游戲開始后,右上角實(shí)時(shí)顯示剩余時(shí)間。一局游戲開始后,在WinMain函數(shù)
9、中的主循環(huán)里,通過dSetTextValue把(int)g_fGameTime的數(shù)值顯示在名為“time”的文字精靈里,從而實(shí)時(shí)顯示剩余時(shí)間(顯示整秒的時(shí)間)。4、當(dāng)超過100秒,游戲結(jié)束,重新顯示“空格開始”字樣,游戲時(shí)間設(shè)為0,坦克回到初始位置。一局游戲進(jìn)行中,每循環(huán)一次,g_fGameTime減去一次刷屏的時(shí)間。當(dāng)g_fGameTime0,說明一局游戲時(shí)間已完,游戲停止,重新顯示“空格開始”字樣。同時(shí),g_batart狀態(tài)要改為0,否則下一局就不能正確判斷游戲開始或結(jié)束。3.2.2 玩家坦克在街道中運(yùn)行1、一局游戲開始時(shí)載入地圖。利用數(shù)組的值來載入地圖,值為0,說明此處為空;值為1,說明
10、此處有墻。游戲開始后載入地圖,但只能載入一次。如果不停載入,會(huì)占有大量資源。創(chuàng)建一個(gè)新的精靈,首先需要給它命名。有規(guī)則地給精靈命名,有利于我們對(duì)精靈進(jìn)行處理。我們按照墻生成的先后順序,分別給精靈命名為:wall0,wall1,wall2.按樹林生成的順序,分別給精靈命名為:shu,shu1,shu2,鋼板分別命名為aa1,aa2。2、一局游戲結(jié)束后刪除地圖。3、玩家坦克碰到墻的話,不能繼續(xù)前行。設(shè)置玩家坦克的碰撞屬性,并專門定義一個(gè)函數(shù)處理玩家坦克發(fā)生碰撞后,玩家坦克的響應(yīng)。3.2.3 玩家坦克射擊1、玩家按下j鍵,坦克發(fā)送炮彈;自定義一個(gè)函數(shù),OnFire用于完成坦克發(fā)射子彈功能。玩家坦克發(fā)
11、射子彈,和敵方坦克發(fā)射子彈功能基本一樣,我們可以寫在一個(gè)函數(shù)里。首先,需要把發(fā)射子彈的坦克名稱傳進(jìn)來,這樣,我們才能獲取坦克的朝向和位置;其次,需要區(qū)別是我方坦克發(fā)射的子彈,還是敵方坦克發(fā)射的子彈。在dOnKeyDown中增加對(duì)OnFire函數(shù)的調(diào)用。條件需要滿足:游戲開始后,且玩家按J鍵。2、創(chuàng)建鏈表,用鏈表管理炮彈;用鏈表管理子彈,每發(fā)射一顆子彈,就添加到鏈表里。每刪除一顆子彈,就從鏈表里相應(yīng)刪除節(jié)點(diǎn)。游戲結(jié)束時(shí),刪除所有剩余的子彈。3、子彈擊中墻,將墻摧毀;子彈擊中目標(biāo),游戲結(jié)束。碰撞事件中,我們經(jīng)常會(huì)將碰撞的一方或兩方刪除。但是,如果我們直接刪除某個(gè)精靈,而后面的精靈還需要獲得它的信息
12、時(shí),就沒法獲得了。因此,我們定義一個(gè)ISDead函數(shù),當(dāng)該指針存在且iHp為0時(shí),說明該精靈已死。碰撞函數(shù)中,先將需要?jiǎng)h除的精靈的iHp設(shè)置為0,最后再統(tǒng)一將需要?jiǎng)h除的精靈刪除。4、在dOnSpriteColSprite函數(shù)中調(diào)用上面兩個(gè)碰撞函數(shù)。其中,墻只具有“接受碰撞”屬性,因此只需要判斷szTarName是否包含wall字符串。子彈具有“發(fā)射碰撞”和“接受碰撞”兩種屬性,因此需要分別判斷szSrcName和szTarName是否包含bullet字符串。3.2.4 敵方坦克產(chǎn)生與運(yùn)動(dòng)1、每隔一段時(shí)間,生成一輛敵方坦克,向下運(yùn)動(dòng);坦克生成的初始位置前方不能有墻。自定義一個(gè)函數(shù),用于生成敵方坦
13、克。每次生成一輛敵方坦克,總是放在第一排,列數(shù)隨機(jī),但其前方不能有墻。方向朝向,設(shè)置“發(fā)送碰撞”和“接受碰撞”屬性,設(shè)置世界邊界。創(chuàng)建一個(gè)Weapon指針節(jié)點(diǎn),將精靈名稱、朝向、坦克調(diào)轉(zhuǎn)方向時(shí)間保存起來,并將節(jié)點(diǎn)添加到鏈表中。2、敵方坦克每隔一段時(shí)間,就順時(shí)針變化一個(gè)方向,繼續(xù)前進(jìn)。自定義一個(gè)MoveEnemyTank函數(shù),用來處理敵方坦克的運(yùn)動(dòng)。函數(shù)根據(jù)敵方坦克名稱,獲取敵方坦克當(dāng)前朝向和速度,然后將該坦克順時(shí)針旋轉(zhuǎn)90度,并修改相應(yīng)速度。在WinMain函數(shù)中,一局游戲運(yùn)行時(shí),遍歷鏈表,找出敵方坦克節(jié)點(diǎn),判斷是否已經(jīng)到調(diào)換方向時(shí)間。如果時(shí)間到,調(diào)用MoveEnemyTank函數(shù)。3.2.5
14、 坦克對(duì)戰(zhàn)1、玩家坦克子彈擊中敵方坦克,敵方坦克被摧毀,玩家加一分。在OnTankColOther函數(shù)中,對(duì)玩家子彈碰到敵方坦克,敵方坦克iHp設(shè)為0,并且g_iScore加1。2、每隔一段時(shí)間,敵方坦克就發(fā)射一發(fā)子彈;增加一個(gè)一個(gè)全局常量的定義:const floatFIRE_TIME= 2.f;/ 敵方坦克發(fā)射炮彈的時(shí)間間隔創(chuàng)建坦克時(shí),需要給坦克的fFireTime賦值為FIRE_TIME。在WinMain的主循環(huán)中,遍歷鏈表,找到敵方坦克節(jié)點(diǎn)。如果坦克發(fā)射炮彈時(shí)間到,調(diào)用OnFire函數(shù)。3、敵方子彈擊中玩家坦克,游戲結(jié)束。在OnMyTankColOther函數(shù)中,當(dāng)玩家坦克碰到的是子彈
15、精靈(不可能是自己發(fā)射的子彈,因?yàn)樽訌椝俣缺忍箍丝欤螒蚪Y(jié)束。四、系統(tǒng)界面圖4-1 開始游戲圖4-2 游戲進(jìn)行畫面圖4-3 開始新一局游戲五、總結(jié)許晨歡:這次程序設(shè)計(jì)實(shí)訓(xùn)我自己收獲非常的多,首先是對(duì)于funcode這款軟件的收獲,可以說是從無到有,從陌生到熟悉,開始覺得軟件太難了,無從下手,后來在不斷詢問老師和同學(xué)的過程中,逐漸熟能生巧,學(xué)會(huì)了創(chuàng)建第一個(gè)項(xiàng)目,運(yùn)行FunCode創(chuàng)建新項(xiàng)目,導(dǎo)入靜態(tài)精靈,導(dǎo)入動(dòng)畫精靈,刪除精靈,設(shè)計(jì)界面初步,運(yùn)行游戲等基本操作。通過練習(xí)熟練了打開項(xiàng)目,安裝目錄及內(nèi)容,給精靈起名稱,設(shè)置精靈的速度,設(shè)置精靈的層次,精靈與世界邊界的碰撞,精靈與精靈的碰撞,導(dǎo)入地圖
16、模板等項(xiàng)目改進(jìn)措施,并逐步運(yùn)用自如。但是對(duì)軟件熟悉了之后新問題又來了,發(fā)現(xiàn)真正難的是游戲代碼,開始連哪個(gè)函數(shù)是什么作用都搞不明白,而且坦克大戰(zhàn)中運(yùn)用到指針,枚舉等之前已經(jīng)生疏的知識(shí)點(diǎn),我們也只能是現(xiàn)學(xué)現(xiàn)用,通過詢問老師,同學(xué)和查詢網(wǎng)絡(luò)一步一步達(dá)到自己的目的,在與同隊(duì)的隊(duì)員編寫一天之后逐步的可以通過結(jié)合程序后面的中文注釋看懂程序所表達(dá)的目的和意思了;在實(shí)習(xí)過程中遇到很多很多棘手的問題,其中最大的問題便是C語言能力不夠了,好多程序編出來都有錯(cuò)誤,甚至都編不出來,這給我們時(shí)間和精力上增添了很大障礙。在這幾天最令我感慨的就是團(tuán)隊(duì)的力量,三個(gè)人從零基礎(chǔ)到獨(dú)立編寫一個(gè)游戲,沒有團(tuán)結(jié)協(xié)作的精神是不行的,我們
17、甚至犧牲晚上娛樂的時(shí)間和中午午休的時(shí)間加班加點(diǎn)地完善我們的程序,盡管很苦,但我們甘之如飴,為的是團(tuán)隊(duì)的成績;其次就是C語言的強(qiáng)大力量,無論是我們?nèi)粘=佑|的手機(jī),電腦或者是接觸不到的高科技產(chǎn)品,都離不開C語言,它是一種非常實(shí)用的計(jì)算機(jī)語言,我們也應(yīng)該日后更加重視C語言的學(xué)習(xí)與應(yīng)用。這次實(shí)訓(xùn)貴在學(xué)有所用,我在團(tuán)隊(duì)的力量中確實(shí)感覺到自己過去的C語言沒有白學(xué),能夠轉(zhuǎn)化為應(yīng)用技能,感到很高興,希望我們都能在日后注重學(xué)于用之間的關(guān)系,團(tuán)結(jié)一心向前看!趙振華:經(jīng)過為期4天的funcode學(xué)習(xí),從開始只會(huì)編程解決所謂的實(shí)際應(yīng)用問題到用funcode平臺(tái)編一個(gè)小游戲,其間我們的C語言知識(shí)、程序思維能力等從理論階段提升到實(shí)踐階段,我們從游戲制作者的角度弄清楚了游戲運(yùn)行原理,知道怎么原來的基礎(chǔ)上添加類似的元素(如樹林、鋼板)幾天以來,感受頗深,例如坦克大戰(zhàn),首先進(jìn)行功能分類,然后具體分析每個(gè)功能的設(shè)計(jì)以及各個(gè)功能模塊之間的聯(lián)系,精靈碰撞分類我們解決現(xiàn)實(shí)問題的時(shí)候也可借鑒類似的思維方式,針對(duì)各種分類情況做出相應(yīng)的抉擇。再者,我們?cè)诓粩嗟貙W(xué)習(xí)新知識(shí)的同時(shí)在應(yīng)用中不斷將已有的知識(shí)融會(huì)貫通,多多抓住實(shí)踐練習(xí)的機(jī)會(huì),學(xué)習(xí)與應(yīng)用相結(jié)合,使我們學(xué)有所用,達(dá)到學(xué)習(xí)的真正目的。以上這是我的感想。蔣緒濤:我這已經(jīng)不是第一次接觸funcode了
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 精益生產(chǎn)培訓(xùn)課程
- 2025年三班級(jí)教學(xué)工作方案
- 酒店裝潢知識(shí)培訓(xùn)課件
- 2025年社區(qū)親子活動(dòng)方案
- SMT物料管理辦法
- 貴州省黔南州長順縣達(dá)標(biāo)名校2024-2025學(xué)年初三質(zhì)量檢測(cè)試題(三模)化學(xué)試題試卷含解析
- 四川機(jī)電職業(yè)技術(shù)學(xué)院《基于疫情大數(shù)據(jù)分析系統(tǒng)專業(yè)實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南省安仁縣2025屆初三一輪階段測(cè)評(píng)(三)英語試題試卷含答案
- 河北省石家莊二中雄安校區(qū)2025屆高三第一次測(cè)試英語試題試卷含解析
- 太原理工大學(xué)《板形及尺寸精度控制》2023-2024學(xué)年第二學(xué)期期末試卷
- 陽光玫瑰葡萄種植技術(shù)
- 橡膠原材料檢驗(yàn)標(biāo)準(zhǔn)
- 小區(qū)景觀水系清淤施工方案
- 英語課堂游戲PPT-連詞成句搭橋游戲
- 人類應(yīng)不應(yīng)該限制人工智能的發(fā)展辯論賽正方辯詞一辯、二辯、三辯、四辯發(fā)言稿
- Unit5Poems單元整體教學(xué)設(shè)計(jì)-高中英語人教版(2019)選擇性單元整體教學(xué)設(shè)計(jì)(視頻課件教案)
- 高中英語高考詞性轉(zhuǎn)換匯總(5類詞形轉(zhuǎn)換、7組核心詞匯轉(zhuǎn)換)
- 非暴力溝通 情緒篇
- 氫氧化鈣化學(xué)品安全技術(shù)說明書
- 醫(yī)保應(yīng)急處理預(yù)案制度
- 人民醫(yī)院整形外科臨床技術(shù)操作規(guī)范2023版
評(píng)論
0/150
提交評(píng)論