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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于java的坦克大戰(zhàn)軟件程序設(shè)計(jì)(文件)

2024-12-28 09:51 上一頁面

下一頁面
 

【正文】 和具體實(shí)現(xiàn) 游戲進(jìn)入前的面板設(shè)計(jì)分析 每個(gè) MIDlet 程序都必須有一個(gè)主類,該類必須繼承自 MIDlet。運(yùn)行畫面如圖所示。Alert 對象用于顯示提示、警告等告之用戶信息的臨時(shí)閃現(xiàn)的屏幕,它可作為setCurrent的參數(shù),提前顯示在最終需要顯示的屏幕前。 效果如圖 32所示。 在設(shè)置好mandlistener 后,需要調(diào)用 setCommandListener()以將按鈕事件激活 。 其中,當(dāng)選擇第一項(xiàng)時(shí)將載入正式游戲畫面 BattleCanvas 類,第二項(xiàng)將顯示幫助信息 , 第三項(xiàng)則是重新顯示 與作品和作者相關(guān)的 logo 畫面。 本程序設(shè)置為 20毫秒。這兩個(gè)類均在 BattleCanvas 中建立了對象,以便進(jìn)行統(tǒng)一調(diào)度。 還需保存的變量有,游戲開始時(shí)間、結(jié)束時(shí)間(用于統(tǒng)計(jì)分?jǐn)?shù))、敵人的總數(shù)、屏幕上敵人的數(shù)量、下一個(gè)敵人需要出現(xiàn)的位置(總共允許在三個(gè)不同的位置出現(xiàn),分別位于屏幕的左、中、右方)、游戲是否已成功結(jié)束或是否已死亡 。外部文件分別命名為 level*.png,利用 MIDP 中唯一獲取外部文件為程序內(nèi)資源的getResourceAsStream()函數(shù)將地圖文件讀入程序。 地圖文件可用十六進(jìn)制的文本編輯器生成,如本程序使用的 Ultraedit。為此,地圖必須首先載入。 構(gòu)造坦克時(shí),將把坦克的 png 圖片作為參數(shù)傳遞給 EnemySprite 和 UserSprite,BattleCanvas 中創(chuàng)建坦克僅調(diào)用 createEnemy()和 createUser()實(shí)現(xiàn)。 接著調(diào)用 setCurrent()顯示統(tǒng)計(jì)分?jǐn)?shù)的畫面 ,為了進(jìn)入下一關(guān),統(tǒng)計(jì)畫面只是停留四秒,就重新轉(zhuǎn)回 BattleCanvas畫面。提供新坦克之前,在屏幕上設(shè)置了一個(gè)專用指示的閃光符號 ,它繼承了 Sprite,運(yùn)行在單獨(dú)的線程中。 閃光位置設(shè)置了三 處坐標(biāo),由于敵人不能同時(shí)出現(xiàn),便設(shè)置了 enemyOutDelay 的倒數(shù)計(jì)時(shí),每次屏幕刷新會減少一次計(jì)數(shù),直到為 0時(shí)就準(zhǔn)備一輛坦克。 在檢測用戶輸入的 input()函數(shù)中,當(dāng)按方向鍵時(shí),玩家坦克就將向不同的方向運(yùn)行,這調(diào)用了UserSprite 的 go()函數(shù) ;當(dāng)開炮時(shí),就調(diào)用其fire()函數(shù),作出相應(yīng)的行為。并反復(fù)使用 Graphics 的 drawLine()、 drawImage()繪畫出一個(gè)三維的效果,增強(qiáng)視覺感。在程序中調(diào)用了 getNullEnemyIndex()進(jìn)行測試,當(dāng)返回為 1 時(shí)說明沒有序號可以分配,否則,將返回空的序號。 在transformDirection[]中定義了坦克四個(gè)方向分別應(yīng)將原始圖片旋轉(zhuǎn)的角度,分別為 TRANS_NONE,TRANS_ROT90,TRANS_ROT180,TRANS_ROT270,以便在后來的setTransform()中將這些常量代入。 canPass()函數(shù)將返回坦克是否能夠向前前進(jìn),考慮到的因素有邊界、障礙物。因?yàn)樗械恼系K物中只有草不會阻礙坦克的向前運(yùn)行。這些都由坦克傳遞給子彈。子彈一旦開始運(yùn)行,就脫離了當(dāng)前坦克的控制,直到其生命周期終止。在 setShootCheck()的參數(shù)中,傳給子彈的是敵人的數(shù)組,子彈的對象就被確定了。amp。 當(dāng)可以行走時(shí),就在當(dāng)前方向的坐標(biāo)上增加或減少一個(gè)象素。事實(shí)上,敵人坦克此時(shí)并沒有阻礙玩家前進(jìn)。 其主要功能流程圖見圖 48。 setEnemyShootCheck()函數(shù)與 UserSprite 中的一樣,設(shè)置了攻擊的對象,并且此函數(shù)將繼續(xù)把參數(shù)傳遞給自身的子彈,以便子彈可以識別攻擊對象。 return (())%4+1。 return ((())%4)*50。這樣,它們才可以自動檢測自己是否與同伴發(fā)生了碰撞,以便采取躲避、轉(zhuǎn)向等行動。語句將避免檢測到自己,永遠(yuǎn)返回真。如果一出現(xiàn),出口就被堵死,顯然,不能永遠(yuǎn)不出現(xiàn),那就應(yīng)采取其他的辦法,否則兩輛坦克將因?yàn)槎继幵谂鲎矤顟B(tài)中而無法移出。如果剛出現(xiàn),就直接走一步,具體如何行走將在 go()函數(shù)中決定,并且此 go()與 UserSprite中的有所區(qū)別。其他的隨機(jī)值也應(yīng)當(dāng)重置。 子彈的 運(yùn)行和 控制 開始 是否出界 是否擊中物體 將可以消除的障礙物消除 玩家的子彈嗎 是否與任何敵人的子彈碰撞 是否擊中任何敵人 敵人的子彈嗎? 是否與玩家的子彈碰撞 是否擊中玩家 結(jié)束 N Y N Y Y N 子彈抵消 Y 消除敵人 Y N N N N N 消除玩家 子彈抵消 圖 49 子彈運(yùn)行的主要功能流程圖 Y Y Y 26 子彈繼承了 Runnable,運(yùn)行在獨(dú)立的線程中。 checkHit(int x,int y)調(diào)用了 getTileIndex(x,y)獲取當(dāng) 前子彈擊中的是什么障礙物,如果返回了 false 就表示沒有擊中任何東西。擊中鋼筋時(shí), 將只產(chǎn)生爆炸效果。 (x =5) amp。 (y 171))作為循環(huán)的條件可以控制子彈出界的范圍。在隨后的checkHit(RIGHT)調(diào)用中,它將檢測它是否在 x+3點(diǎn),即 160 點(diǎn)擊中了某個(gè)障礙物, 但是 160/8=20。如果為真,就繼續(xù)檢測碰撞上了什么樣的物體。 這根據(jù)子彈的來源分為兩種情況。如果玩家生命已死亡殆盡,就需要在進(jìn)行以上操作的同時(shí)將玩家坦克的位置放置到 屏幕外的部分。 這將會是很荒唐的場面。 采用的是手機(jī)專用的一種簡化的數(shù)據(jù)庫 RMS。首先將循環(huán)調(diào)用(NoName) 和 (0),將記錄中的條目的用戶名置為NoName,所有的分?jǐn)?shù)置為 0。其中 () ,score=()將分別讀出用戶名和分?jǐn)?shù),然而前者讀出后并不加以利用,因?yàn)樵诒容^分?jǐn)?shù)的過程中,并不需要用到用戶名。并將所有相關(guān)的 InputStream 的繼承類用close()關(guān)閉,以便釋放內(nèi)存資源。 由于 ScoreScreen 類繼承了 Canvas,所以必須有 paint()函數(shù)。因此完成的時(shí)間越短,得到的分?jǐn)?shù)就越高。 效果如圖 310,僅停留 4 秒種,供用戶快速參考后便會跳入下一關(guān)的起始畫面 。 本章小結(jié) : 第 三 章中 按照相應(yīng)的步驟 描述了所有關(guān)鍵類的具體算法實(shí)現(xiàn),引用了相關(guān)函數(shù)進(jìn)行了具體流程的解釋,并對原理稍復(fù)雜的函數(shù)做了詳細(xì)的分析。 但 幾乎每一個(gè)計(jì)算機(jī) 程序都會有這樣那樣的 不足,尤其是 未 經(jīng)過精心維護(hù)的非商業(yè)軟件。 2. 敵人的人工智能 變化較少,不夠理想 。 5. 最好有接寶物的設(shè)置 ,增強(qiáng)可玩性 。 3. 當(dāng)坦 克在草叢中時(shí),對方坦克發(fā)出的子彈不能將其擊毀。 在數(shù)據(jù)庫、單片機(jī)、 各種應(yīng)用軟件和游戲中,我仍覺得對游戲的設(shè)計(jì)有極大的熱情 。 相比一些數(shù)據(jù)庫軟件,游戲的設(shè)計(jì)有很多人情色彩和藝術(shù)思想的發(fā)揮, 正式商業(yè)的軟件的人性化界面和各個(gè)游戲間迥異的 結(jié)構(gòu)每每會讓人有去開發(fā)的沖動。憑著探索新知識的熱情 ,我選擇了該題目。Reilly publish, 2021 [7] Wireless Tool Kit, MIDP profile,Sun Micro. [8] Developing Games in Java, David Brackeen, New Riders Publishing [9] Game Architecture and Design, Andrew Rollings、 Dave Morris,Coriolis Group Books [10] [11] [12] [13] Borland Jbuilder9 Help documents,Borland corporation. [14] Creating 2D Action Games with the Game API, Sun 公司網(wǎng)頁中的Technical Articles and Tips, Jonathan Knudsen ,及其源代碼。 原先認(rèn)為不可能的事,我發(fā)現(xiàn),如果有不畏困難的信心和 肯鉆研的勇氣,就一定會完成,甚至達(dá)到意想不到的效果。 成功的游戲融合了三維運(yùn)算、人工智能、 音效處理等計(jì)算機(jī)多媒體的精華部分。 大學(xué)期間做過銀 行取款機(jī)、圖書館管理程序等簡單的數(shù)據(jù)庫管理系統(tǒng) 的課程設(shè)計(jì) , 思想大致相似,變化范圍有限,沒有太多自己可發(fā)揮的余地。雖然大學(xué)期間在 TC++下設(shè)計(jì)過一個(gè)俄羅斯方塊的游戲,并且 經(jīng)過反復(fù)的調(diào)試修改也達(dá)到了一定的精確性,但接手這個(gè)題目時(shí)仍感覺十分棘手。 已經(jīng)解決的重要 Bug: 1. 當(dāng)發(fā)出子彈到達(dá)邊界并同時(shí)還在草叢中時(shí)會拋出數(shù)組邊界異常。 4. 由 于每次子彈發(fā)射和每次坦克的移動的一個(gè)象素都會對所有坦克和所有子彈進(jìn)行一次循環(huán)檢查,并由于同時(shí)開的線程比較多,使得本來運(yùn)行效率就不高的 KVM 運(yùn)行異常緩慢。 本游戲程序?qū)τ诔跎娲祟I(lǐng)域的畢業(yè)設(shè)計(jì)課題來說,尤其在開始初期,感覺邏輯復(fù)雜,難以控制,因此至今還有一些未能解決的 bug。 第 四 章 總 結(jié) 本程序 的 總結(jié)和展望 本程序設(shè)計(jì)實(shí)現(xiàn)了手機(jī)上以 J2ME 為平臺的坦克大戰(zhàn)游戲的開發(fā) ,采用從外部文件讀取地圖 、自動控制敵人坦克運(yùn)行的方式進(jìn)行控制,具有一定的可玩性和復(fù)雜性。這是低級繪圖屏幕與高級用戶界面相結(jié)合的一個(gè)應(yīng)用。 如果通關(guān)或完全死亡后,將提示用戶按 pass按鈕跳過該屏。時(shí)間將根據(jù) BattleCanvas 中的 beginTime 的差除以 1000 后取整決定。它將所有數(shù)據(jù)庫中的數(shù)據(jù)依次讀出,再使用drawString 以固定的格式寫出。 insertRecord()可以將當(dāng)前剛剛得到的最高成績記錄到數(shù)據(jù)庫的指定位置,將最后一名排擠出局。 Score 將被循環(huán)調(diào)用 10 次,將記錄中的 10 個(gè)最高記錄初始化。 (score,true)創(chuàng)建一個(gè)名為“ score”的數(shù)據(jù)庫。因?yàn)樵诎l(fā)炮期間,坦克的再次發(fā)炮的功能是被鎖定的。只是用戶看不見而已。如果沒有和子 彈發(fā)生碰撞,就檢測是否與敵人碰撞,發(fā)生碰撞時(shí),將敵人從 layerManager 中移除,并置為 null,產(chǎn)生爆炸效果,敵人數(shù)量減少一位,敵人屏幕上數(shù)量減少一位。 如果擊中了某樣物體,那么 checkHit 自然會處理,子彈的生命周期結(jié)束,以 break 退出循環(huán)。此時(shí) ArrayOutOfBoundException 異常就會拋出,程序終止運(yùn)行。它們反映了象素級處理的技巧。 (y =5) amp。 在線程的循環(huán)中 while ( (x 155) amp。爆炸效果由 tileExplode(x,y)根據(jù)需要爆炸的坐標(biāo)點(diǎn)生成,其中將一個(gè) Sprite 圖片在界面上閃現(xiàn) 150 毫秒。它標(biāo)識了該子彈是屬于 玩家的,還是敵人的,這樣可以控制子彈在脫離坦克管束后的運(yùn)行狀態(tài)中的行為。 在運(yùn)行在某個(gè)方向上,當(dāng)確定為 canPass時(shí),應(yīng)再檢測是否為 Beginner。發(fā)炮后應(yīng)立即重新賦值給隨機(jī)發(fā)炮數(shù),以便重新倒數(shù)計(jì)算。(由boolean 值 destroyed 決定 ) 。 因?yàn)椴恍枰M(jìn)行預(yù)先檢測。 一個(gè)循環(huán)將依據(jù)敵人的序號查找 5次。這樣就相當(dāng)于允許在某一個(gè)方向運(yùn)行 0~3秒鐘的時(shí)間。將他們代入需要使用方向的函數(shù)中就可以使用了。 getRandomDirection()以當(dāng)前系統(tǒng)時(shí)間作為種子,調(diào)用了 Random 類的 nextInt()產(chǎn)生一個(gè)隨機(jī)的整數(shù),此整數(shù)取除 4 的余數(shù)的絕對值作為隨機(jī)的方向。因?yàn)閿橙说倪\(yùn)行是自動的,需要有設(shè) 定的程序讓它可自己控制,而不像 UserSprite 完全通過 每次輸入的鍵盤信號來做出反映。 當(dāng)然,在設(shè)置完成后,必須將 將檢測區(qū)域設(shè)置回原先的狀態(tài),否則敵人在往后自己的檢測中將發(fā)生錯(cuò)誤。有一點(diǎn)非常重要:在檢測前,需要將敵人的檢測矩形區(qū)域設(shè)置為與原來圖片一樣大小。 canPass()檢測是否有障礙物及是否到邊界。他們可被外部調(diào)用, 以 取得生命值、死亡記數(shù)、重置位置。在玩家坦克發(fā)射的子彈中,就必須將攻擊對象設(shè)置為
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1