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

正文內容

坦克大戰(zhàn)設計報告(編輯修改稿)

2025-08-30 11:05 本頁面
 

【文章內容簡介】 置為 startChoice。圖 游戲前的選項畫面 圖 使用說明畫面startChoice 繼承了接口 mandListener,這樣,就可以使用高級界面的Command 按鈕。繼承了 mandListener 的類必須擁有 mandAction(),以決定對按鍵采取什么樣的行為。即按鈕事件觸發(fā)后需執(zhí)行的函數。在設置好mandlistener 后,需要調用 setCommandListener()以將按鈕事件激活。鍵盤事件中,可用 getCommandType()返回的 Command 類型來確定選擇的是什么按鈕。startChoice 繼承了 List 類,用于顯示列表選項,使用其 append()函數可將選項加入到列表中。getSelectIndex()可檢測到選擇的項目的序號,序號從 0 開始遞增。其中,當選擇第一項時將載入正式游戲畫面 BattleCanvas 類,第二項將顯示幫助信息( 效果如圖 ),第三項則是重新顯示與作品和作者相關的 logo 畫面。 主游戲邏輯及其涉及到的若干類 BattleCanvas 主管著所有類之間的協(xié)調,決定何時死亡,何時分配新的敵人,及控制敵人出現處的閃光圖標、游戲結束后的動態(tài) Gameover 字樣。它運行在獨立的線程中,以恒定的頻率刷新畫面。刷新速度需大于 30/秒才能使畫面顯示因人眼的暫時停留效應流暢運行。本程序設置為 20 毫秒。其主邏輯如圖 44 所示。程序中建立了另外的兩個類,分別表述了敵人坦克和玩家坦克的功能。它們分別為:EnemySprite 和 UserSprite。這兩個類均在 BattleCanvas 中建立了對象,以便進行統(tǒng)一調度。BattleCanvas 包括了 LayerManager,這樣所有靜態(tài)和動態(tài)的圖象都不需要手動刷新,只需要在 LayerManager 中加入所有的需控制的元素,再統(tǒng)一由 LayerManager 刷新即可。因此,有必要在其中創(chuàng)立一個LayerManager 的對象。 其他,如 Sprite 類的 gameover 字樣、記分統(tǒng)計畫面也都需在此主邏輯中建立相應對象。還需保存的變量有,游戲開始時間、結束時間(用于統(tǒng)計分數) 、敵人的總數、屏幕上敵人的數量、下一個敵人需要出現的位置(總共允許在三個不同的位置出現,分別位于屏幕的左、中、右方) 、游戲是否已成功結束或是否已死亡。 構造函數中,需初始化地圖。地圖實際即為 TiledLayer 的一個對象,可調用 setCell 設置其具體的圖象格內容。地圖由外部文件讀入。外部文件分別命名為 level*.png,利用 MIDP 中唯一獲取外部文件為程序內資源的getResourceAsStream()函數將地圖文件讀入程序。在創(chuàng)建了 InputStream 類的map 對象后,使用 read()函數可將流中的下一個字節(jié)讀出,并返回此字節(jié)代表的整數。每個整數代表一種障礙物。用二維循環(huán)將讀出的每個整數,通過setCell()將整幅地圖畫出即可。地圖文件可用十六進制的文本編輯器生成,如本程序使用的 Ultraedit。繪出地圖后,可用 LayerManager 的 append()將地圖放置在第一層。這是很有必要的。因為地圖上的障礙物之一——草,在坦克運行中時是必須處于坦克的上層的,否則將失去真實性。為此,地圖必須首先載入。由于敵人將依次出現在屏幕上,同時出現的數量應當受到控制。本程序設置為 6。所以在構造函數中,也應當分配 6 個 EnemySprite 對象的內存空間。構造坦克時,將把坦克的 png 圖片作為參數傳遞給 EnemySprite 和UserSprite,BattleCanvas 中創(chuàng)建坦克僅調用 createEnemy()和 createUser()實現。在構造函數自己調用了線程的 start 后,程序將開始循環(huán)運行,直至跳出while 的循環(huán)。每次循環(huán)中將檢測是否死亡,屏幕上坦克的數量,是否該過關統(tǒng)計分數,檢測用戶輸入的按鍵、重繪整個屏幕及回收垃圾內存(Garbage Collection)。當敵人坦克完全死亡時(enemyNum 為 0),需調用 System 類的currentTimeMillis()賦值給結果的時間。接著調用 setCurrent()顯示統(tǒng)計分數的畫面,為了進入下一關,統(tǒng)計畫面只是停留四秒,就重新轉回 BattleCanvas 畫面。當然,如果當前已是最后一關,就不會再轉回。進入下一關時,許多變量需要重新被初始化,如地圖的繪制、敵人出現位置的重置、敵人的數量、玩家坦克的當前位置。如果游戲未結束,則需判斷屏上坦克是否已小于還剩坦克的總數,如果是這樣,就需要再提供一輛坦克。提供新坦克之前,在屏幕上設置了一個專用指圖 游戲結束的畫面示的閃光符號,它繼承了 Sprite,運行在單獨的線程中。以在兩秒鐘內反復閃現兩次為一個生命周期。當它閃光完畢后,敵人就會從閃光位置出現。這樣可提示玩家具體敵人將在什么時刻出現,以便做好準備。閃光位置設置了三處坐標,由于敵人不能同時出現,便設置了 enemyOutDelay 的倒數計時,每次屏幕刷新會減少一次計數,直到為 0 時就準備一輛坦克。本程序設置的兩次坦克出現的最小間隔為 2 秒。如果玩家已經死亡,就需要使用 LayerManager 的 insert()將 gameover 字樣的圖片覆蓋到最上層,效果如圖 所示。在檢測用戶輸入的 input()函數中,當按方向鍵時,玩家坦克就將向不同的方向運行,這調用了 UserSprite 的 go()函數;當開炮時,就調用其 fire()函數,作出相應的行為。在出現正式畫面前設置了一個 loading state*字樣的單獨屏幕,調用了loadinglevel()函數,并停滯了 1500 毫秒,提示用戶做好準備。效果如圖 所示。在繪圖的 render()過程中,除了要重繪坦克、地圖、子彈外,還會在右邊空白處繪出一個生命統(tǒng)計欄。并反復使用 Graphics 的 drawLine()、drawImage()繪畫出一個三維的效果,增強視覺感。該三維欄的上方為白色,下方為黑色,就創(chuàng)造了立體感。在每次刷新繪圖頁面時,應使用 GameCanvas 的 flushGraphics()將屏幕后臺的緩沖區(qū)內的圖象刷新到前臺來。在允許敵人出現前,需要檢測給即將出現的敵人分配一個數組序號。在程圖 裝載中的畫面序中調用了 getNullEnemyIndex()進行測試,當返回為1 時說明沒有序號可以分配,否則,將返回空的序號。游戲的最終運行狀態(tài)如圖 所示。 坦克的共同行為在 TankSprite 中定義了所有坦克( 包括敵方坦克和玩家坦克 )的共同行為和屬性。EnemeySprite 和 UserSprite 都繼承了該類以簡化結構。在transformDirection[]中定義了坦克四個方向分別應將原始圖片旋轉的角度,分別為 TRANS_NONE,TRANS_ROT90,TRANS_ROT180,TRANS_ROT270,以便在后來的 setTransform()中將這些常量代入。構造函數中創(chuàng)建了每個坦克必須擁有的一顆子彈,這些子彈就將只跟隨自己的坦克調動。相關代碼:private static int transformDirection[]= { TRANS_NONE,TRANS_ROT90,TRANS_ROT180,TRANS_ROT270 }。 private int currentDirection=0。 //if no direction defined,it will //stay where it is. public BulletSprite(Image image) throws IOException{ super(image)。 defineReferencePixel(1, 3)。 //center and bottom of the bullet }圖 游戲運行中的模擬器畫面為了能提前預測碰撞,調用了 defineCollisionRectangle(0,1,11,12)將碰撞矩形向前設置了一個象素,具體原理見第二章。在 setBulletDirection()中,將根據坦克當前的方向確定子彈出膛后的方向,其中 setRefPixelPosition()將子彈的參考點設置在其未變形狀態(tài)的底部,setXY()將其放置到炮口的位置,setTransform() 將其圖片方向轉到需要使用的位置。canPass()函數將返回坦克是否能夠向前前進,考慮到的因素有邊界、障礙物。它返回一個 boolean 值,提供給 go()函數,做進一步的判斷。getTileIndex()將檢測傳遞來的象素處是什么類型的障礙物,它將象素除以 8(即障礙物的象素寬度) ,取整,再通過 getCell()得到。在得到障礙物屬性后,判斷其序號是否與草相同,或是否為空(序號為 0)。因為所有的障礙物中只有草不會阻礙坦克的向前運行。 玩家坦克的功能屬性 構造函數中需要將坦克方向設置為向上,因為剛出現時就是這樣的狀態(tài)。當開炮時,調用 BulletSprite 的 setLayerManager()將子彈與 layerManager 聯系起來。需要聯系的還有自身坦克、地圖。這些都由坦克傳遞給子彈。因為子彈是屬于坦克的,它的屬性需要跟當前的坦克保持一致。接著使用 append()將子彈貼到 layerManager 上顯示出來。最終調用其 start()開始子彈自己的線程。子彈一旦開始運行,就脫離
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1