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

正文內(nèi)容

基于j2me的java游戲坦克大戰(zhàn)的開發(fā)畢業(yè)設(shè)計論文(參考版)

2025-06-21 14:39本頁面
  

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