freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

坦克大戰(zhàn)游戲的改進(jìn)設(shè)計(jì)(編輯修改稿)

2025-08-24 18:24 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 變方向,而子彈可以擊碎磚墻無(wú)法擊碎鋼鐵,關(guān)于碰撞都是通過(guò)難證坐標(biāo)是否重合實(shí)現(xiàn)的,以下是具體實(shí)現(xiàn)。,并存放中定義好的鏈表中,游戲中為其定義了全局變量 ruined,類(lèi)型為布爾型的,用來(lái)判斷坦克是否被摧毀,當(dāng)其值為 true 說(shuō)明坦克被摧毀,此外還定義了函數(shù) Stop_down(),Stop_up(),Stop_right(), Stop_left()來(lái)判斷坦克是否撞擊了墻,其返回類(lèi)型同樣是布爾型,最后我方坦克定義了 fire()函數(shù)用來(lái)射擊,敵方坦克定義了shoot()函數(shù)射擊子彈,在游戲中的運(yùn)行情況如圖 3217圖 32 敵我雙方坦克當(dāng)敵人坦克完全死亡時(shí),即 ()為 0 且 flag 達(dá)到相應(yīng)的值,需調(diào)用 clear()函數(shù)清空桌面上的敵我雙方子彈和其它元素,然后進(jìn)入下一關(guān),重新轉(zhuǎn)回畫(huà)面。當(dāng)然,如果當(dāng)前已是最后一關(guān),就不會(huì)再轉(zhuǎn)回。進(jìn)入下一關(guān)時(shí),許多變量需要重新被初始化,如地圖的繪制、敵人出現(xiàn)位置的重置、敵人的數(shù)量、玩家坦克的當(dāng)前位置。如果游戲未結(jié)束,則需判斷屏上坦克是否已小于還剩坦克的總數(shù),如果是這樣,就需要再提供一批坦克。,為了讓子彈移動(dòng)并且給玩家在視覺(jué)上達(dá)到子彈移動(dòng)的效果,將子彈線程的休眠時(shí)間設(shè)為 200 毫秒。敵我雙方子彈同樣是放在列表中,并且每顆子彈都有屬主,當(dāng)子彈的屬主被摧毀時(shí),即 ruined 的值為 true 時(shí),子彈也會(huì)死亡,也就是說(shuō)存放子彈的鏈表將被清空,最后定義函數(shù) shoot_fe(),shoot_bride(),shoot_home(),succeed()來(lái)判斷子18彈是否擊中相應(yīng)的墻和對(duì)方坦克,其類(lèi)型都是布爾類(lèi)型,當(dāng)子彈擊中墻或?qū)Ψ教箍藭r(shí)就會(huì)通過(guò) start()函數(shù)來(lái)啟動(dòng)爆炸效果線程,子彈在游戲中的運(yùn)行情況如圖 33圖 33 子彈的運(yùn)行子彈是一個(gè)繼承了 Thread 類(lèi)的可運(yùn)行單獨(dú)線程的對(duì)象,在其出現(xiàn)在屏幕上的運(yùn)行周期中,每一步都需要循環(huán)檢測(cè)以下條件:是否與某坦克發(fā)生了碰撞,即擊中了這輛坦克。子彈使用的是象素級(jí)的碰撞檢測(cè),因?yàn)樽訌椀膱D片形狀不規(guī)則,如果使用矩形碰撞檢測(cè),將有可能在子彈尚未接觸到物體時(shí)就已返回碰撞的真值。 strat()函數(shù)啟動(dòng)線程,之后坦克就會(huì)向著隨機(jī)產(chǎn)生的方向前進(jìn),方向是通過(guò) random()函數(shù)產(chǎn)生的,0,1,2,3 分別表示上下左右,坦克的移動(dòng)步數(shù)是根據(jù)坦克的等級(jí)不同而定,定義 level 來(lái)表示坦克的等級(jí),其中坦克的移動(dòng)步數(shù)和 level 之間在的關(guān)系為 moveing=level 19* 2 + 6,敵軍方向的控制如圖 34圖 34 敵軍坦克的控制 讓敵軍坦克更加智能,同時(shí)動(dòng)起來(lái),構(gòu)造函數(shù)中可以指定方向,new 敵軍坦克的時(shí)候指定敵軍坦克的方向,讓敵軍坦克向隨機(jī)方向移動(dòng)。每次碰撞到墻時(shí),都會(huì)產(chǎn)生一個(gè)隨機(jī)方向,以便避開(kāi)障礙物。4.我方坦克的移動(dòng)是通過(guò)玩家敲擊鍵盤(pán)來(lái)控制的,程序中對(duì)玩家是否敲擊鍵盤(pán)加了監(jiān)聽(tīng),當(dāng)程序監(jiān)聽(tīng)到玩家敲擊鍵盤(pán)時(shí),就響應(yīng)該事件,并在keyPressed()函數(shù)中判斷玩家按下的是哪個(gè)鍵,從而確定坦克的移動(dòng)方向和是否射擊子彈,當(dāng)監(jiān)聽(tīng)到坦克需要射擊時(shí),調(diào)用 fire()函數(shù)進(jìn)行射擊,如果我方坦克被擊毀時(shí),我方的坦克所分配的子彈也會(huì)從鏈表中清空,并且我方坦克分配子彈也是根據(jù)坦克的等級(jí)進(jìn)行分配的,等級(jí)越高分配的子彈也就越多,如圖35 所示20圖 35 我方坦克KeyBoardLis 類(lèi)繼承了 KeyListener 類(lèi),采取響應(yīng)鍵盤(pán)事件的方法,每次執(zhí)行周期時(shí)會(huì)讀取 KeyPressed()函數(shù)中需執(zhí)行的代碼。本程序?yàn)樘箍硕x了 4個(gè)方向(上下左右) ,先定位坦克的初始方向。根據(jù)按鍵狀態(tài)確定坦克的方向是用 key pressed ()這個(gè)方法來(lái)實(shí)現(xiàn)的。其中定義了 x 軸和 y 軸,按下 A 鍵,橫坐標(biāo)減少相應(yīng)的值,按下 D 橫坐標(biāo)增加相應(yīng)的值,按下 W 鍵縱坐標(biāo)減少相應(yīng)的值,而按下 S 鍵縱坐標(biāo)增加相應(yīng)的值,具體的值根據(jù)坦克的等級(jí)而定。5.本游戲共設(shè)為三關(guān),隨著關(guān)數(shù)的遞增,每關(guān)的坦克數(shù)量也會(huì)增加,也就是說(shuō)游戲的難度會(huì)逐漸加大,敵軍坦克分批出現(xiàn)在屏幕上,每批五個(gè),在程序中定義變量 flag 用作標(biāo)志,用來(lái)控制每關(guān)應(yīng)該出現(xiàn)多少批,每殲滅敵軍一批坦克,就再增加五個(gè)并且 flag 自增,每關(guān)的自增的次數(shù)不一樣,自增的次數(shù)決定了坦克的批數(shù),每一關(guān)過(guò)到規(guī)定的批數(shù)時(shí)就通關(guān),如果當(dāng)前是最后一關(guān)并全殲敵軍,那么就顯示 you win 的畫(huà)面,游戲也隨之結(jié)束,如圖 36 所示21圖 36 游戲通關(guān)游戲的每一關(guān)的敵軍坦克數(shù)量都不一樣,隨著關(guān)數(shù)的增加,敵軍坦克的數(shù)量也在不斷增加,每一關(guān)結(jié)束時(shí)都判斷當(dāng)前是否處于最后一關(guān),如果是則顯示YOU WIN 的字樣,如果不是則自動(dòng)轉(zhuǎn)到下一關(guān)繼續(xù)游戲,直到最后一關(guān)。如果玩家在任何一關(guān)不辛陣亡,則游戲也結(jié)束,只不過(guò)顯示的是 GAME OVER 的字樣。6.為了增加游戲的趣味性,游戲過(guò)程中會(huì)隨機(jī)出現(xiàn)獎(jiǎng)勵(lì)物品,游戲中設(shè)置了三種獎(jiǎng)勵(lì)物品,當(dāng)坦克的坐標(biāo)和這些物品的坐標(biāo)重合時(shí),坦克就可以撿到這些物品,獎(jiǎng)勵(lì)出現(xiàn)與消失如圖 37 所示22圖 37 獎(jiǎng)勵(lì)出現(xiàn)與消失游戲中設(shè)置了獎(jiǎng)勵(lì)道具,當(dāng) count 的值等于 100 時(shí),就會(huì)在屏幕上隨機(jī)出現(xiàn)一個(gè)獎(jiǎng)勵(lì)道具,每個(gè)道具都會(huì)有自己的生命值,定義道具生命值 life 為100,從道具剛出現(xiàn)時(shí),life 就做自減操作,當(dāng) life 的值為 0 時(shí),道具就從屏幕上消失,在道具消失前如果坦克撿到道具,坦克就會(huì)有相應(yīng)的變化。其中道具有三種,生命坦克、手槍、炸彈。玩家撿到生命坦克時(shí),生命值會(huì)增加;敵軍撿到生命坦克時(shí),我方坦克生命值減少。雙方坦克撿到手槍時(shí),坦克速度都會(huì)增加,子彈的威力也會(huì)增加。我方坦克撿到炸彈時(shí),敵軍就會(huì)有一輛坦克爆炸,反之亦然。237.用文件保存玩家擊毀敵軍坦克的數(shù)量如圖 38 所示圖 38 保存擊毀敵軍數(shù)量每一關(guān)擊毀多少量敵軍坦克都以文件的形式保存在 record 中,這樣便于統(tǒng)計(jì)玩家的最好成績(jī),這樣增加了游戲的挑戰(zhàn)性8.用文件保存屏幕上所有的元素坐標(biāo)如圖 39 所示圖 39 保存屏幕上所有元素坐標(biāo)從當(dāng)前關(guān)卡退出游戲時(shí),屏幕上所有元素的坐標(biāo)都以文件形式的保存起來(lái),這樣便于一次可以繼續(xù)本次退出的位置,進(jìn)一步增加了游戲的友好性。249.讀取文件中的信息如圖 310 所示圖 310 讀取文件中的信息Record 是以字節(jié)為基本單位來(lái)存放的,所以所有要寫(xiě)入 record 的數(shù)據(jù)都必須先將其轉(zhuǎn)為字節(jié)才能寫(xiě)入,從 record 所讀出來(lái)的數(shù)據(jù)也是字節(jié),必須將其轉(zhuǎn)換為原先寫(xiě)入時(shí)的數(shù)據(jù)類(lèi)型才有意義。 本章小結(jié)本章主介要紹了游戲的結(jié)構(gòu),即游戲的主成模塊,以及游戲中主要功能的算法設(shè)計(jì),通過(guò)對(duì)每個(gè)功能的分析和設(shè)計(jì)最終完成了整個(gè)游戲的設(shè)計(jì)。游戲開(kāi)發(fā)過(guò)程中遇到很多困難,但只要專(zhuān)心,堅(jiān)持,一切困難都會(huì)解決的。25第 4 章 游戲詳細(xì)設(shè)計(jì) 游戲 功能設(shè)計(jì)游戲中敵我雙方坦克均可完成射擊,開(kāi)動(dòng)的功能,但己方坦克的運(yùn)行是通過(guò)鍵盤(pán)響應(yīng)事件控制,而敵方坦克是根據(jù)設(shè)定相應(yīng)的休眠周期來(lái)控制運(yùn)行的。下面是對(duì)本系統(tǒng)的主要功能模塊的功能進(jìn)行介紹我方坦克的功能為了滿足游戲的友好性,我方坦克必須能夠射擊和移動(dòng),只有通過(guò)射擊才能擊敗敵軍,也只有移動(dòng)才能躲避敵軍的子彈和吃到獎(jiǎng)勵(lì)的物品,這樣才能達(dá)到游戲的真正的目的。我方坦克的射擊和移動(dòng)都是通過(guò)響應(yīng)鍵盤(pán)事件來(lái)實(shí)現(xiàn)的,在玩家的操縱下向敵軍發(fā)動(dòng)進(jìn)攻。敵方坦克的功能敵軍能夠移動(dòng)和發(fā)射子彈,但他們的移動(dòng)和射擊都是隨機(jī)的,并且不需要玩家的操縱,它們是通過(guò)線程設(shè)定相應(yīng)的休眠周期來(lái)控制移動(dòng)和射擊,敵軍會(huì)向四個(gè)不同的方向移動(dòng)特定的步數(shù)和射擊,其中方向是通過(guò)隨機(jī)函數(shù)生成的。敵軍子彈敵軍子彈也被設(shè)計(jì)成一個(gè)線程,敵軍每隔一段時(shí)間就會(huì)發(fā)射子彈,子彈也設(shè)定了休眠周期來(lái)控制自身的移動(dòng),當(dāng)子彈擊中墻時(shí)就會(huì)出現(xiàn)爆炸效果,子彈也隨之消失,擊中的墻如果是磚墻剛磚墻也消失,如果是鐵墻則只有子彈消失,如果擊中的是草和河流,則子彈可以通過(guò),直到撞到邊框才消失,如果擊中我方坦克,程序會(huì)根據(jù)敵軍坦克的等級(jí)做出相應(yīng)的處理。我方子彈我方坦克子彈也是被設(shè)計(jì)成了一個(gè)線程,但是該線程的啟動(dòng)是在玩家敲擊鍵盤(pán)的條件發(fā)生的,當(dāng)玩家敲擊鍵盤(pán)時(shí)線程啟動(dòng),子彈的就會(huì)以一定的速度向坦克的槍口的方向移動(dòng),當(dāng)子彈擊中墻時(shí)就會(huì)出現(xiàn)爆炸效果,子彈也隨之消失,擊中的墻如果是磚墻剛磚墻也消失,如果是鐵墻則只有子彈消失,如果擊中的是草和河流,則子彈可以通過(guò),直到撞到邊框才消失,如果擊中敵軍坦克,程序會(huì)根據(jù)敵軍坦克的等級(jí)做出相應(yīng)的處理。爆炸效果每一顆子彈在消失時(shí)都會(huì)出現(xiàn)爆炸,爆炸也是一個(gè)線程,只有當(dāng)子彈消失才能啟動(dòng)該線程,并且為了防止屏幕刷新時(shí)效果不佳,為此采用了雙緩沖技術(shù),雙緩沖主要就是去重寫(xiě) update 方法,在更新窗體時(shí)把下一個(gè)要顯示的圖片整體26的畫(huà)到窗體上去。這樣更增加了游戲的友好性和趣味性。獎(jiǎng)勵(lì)道具將每一個(gè)道具設(shè)置成一個(gè)線程,設(shè)置兩個(gè)計(jì)數(shù)器 count 和 life,其中 life 的初值設(shè)為 100。count 從游戲開(kāi)始時(shí)就開(kāi)始計(jì)數(shù),用來(lái)控制道具的出現(xiàn),當(dāng)count 的值為 100 時(shí),采用隨機(jī)函數(shù)在屏幕上隨機(jī)產(chǎn)生一種道具。Life 用來(lái)控制道具的消失,當(dāng)?shù)谰叱霈F(xiàn)時(shí) life 就開(kāi)始做自減操作,當(dāng) life 的值為 0 時(shí),道具就從屏幕上消失。在道具消失之前坦克可以拾撿道具,撿到道具后坦克會(huì)有相應(yīng)的變化。 類(lèi) 模型圖 41 設(shè)計(jì)類(lèi)圖Monitor 主管著所有類(lèi)之間的協(xié)調(diào),決定何時(shí)死亡,何時(shí)轉(zhuǎn)入下一關(guān),及游戲進(jìn)入界面、游戲結(jié)束后的 Game over 字樣。它運(yùn)行在獨(dú)立的線程中,以恒定的頻率刷新畫(huà)面。刷新速度需大于 30/秒才能使畫(huà)面顯示因人眼的暫時(shí)停留效應(yīng)流暢運(yùn)行,在 Tank 類(lèi)中定義了所有敵軍坦克的行為和屬性,在 PlayerTank 類(lèi)中定義了玩家的坦克的行為和屬性。game over 字樣、生命值和關(guān)卡統(tǒng)計(jì)畫(huà)面也都需在此主邏輯中建立相應(yīng)對(duì)象。還需保存的變量有:游戲開(kāi)始時(shí)間、敵人的總數(shù)、屏幕上敵人的數(shù)量,游戲是否已成功結(jié)束或是否已死亡。27由于敵人將非一次性出現(xiàn)在屏幕上,同時(shí)出現(xiàn)的數(shù)量應(yīng)當(dāng)受控制。所以在構(gòu)造函數(shù)中,也應(yīng)當(dāng)分配對(duì)象的內(nèi)存空間。創(chuàng)建坦克時(shí),僅調(diào)用 Tank(int x,int y)實(shí)現(xiàn)。在構(gòu)造函數(shù)自己調(diào)用了線程的 start 后,程序?qū)㈤_(kāi)始循環(huán)運(yùn)行,直至跳出while 的循環(huán)。每次循環(huán)中將檢測(cè)是否死亡,屏幕上坦克的數(shù)量,是否該過(guò)關(guān)。KeyBoardLis 類(lèi)檢測(cè)用戶輸入的 keyPressed(KeyEvent e)函數(shù)中,當(dāng)按方向鍵時(shí),玩家坦克就將向不同的方向運(yùn)行;當(dāng)開(kāi)炮時(shí),就調(diào)用其 shoot()函數(shù),作出相應(yīng)的行為。在繪圖的過(guò)程中,除了要重繪坦克、地圖、子彈外,還要在左下角和左上角處繪出一個(gè)生命統(tǒng)計(jì)欄和關(guān)卡顯示欄。構(gòu)造函數(shù)中創(chuàng)建了每個(gè)坦克必須擁有的一顆子彈,這些子彈就將只跟隨自己的坦克調(diào)動(dòng)。 玩家坦克的功能屬性構(gòu)造函數(shù)中需要將坦克方向設(shè)置為向上,因?yàn)閯偝霈F(xiàn)時(shí)就是這樣的狀態(tài)。當(dāng)開(kāi)炮時(shí),需要聯(lián)系的還有自身坦克、地圖。這些都由坦克傳遞給子彈。因?yàn)樽訌検菍儆谔箍说模膶傩孕枰?dāng)前的坦克保持一致。接著將子彈貼顯示出來(lái)。最終調(diào)用其 start()開(kāi)始子彈自己的線程。子彈一旦開(kāi)始運(yùn)行,就脫離了當(dāng)前坦克的控制,直到其生命周期終止。無(wú)論子彈是屬于敵人還是玩
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1