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

正文內(nèi)容

基于j2me的java游戲坦克大戰(zhàn)的開(kāi)發(fā)畢業(yè)設(shè)計(jì)論文-文庫(kù)吧資料

2025-06-24 14:39本頁(yè)面
  

【正文】 ()函數(shù)中,當(dāng)按方向鍵時(shí),玩家坦克就將向不同的方向運(yùn)行,這調(diào)用了UserSprite的go()函數(shù);當(dāng)開(kāi)炮時(shí),就調(diào)用其fire()函數(shù),作出相應(yīng)的行為。如果玩家已經(jīng)死亡,就需要使用LayerManager的insert()將gameover字樣插入到最上層,以免被其他物體覆蓋。閃光位置設(shè)置了三處坐標(biāo),由于敵人不能同時(shí)出現(xiàn),便設(shè)置了enemyOutDelay的倒數(shù)計(jì)時(shí),每次屏幕刷新會(huì)減少一次計(jì)數(shù),直到為0時(shí)就準(zhǔn)備一輛坦克。當(dāng)它閃光完畢后,敵人就會(huì)從閃光位置出現(xiàn)。提供新坦克之前,在屏幕上設(shè)置了一個(gè)專用指示的閃光符號(hào),它繼承了Sprite,運(yùn)行在單獨(dú)的線程中。進(jìn)入下一關(guān)時(shí),許多變量需要重新被初始化,如地圖的繪制、敵人出現(xiàn)位置的重置、敵人的數(shù)量、玩家坦克的當(dāng)前位置。接著調(diào)用setCurrent()顯示統(tǒng)計(jì)分?jǐn)?shù)的畫(huà)面,為了進(jìn)入下一關(guān),統(tǒng)計(jì)畫(huà)面只是停留四秒,就重新轉(zhuǎn)回BattleCanvas畫(huà)面。每次循環(huán)中將檢測(cè)是否死亡,屏幕上坦克的數(shù)量,是否該過(guò)關(guān)統(tǒng)計(jì)分?jǐn)?shù),檢測(cè)用戶輸入的按鍵、重繪整個(gè)屏幕及回收垃圾內(nèi)存(Garbage Collection)。構(gòu)造坦克時(shí),將把坦克的png圖片作為參數(shù)傳遞給EnemySprite和UserSprite,BattleCanvas中創(chuàng)建坦克僅調(diào)用createEnemy()和createUser()實(shí)現(xiàn)。本程序設(shè)置為6。為此,地圖必須首先載入。這是很有必要的。地圖文件可用十六進(jìn)制的文本編輯器生成,如本程序使用的Ultraedit。每個(gè)整數(shù)代表一種障礙物。外部文件分別命名為level*.png,利用MIDP中唯一獲取外部文件為程序內(nèi)資源的getResourceAsStream()函數(shù)將地圖文件讀入程序。地圖實(shí)際即為T(mén)iledLayer的一個(gè)對(duì)象,可調(diào)用setCell設(shè)置其具體的圖象格內(nèi)容。還需保存的變量有,游戲開(kāi)始時(shí)間、結(jié)束時(shí)間(用于統(tǒng)計(jì)分?jǐn)?shù))、敵人的總數(shù)、屏幕上敵人的數(shù)量、下一個(gè)敵人需要出現(xiàn)的位置(總共允許在三個(gè)不同的位置出現(xiàn),分別位于屏幕的左、中、右方)、游戲是否已成功結(jié)束或是否已死亡。因此,有必要在其中創(chuàng)立一個(gè)LayerManager的對(duì)象。這兩個(gè)類均在BattleCanvas中建立了對(duì)象,以便進(jìn)行統(tǒng)一調(diào)度。程序中建立了另外的兩個(gè)類,分別表述了敵人坦克和玩家坦克的功能。本程序設(shè)置為20毫秒。它運(yùn)行在獨(dú)立的線程中,以恒定的頻率刷新畫(huà)面。其中,當(dāng)選擇第一項(xiàng)時(shí)將載入正式游戲畫(huà)面BattleCanvas類,第二項(xiàng)將顯示幫助信息(效果如圖33),第三項(xiàng)則是重新顯示與作品和作者相關(guān)的logo畫(huà)面。startChoice繼承了List類,用于顯示列表選項(xiàng),使用其append()函數(shù)可將選項(xiàng)加入到列表中。在設(shè)置好mandlistener后,需要調(diào)用setCommandListener()以將按鈕事件激活。繼承了mandListener的類必須擁有mandAction(),以決定對(duì)按鍵采取什么樣的行為。效果如圖32所示。但是當(dāng)顯示的畫(huà)面元素超過(guò)一屏大小時(shí),將自動(dòng)轉(zhuǎn)換為永久狀態(tài)。Alert對(duì)象用于顯示提示、警告等告之用戶信息的臨時(shí)閃現(xiàn)的屏幕,它可作為setCurrent的參數(shù),提前顯示在最終需要顯示的屏幕前。在startApp()函數(shù)中,隨即調(diào)用了Displable的setCurrent()函數(shù)將當(dāng)前屏幕設(shè)置為startChoice。運(yùn)行畫(huà)面如圖31所示。)、結(jié)束的函數(shù)。它控制著整個(gè)程序的運(yùn)行,并且可以通過(guò)相應(yīng)函數(shù)從程序描述文件中獲取相關(guān)的信息。目前流行的Obfuscator有RetroGuard等?;煜?,體積大約能減少25%,這對(duì)當(dāng)前費(fèi)用較貴的無(wú)線網(wǎng)絡(luò)傳輸是有一定意義的。 混淆器的作用不僅僅是保護(hù)代碼,它也有精簡(jiǎn)編譯后程序大小的作用。由此引入混淆器的概念。目前流行的如decode,JAD等反編譯工具可以以很快的速度生成源文件。它包括了所有的信息。將PNG格式的小分辨率圖象合并在一張大的高分辨率圖象中,由于減少了chunks,將比合并前的總大小減少許多。第二是減少?gòu)?fù)雜的程序結(jié)構(gòu),為一些共同的行為建立一個(gè)抽象類(Abstract Class) 來(lái)表示繼承的子類的共通性。在應(yīng)用程序內(nèi),對(duì)于所建立的類、接口、方法及變量名而言,都需要賦予一個(gè)識(shí)別的名稱,所命名的名稱每多一個(gè)字符就會(huì)在類文件內(nèi)多產(chǎn)生一個(gè)字節(jié),對(duì)于一個(gè)較復(fù)雜的應(yīng)用程序而言就會(huì)增加為數(shù)不小的數(shù)據(jù)量。在這樣的情況下需要在不影響原有功能的情況下適當(dāng)?shù)目s減JAR文件的大小,除了可以克服內(nèi)存空間的限制外,也能大幅度縮短下載的時(shí)間(費(fèi)用也降低了),勢(shì)必會(huì)有更多的人愿意下載所開(kāi)發(fā)的程序。打印到屏幕上時(shí),記錄ID號(hào)即為排名,因此將顯示三項(xiàng)數(shù)據(jù)。返回的getString可以將名字輸送給字節(jié)流。每次有新的更高的記錄就會(huì)插入進(jìn)相應(yīng)的位置,將最低一名排擠出記錄。 本程序中主要存放在永久區(qū)的內(nèi)容為用戶得到的最高分?jǐn)?shù)的記錄。利用輸入輸出流可以寫(xiě)入及讀取不同數(shù)據(jù)類型的數(shù)據(jù),做法是在寫(xiě)入數(shù)據(jù)時(shí)先將一個(gè)DataOutputStream數(shù)據(jù)流對(duì)象串接到一個(gè)ByteArrayOutStream數(shù)據(jù)流對(duì)象,然后再依字段的數(shù)據(jù)類型用writeInt()、writeBoolean()等方法寫(xiě)入,最后把ByteArrayOutputStream內(nèi)的元素?cái)?shù)據(jù)寫(xiě)入record中。2.利用輸入/輸出流這一種方法較上一種復(fù)雜,但是較為實(shí)用。將所有要存放的數(shù)據(jù)用字符串表示,但是在字段和字段之間以一個(gè)特殊的符號(hào)作為分隔。然而讀取或?qū)懭氲淖止?jié)數(shù)組都只能代表一個(gè)字段的信息,如果需要讀取或?qū)懭攵鄠€(gè)字段就必須要將數(shù)據(jù)轉(zhuǎn)換成字節(jié)信息,并且提供適當(dāng)?shù)臋C(jī)制來(lái)分隔這些信息。第一項(xiàng)記錄的ID是1,其后的每個(gè)記錄ID遞增。開(kāi)發(fā)者可以利用InputStream的派生類DataInputStream、DataOutputStream以及ByteArrayInputStream、ByteArrayOutputStream將不同種類的數(shù)據(jù)類型打包,以字節(jié)流的形式發(fā)送和接收。Record store 每次被修改后都會(huì)自動(dòng)在其屬性上附加上時(shí)間戳,這為同步化引擎和程序的控制都極為有效。訪問(wèn)模式允許私有使用或訪問(wèn)。同一個(gè)包內(nèi)的MIDlets可以直接互相訪問(wèn)它們的記錄集,不同包內(nèi)也可產(chǎn)生共享,但這需要有包的授權(quán)屬性決定。在一個(gè)MIDlet suite包里的所有MIDlet都允許創(chuàng)建多個(gè)記錄集,只要它們賦有不同的名稱。RMS是專門(mén)針對(duì)移動(dòng)設(shè)備的服務(wù)的。很顯然,手機(jī)上的數(shù)據(jù)庫(kù)系統(tǒng)不可能有PC上的強(qiáng)大功能。對(duì)磚墻將有能力將其擊毀,使之在畫(huà)面上消失;對(duì)水泥鋼筋將不能發(fā)生作用,子彈也不能通過(guò);對(duì)于河流,坦克不可以通過(guò),但子彈可以;對(duì)于草叢,子彈和坦克都可以通過(guò)。這樣較多的運(yùn)算也將不可避免的耗費(fèi)大量CPU時(shí)間。敵人之間顯然,如上已經(jīng)提過(guò),不需要檢測(cè),但敵人與玩家之間應(yīng)當(dāng)可以互相消除子彈,以便在狹窄的路口中仍有存活的機(jī)會(huì)。如果來(lái)自玩家,則每一步需掃描所有的敵方坦克,檢查是否發(fā)生碰撞,這可能會(huì)花費(fèi)不少的CPU時(shí)間。子彈使用的是象素級(jí)的碰撞檢測(cè),因?yàn)樽訌椀膱D片形狀不規(guī)則,如果使用矩形碰撞檢測(cè),將有可能在子彈尚未接觸到物體時(shí)就已返回碰撞的真值。子彈所需要完成的任務(wù)有:它是一個(gè)繼承了Runnable虛類的可運(yùn)行單獨(dú)線程的對(duì)象。本程序中并未使用過(guò)多復(fù)雜的人工智能算法,如有時(shí)間,將可能再此方面加以完善。坦克之間由以上道理也不會(huì)發(fā)生重疊,但當(dāng)某坦克正從上方生成而正巧有另一輛阻礙在其生成點(diǎn)處,這將導(dǎo)致不可避免的重合。本程序設(shè)置為:當(dāng)碰撞到障礙物或邊界時(shí)立即轉(zhuǎn)向,但碰到玩家坦克時(shí)需要有一個(gè)等待的時(shí)間,這個(gè)時(shí)間由碰撞前隨機(jī)取得的在某方向上的持續(xù)行走步數(shù)決定,當(dāng)發(fā)生坦克間碰撞時(shí),此隨機(jī)數(shù)將在下一次循環(huán)前減少為原來(lái)的2/3,這樣就實(shí)現(xiàn)了加快轉(zhuǎn)向的時(shí)間,避免死鎖在一個(gè)方向上靜止的停留過(guò)長(zhǎng)的時(shí)間。需要指出的是,當(dāng)發(fā)生阻礙不能在不變方向的情況下繼續(xù)行走時(shí),并不一定立即需要采取轉(zhuǎn)向的對(duì)策。敵方坦克由于需要具有一定的智能性,以便對(duì)玩家攻擊,使之具有一定的可玩性。這樣,就可以提前一步判斷。為了提前預(yù)知碰撞,可以將所有坦克的碰撞范圍設(shè)定為一個(gè)比坦克圖片稍大一些的矩形,此矩形僅在坦克前方比坦克圖形多出一個(gè)象素。然而不能僅僅將用戶坦克作為其Sprite參數(shù)傳遞給敵人的類進(jìn)行判斷。敵方按照規(guī)則不能和用戶坦克重合,則它每行走一步就需要把用戶坦克掃描一次,判斷其是否碰撞到了用戶的坦克。這保證了快速的按鍵和釋放也會(huì)被循環(huán)所捕捉。將以位的形式返回鍵盤(pán)上所有鍵的按與釋放的狀態(tài),當(dāng)bit為1時(shí),鍵就是被按下的狀態(tài),為0時(shí)則為釋放狀態(tài)。對(duì)此,針對(duì)游戲的開(kāi)發(fā),Game包提供的鍵盤(pán)狀態(tài)功能將顯得十分有效。在某些不支持keyRepeat功能的設(shè)備上,反復(fù)執(zhí)行的按鍵,比如發(fā)射子彈,將不能因?yàn)殚L(zhǎng)時(shí)間按壓而自動(dòng)重復(fù),這樣就需要用戶高頻率的手動(dòng)擊鍵,這在操縱空間非常有限的移動(dòng)設(shè)備上是非常困難的。Canvas類中采取響應(yīng)鍵盤(pán)事件的方法,每次執(zhí)行周期時(shí)會(huì)讀取keyPressed函數(shù)中需執(zhí)行的代碼。J2ME中并沒(méi)有J2SE中的File類,獲取外部文件的手段很有限,僅僅在Class類中提供了一個(gè)getResourceAsStream函數(shù),將外部文件獲取為輸入流,再由InputStream的繼承類讀出。地圖背景分為20*22個(gè)圖象格,每個(gè)格使用一個(gè)字節(jié)表示其中的障礙物,圖象文件存儲(chǔ)在外部文件中,以16進(jìn)制的整數(shù)串表示,因此每個(gè)地圖的大小為固定的440字節(jié)。本程序中的地圖即為游戲背景。一塊整圖可被分割成等大小的圖象格,每塊格有其對(duì)應(yīng)的序號(hào),按照行列遞增。該類使不需要高分辨率的圖象就能創(chuàng)建大幅圖面成為可能。子彈的參考點(diǎn)設(shè)置在子彈底部的中心,因?yàn)樽訌椧怀雠谕驳臅r(shí)候緊挨著坦克的象素就是其底部中心。默認(rèn)是(0,0)點(diǎn),如果需要,可將參考點(diǎn)設(shè)置在畫(huà)面邊界之外。由此,引入?yún)⒖键c(diǎn)的概念。本程序中的雙方坦克、子彈都由Sprite繼承得到。Sprite也可以從整合的圖象中讀圖,讀圖時(shí)將把大圖分解為若干等寬等高的小圖。不同的frame可交相顯示,構(gòu)成動(dòng)態(tài)的效果。唯有界面右側(cè)的計(jì)分欄由Graphics類繪制。改變View Window的位置可以制造出滾動(dòng)屏幕的效果。層號(hào)總是連續(xù)的,即使有中間的層被移除,其他層的序號(hào)會(huì)作相應(yīng)的調(diào)整以保持整體的完整性。LM存儲(chǔ)了一個(gè)層的列表,新的層可以用append函數(shù)附加、刪除和插入。 LayerManager(以下簡(jiǎn)稱LM)提供控制整體畫(huà)面層的控制。 Game包中的新功能 ,為游戲的開(kāi)發(fā)帶來(lái)了極大的便利。在Game包中的TiledLayer和Sprite類都整合了這樣的功能。這些代碼包含在每一個(gè)單獨(dú)的png格式圖象中,然而如果將多個(gè)png圖象合并在一張幅面稍大一些的整圖中,多個(gè)
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1