畢業(yè)設(shè)計(論文)-J2ME《覽橋風光》游戲設(shè)計(含源程序)_第1頁
畢業(yè)設(shè)計(論文)-J2ME《覽橋風光》游戲設(shè)計(含源程序)_第2頁
畢業(yè)設(shè)計(論文)-J2ME《覽橋風光》游戲設(shè)計(含源程序)_第3頁
畢業(yè)設(shè)計(論文)-J2ME《覽橋風光》游戲設(shè)計(含源程序)_第4頁
畢業(yè)設(shè)計(論文)-J2ME《覽橋風光》游戲設(shè)計(含源程序)_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

畢業(yè)論文(設(shè)計)用紙幕后臺的緩沖區(qū)內(nèi)的圖像刷新到前臺來(flushGraphics()應(yīng)該寫在render(){}的最后)。renderboss()方法重繪的是關(guān)尾的精靈cboss、相關(guān)信息等,與render()的區(qū)別在與于函數(shù)lm.paint(g,0,0),起始坐標是不可變的,即,關(guān)尾的地圖背景是不可變的。實際上,renderboss()是完全不需要的,只要在render()函數(shù)中設(shè)置相關(guān)標志位就可以解決關(guān)尾的繪圖問題。玩家飛機的生命標志使用drawImage()就可以繪制在屏幕上了。4.4游戲中的獎勵及相關(guān)飛機的行為根據(jù)游戲設(shè)定,當y1=-1000時,會出現(xiàn)如圖4-8所示的飛機(sboss),當玩家擊落他后,屏幕會顯示“援軍到達“,并且玩家剩余飛機數(shù)加1。使用if((y1==-1000)&&(sbz==0)){}設(shè)定sboss的初始位置,根據(jù)游戲設(shè)定,sboos從屏幕上方倒飛入屏幕,所以sboss設(shè)定的初始位置(50,planepoup-65),其中planepoup為屏幕上邊緣的標志位。圖4-9最后,要將sbz賦值為1,消除sboos不停設(shè)置初始位置的BUG。圖4-9當sboss飛入屏幕后,將sbz賦值為2,以執(zhí)行下面的if(sbz==2)語句。圖4-10在判斷語句if(sbz==2)里,將根據(jù)玩家的位置自動飛圖4-10行。首先,根據(jù)玩家飛機的位置對sbmove賦值,當c1在sboos的上、下、左、右時,其對應(yīng)的值為1、2、3、4在這4個if語句中,要設(shè)置標志位(smovebz==0)。設(shè)置這個標志位的目的是防止sboos根據(jù)c1的位置不停的改變運行狀態(tài),即防止sboos成為跟蹤飛機。當sboos根據(jù)c1的位置改變一次運行方向后,smovebz賦值為1,即不檢測c1的位置。只有sboss運行到屏幕的邊緣時,才將smovebz重新賦值為0,使其可以再次通過c1的位置決定sboos的運行方向。當玩家子彈擊中sboss后,使用sboss.setFrame(1),此時飛機變紅,在本次repaint結(jié)束前,使用sboss.setFrame(0)使飛機變?yōu)楸緛眍伾?,而程序設(shè)定每1/20秒畫一次,由此得到飛機被擊中后變色的效果。(參見圖4-10)。sboos會根據(jù)玩家飛機的位置發(fā)射子彈,根據(jù)游戲設(shè)置,當玩家在其上方、左方、右方時,sboss一次發(fā)射1發(fā)子彈,而玩家飛機在其下方時,sboss一次發(fā)射3發(fā)子彈。sboss與cboss共用3發(fā)子彈,因為當sboss出現(xiàn)時,離關(guān)尾還遠,所以,為了提高效率,采用這種方法。如果sboos被擊落后,使用函數(shù)setVisable(false)將bossbullet0、bossbullet1、bossbullet2設(shè)置為不見,使用sboss.setImage()函數(shù)將sboos的圖片設(shè)置為爆炸圖片。同時,玩家生命標志playerno加1,sbz賦值為-1,使得sboos無法發(fā)射子彈,sbpzbz賦值為1,使得玩家的子彈不與sboos進行碰撞檢測。同時在屏幕中使用drawString()繪制“援軍到達”四個字,隨著屏幕的運動,爆炸圖片逐漸進入屏幕下方,當sboos.getY()>palnepo,通過改變標志位的值使得drawSteing()不在執(zhí)行,四字消失。如果玩家被擊落后并沒有點“返回“,而此時,背景會一直運動到關(guān)尾,考慮到其與關(guān)尾BOSS共用3發(fā)子彈,如sboos不消失,將會出現(xiàn)子彈亂飛的情況。所以,如果判斷語句if((sboss.getY()==getHeight()))為真,則表示離地圖的終點只有一個屏幕的距離時,sbz賦值為-1、sbpzbz賦值為1(含義上面已經(jīng)說明)。同時調(diào)用sboss.move(0,-3),使sboos快速飛出屏幕,直到判斷語句if(sboss.getY()<-65)為真時,調(diào)用下面的函數(shù)setVisable(false),使得sboos不可見。4.5普通敵人相關(guān)屬性普通敵人是指游戲中不斷出現(xiàn)的蘭色飛機。首先在程序中首先定義了aik、aip兩個Random()類對象,ai和aipp兩個整型變量。程序中使用switch(ai)語句判斷下一次的飛機出現(xiàn)情況,為了達到不重復(fù)出現(xiàn)的效果,使用語句ai=aik.nextInt()%4(同樣應(yīng)該在構(gòu)造函數(shù)中放置此語句和aipp=aip.nextInt()%5,以使每次游戲開始的時候敵人飛機的出現(xiàn)順序是不固定的),以隨機出現(xiàn)0,1,2,3四個整數(shù)(代表著飛機的四種出現(xiàn)情況)。情況1:使用aipp=aip.nextInt()%5取得隨機數(shù)aipp,根據(jù)下面三條語句設(shè)置飛機的出現(xiàn)位置:j0.setPosition(100-aipp*30,planepoup+24); j1.setPosition(100,planepoup); j2.setPosition(100+aipp*30,planepoup-24);;將getHeight()/8賦給整型變量kkk,每次循環(huán)kkk-1,當kkk<=1時飛機轉(zhuǎn)向,當aipp>0時,飛機向左下方運行,使用語句setFrame(0)、move(-3,3)達成向左下方運動的效果。當aipp<0時,向右下方運動,實現(xiàn)方法同上。情況2:初始位置設(shè)置方法同情況1。當kkk〈0時,飛機掉頭向上飛,其中setFrame(3),move(-4,0)。情況3:初始位置設(shè)置方法同情況1。當kkk〈0時,飛機只向左轉(zhuǎn)。設(shè)置情況3的原因是在更多的隨機位置出現(xiàn)敵機。情況4:初始位置設(shè)置方法同情況1。但其中的飛機j1具有跟蹤能力,其實現(xiàn)方法如下:使用2個if語句if(j1.getX()<c1.getX())、if(j1.getX()>c1.getX())判斷J1在c1的左或右側(cè),并且實時根據(jù)判斷情況使用setFrame()和move()改變飛機的形態(tài),使用語句if((j1.getX()<c1.getX())&&((j1.getX()+48)>c1.getX())&&(j1.getY()<c1.getY()))判斷c1是否在j1的下方,當c1在j1的下方時,發(fā)射子彈jbullet1。以上四種情況的最后,都將使用函數(shù)nextInt()產(chǎn)生ai,aipp的值。設(shè)置整型數(shù)組jb[4],對應(yīng)著4種出現(xiàn)情況的標志位。如,執(zhí)行情況1,首先執(zhí)行判斷語句if(jb[0]==1),在此語句中,首先使用setVisable(true)函數(shù)將敵人飛機設(shè)置為可見的,并根據(jù)上次運行的qipp的值設(shè)置敵人飛機的初始位置最后,jb[0]賦值為2。接著執(zhí)行判斷語句if(jb[0]==2),在此語句中,首先使用move()函數(shù)使飛機向下運動,同時kkk減1,當kkk<=0時,飛機轉(zhuǎn)向,此時,根據(jù)aipp的正負判斷飛機向哪邊轉(zhuǎn)向。當飛機飛出屏幕時,jb[0]賦值為3。需要注意的一點是,當取得ai的數(shù)值時,一定要寫上這條語句:jb[ai]=1;因為當4種情況都出現(xiàn)一便的時候,標志位jb[]里的數(shù)值都將變?yōu)?,如果不將其重新賦值為1,敵人飛機將只能出現(xiàn)4次。其他3種情況也大致如此。普通敵人是否發(fā)射子彈由以下語句if(((j1.getX()<=c1.getX()-18)||((j2.getX()-6)>=c1.getX()))&(jbz==0)),即c1在j1左側(cè)18象素范圍內(nèi)或j2左側(cè)6象素范圍時,j0、j1、j2一起發(fā)射子彈,jbz=1,表示在這組子彈消失前敵人不發(fā)射子彈。如果jpb的值為0,則判斷語句if(jpb==0)里的move()語句將一直執(zhí)行下去。之后,還需要對每發(fā)子彈于玩家飛機進行碰撞檢測,如果碰撞,則將碰撞的這發(fā)子彈設(shè)置為不可見。4.6白云的實現(xiàn)原理為了游戲界面更加美觀,程序中設(shè)定了精靈數(shù)組cloud[i]來表示白云,由于白云應(yīng)該在所有飛機的上方,即cloud[i]應(yīng)該最早被append()到LayerManager中,或者使用insert(cloud[],0)在索引數(shù)值0處插入Layer,本程序采用了第一種方法,即在gameScreen類的構(gòu)造函數(shù)中按游戲設(shè)置的順序使用lm.append()加入到LayerManager之中。程序中設(shè)定白云數(shù)為5。首先設(shè)置白云的初始位置,其語句如下:cloud[0].setPosition(25,planepoup-(65));cloud[1].setPosition(80,planepoup-(140));cloud[2].setPosition(112,planepoup-(90));cloud[3].setPosition(175,planepoup-(200));cloud[4].setPosition(223,planepoup-(70));其原理為:將屏幕的X數(shù)軸和Y數(shù)軸各分成5份,即在X軸的5個范圍內(nèi)每個范圍出現(xiàn)一朵白云,Y軸的每個范圍內(nèi)也只能出現(xiàn)一朵。所以的白云的起始位置在每次游戲開始時是固定的。白云位置設(shè)定后,使用move(0,1)使白云移動,由于白云初始位置設(shè)定在屏幕的不同區(qū)域內(nèi),故其移動出屏幕的先后順序是不同的,使用if(cloud[].getY()>planepo)判斷白云是否飛出屏幕。如果為真則使用cloud[].setPosition(cloudposition*40,planepoup)設(shè)置白云的位置,其中,cloudposition=aicloud.nextInt()%5,aicloud為Random()類對象。乘以40表示其在X軸出現(xiàn)的范圍是多少,cloud[0]、cloud[1]、cloud[2]、cloud[3]、cloud[4]乘以的值分別為40,30、55、15、22。以達成白云的隨機出現(xiàn)效果。4.7關(guān)尾BOSS及相關(guān)屬性關(guān)尾處飛機在屏幕上方橫向移動,而背景地圖不動,所以使用renderboss()重繪屏幕,其中,paint(g,0,0)表示屏幕繪制點在坐標軸(0,0)處。BOSS生命進度條由以下語句繪制:g.setColor(255,0,0); g.fillRect(2,2,60,5);//生命進度條背靜紅 g.setColor(255,255,255); g.fillRect(2,2,bosslife,5);//生命進度條前景白其中bosslife記錄著BOSS的生命值,其初始值為0,當玩家每擊中一次BOSS,其值加5,,即化出白色進度條,當bosslife==60時,表示過關(guān),除玩家飛機與子彈外的其他Sprite均使用setVisable(false)使其不在顯示,同樣的pzbz要賦予1,以消除玩家飛機還能與敵人碰撞的BUG。如果cboss.getX()<0,則表示其在屏幕左方出界,應(yīng)改為右飛。同理如果cboss.getX()>(getWidth()-cboss.getWidth()),則表示其在屏幕右方出界,應(yīng)改為左飛。在飛機橫向飛行中,使用以下語句判斷飛機是否開火:if(((cboss.getX()<=c1.getX()-10)||(cboss.getX()<=c1.getX()+60))&&(jbsz==0))當每發(fā)一組子彈后,jbsz=1,則飛機無法開火,知道子彈飛出屏幕,jbsz才重新設(shè)定為0。而((cboss.getX()<=c1.getX()-10)||(cboss.getX()<=c1.getX()+60)表示當玩家飛機處于BOSS的左右各10個象素的范圍內(nèi)時。BOSS開火。關(guān)尾參見圖4-10。4.8本章小結(jié)第四章中按照相應(yīng)的步驟描述了所有關(guān)鍵類的具體算圖4-10關(guān)尾法實現(xiàn),引用了相關(guān)函數(shù)進行了具體流程的解釋,并對原圖4-10關(guān)尾理稍復(fù)雜的函數(shù)做了詳細的分析。對游戲有關(guān)的各運行面也做了展示。5測試5.1打包測試的過程使用Eclipse完成代碼的調(diào)試之后,需要使用WTK生成包(即jar和jad文件),其過程如下:首先,使用WTK的新建項目功能建立一個新項目,要求與Eclipse工作區(qū)下的項目名稱、MIDlet類名相同(圖5-1)。圖5-1新建項目后,將Eclipse工作區(qū)下的.java文件拷入src文件夾,將.class文件拷入class文件夾(需要新建),將pic文件夾拷入res文件夾,點擊生成,如一切正常,將如圖片5-2所示。圖5-2之后,選擇項目-包-生成包。如圖5-3所示。圖5-3生成的jar和jad文件存儲在lzhhdm/bin目錄下。運行MotorolaSDKv4.2forJ2ME,使用MOTOA760手機模擬器進行測試。參考圖5-4。點擊Lanuch按紐,進入如圖5-5的界面,即可以進行游戲測試了。圖5-4測試的過程,實際上就是找不同的同學玩這款游戲,以期望發(fā)現(xiàn)BUG。實際上,幾乎每一版本都會產(chǎn)生很多BUG。5.2發(fā)現(xiàn)的BUG及解決情況幾乎每一個計算機程序都會有這樣那樣的不足,尤其是未經(jīng)過精心維護的非商業(yè)軟件。即使是作為操作系統(tǒng)的各種版本的Windows也時常會發(fā)生許多類型的錯誤和漏洞。本游戲程序?qū)τ诔跎娲祟I(lǐng)域的畢業(yè)設(shè)計課題來說,尤其在開始初期,感覺邏輯復(fù)雜,難以控制,因此產(chǎn)生了大量BUG,其中一些BUG還沒有解決,所有發(fā)現(xiàn)的BUG如下:1.玩家子彈出現(xiàn)順序問題;2.玩家飛機爆炸后仍然可以控制爆炸圖片;3.當過關(guān)后仍然會發(fā)生碰撞;圖5-54.當玩家擊落可獎人飛機的同時玩圖5-5家被擊落,并且此為玩家的最后一架飛機,雖然顯示援軍到達,但圖5-5游戲仍然結(jié)束。圖5-55.有某組飛機在飛機被擊中后仍能發(fā)射子彈;6.sboos左側(cè)子彈發(fā)射后不停在原位置刷新問題;7.游戲運行一段時間后變的很卡;其中,1、2、3、4條BUG已經(jīng)解決(方法已在第4章相關(guān)位置進行了說明)。4、5、6沒有解決,其中,4、5、6三條如果有足夠的時間可以解決。第7條以現(xiàn)有水平無法解決,因為出現(xiàn)這種情況的原因估計是內(nèi)存的問題,而由于水平的關(guān)系,現(xiàn)在的代碼變量過多,并且效率低下,有很多重復(fù)的地方,解決的方法只能是在水平提高的情況下重寫整個程序。5.3未完善的功能經(jīng)過匯總測試人員的建議,本游戲應(yīng)該完善的功能如下1.由于每按一次開火,就會對玩家子彈的精靈數(shù)組進行一次循環(huán)檢查,使得本運行效率就不高的KVM運行異常緩慢。即使刷屏沒有間隔也不會提高速度;2.最好有接寶物的設(shè)置,增強可玩性;3.由于沒由合適的圖片,使得敵人設(shè)置單一;4.地圖本應(yīng)由外部文件讀入,但設(shè)計初期并沒有掌握這項技術(shù);5.手機游戲最好只有一個類,而我卻有4個;7.沒有添加成績記錄,即英雄榜;6.最大的遺憾,敵人不夠智能化。希望不遠的將來,我能夠有能力對這個游戲進行重寫,以解決BUG、完善功能。6總結(jié)6.1本程序的總結(jié)和展望本程序設(shè)計實現(xiàn)了手機上以J2ME為平臺的飛行射擊游戲的開發(fā),敵人運行的方式由程序進行控制,具有一定的可玩性和復(fù)雜性。經(jīng)過了細心的調(diào)試和排錯解決了絕大部分的問題。但是我的水平實在有限,在第5章列舉的眾多BUG和遺憾就可以看出這一點來,但我相信,隨著時間的推移,個人水平的增長,我一定會重寫這個程序,使其更加完善,6.2感想這款游戲作為我的畢業(yè)設(shè)計,是本人目前做過的最有意義的程序,這期間對J2ME的學習,使我又回到了初學PASCAL的時候。本科期間做過很多課程設(shè)計,大多規(guī)模很小。在數(shù)據(jù)庫、各種應(yīng)用軟件和游戲中,我仍覺得對游戲的設(shè)計有極大的熱情。因為其各個模塊間的聯(lián)系十分緊密,代碼重復(fù)執(zhí)行率高,當經(jīng)過無數(shù)次的調(diào)試、修改后,能最終看到成品,有無比自豪的心情。大學期間做過圖書館管理程序等簡單的數(shù)據(jù)庫管理系統(tǒng)的課程設(shè)計,思想大致相似,變化范圍有限,沒有太多自己可發(fā)揮的余地。大家作品的最終結(jié)果都離不開同一個模式。相比一些數(shù)據(jù)庫軟件,游戲的設(shè)計有很多人情色彩和藝術(shù)思想的發(fā)揮,正式商業(yè)的軟件的人性化界面和各個游戲間迥異的結(jié)構(gòu)每每會讓人有去開發(fā)的沖動。學習J2ME的困難遠遠超出了想象,在設(shè)計初期,為了解決地圖的滾動、玩家飛機如何不飛出上下邊界兩個問題竟然花費了數(shù)天的時間。很多相關(guān)的技術(shù),如需要使用到的線程、Game包的新功能、高級、低級圖形界面的使用、貼圖等,每一項都需要花一定的時間去掌握和熟悉。更為困難的是,J2ME為一種剛出現(xiàn)僅幾年的新技術(shù),國內(nèi)的參考資料非常少,僅有的幾本也停留在簡單的介紹階段。臺灣的王森寫了本較好的書,給了我很大的幫助,但對設(shè)計該游戲來說,仍只夠入門。幸運的是,互聯(lián)網(wǎng)上有那么多無私的人,由JasonLam著,DeabowayChou譯的電子書《J2ME&Gaming》給了我很大的幫助,作者、譯者的辛勤勞動的成果免費放在網(wǎng)上由大家下載,是開源精神的完美體現(xiàn)。致謝首先感謝我的指導老師馬慧彬副教授,她在我的畢業(yè)設(shè)計過程中提出了指導性的方案和架構(gòu),并指引我閱讀相關(guān)的資料和書籍,使我在不熟悉的領(lǐng)域中仍能迅速掌握新興的技術(shù)。感謝黃明旭、包明輝同學對游戲進行測試,感謝包明輝同學對游戲相關(guān)圖片的修改。感謝答辯組對本畢業(yè)設(shè)計的考核,如果可以得到專家的認可將對我的學習和工作給予極大的鼓勵。你們客觀的評價和建議我將牢記在心,在今后的發(fā)展中揚長避短,更加努力的嚴格要求自己。參考文獻[1]JoshuaBloce著.潘愛民譯.EffectiveJava中文版.2004年7月第4版.機械工業(yè)出版社.[2]BruceEckel.侯捷譯.Java編程思想.2005年3月第1版.機械工業(yè)出版社出版社[3]王森著.Java手機/PDA程序設(shè)計入門.2005年2月第3版.電子工業(yè)出版社.[4]JamesKeogh著.潘穎王磊譯.J2ME開發(fā)大全.2004年2月第1版清華大學出版社.[5]IanSommerville著.程成等譯.軟件工程.2003年1月第1版.機械工業(yè)出版社.[6]JasonLam著.Deabo wayChou譯J2ME&Gaming2004年末[7]陳立偉張克非黎秀紅著.精通JAVA手機游戲與應(yīng)用程序設(shè)計.中國青年出版社.2005年5月[8]飛思科技產(chǎn)品研發(fā)中心.精通Jbuilder9.電子工業(yè)出版社.2004年[9]微型爪哇人.Java手機程序開發(fā).中國鐵道出版社,2003年[10]FrandM.Carrano,JanetJ.Prichard

.著

韓志宏

譯.數(shù)據(jù)抽象和問題求解——JAVA語言描述.清華大學出版社2005年4月[11]袁海燕王文濤著.JAVA實用程序設(shè)計100例.人民郵電出版社.2005年5月[12]JonathanKnudsen.What'sNewintheJ2MEWirelessToolkit2.22004年4月

附錄一代碼畢業(yè)論文(設(shè)計)用紙佳木斯大學教務(wù)處 第60頁importjavax.microedition.midlet.MIDlet;importjavax.microedition.midlet.MIDletStateChangeException;importjavax.microedition.lcdui.*;publicclasslzhhdmextendsMIDletimplementsCommandListener{publicDisplaydisplay; privateImagesplashLogo; privatebooleanisSplash=true;publicForma;privateAlertalert;intlength;privateMenuScreenmenuscreen;privategameScreengamescreen;privateCommandok,back;privatebyte[]byteInputData; publiclzhhdm() { } protectedvoidstartApp()throwsMIDletStateChangeException{ display=Display.getDisplay(this); menuscreen=newMenuScreen(this); if(isSplash) {a=null; a=newForm("覽橋風光V1.0"); ok=newCommand("ok",Command.OK,1); a.append(newStringItem(null,"")); a.addCommand(ok); a.setCommandListener(this); display.setCurrent(a); } } protectedvoidmenuscreenShow() { display.setCurrent(menuscreen); } protectedvoidmenuscreensecond(){ menuscreen=newMenuScreen(this); MenuScreen.mainmenu[0]="重新開始";//玩完一遍或掛了后在玩一遍菜單第一項改為重新開始 display.setCurrent(menuscreen); } protectedvoidpauseApp(){} protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{ } protectedvoidhelShow() {a=null; a=newForm("覽橋風光V1.0"); back=newCommand("返回",Command.BACK,1); a.append(newStringItem(null,"操作方式:上2下8左4右6開火5")); a.append(newStringItem(null,"彈藥數(shù):一次最多打三組")); a.addCommand(ok); a.setCommandListener(this); display.setCurrent(a); } protectedvoidrenwuShow() { a=null; a=newForm("覽橋風光V1.0"); back=newCommand("返回",Command.BACK,1); a.append(newStringItem(null,"游戲名稱:覽橋風光")); a.append(newStringItem(null,"版本號:V1.00")); a.append(newStringItem(null,"制作者:信息電子技術(shù)學院01計算機5班劉澤華學號:7")); a.addCommand(ok); a.setCommandListener(this); display.setCurrent(a); } protectedvoidgameShow() {try{ gamescreen=null; gamescreen=newgameScreen(this); gamescreen.start(); display.setCurrent(gamescreen); gamescreen.conti=true; }catch(Exceptionexp) { System.out.println("dfg"); } } publicvoidcommandAction(Commandarg0,Displayablearg1){ a=null; this.menuscreenShow(); }}importjavax.microedition.lcdui.*;publicclassMenuScreenextendsCanvasimplementsRunnable,CommandListener{Fontlowfont=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN,Font.SIZE_MEDIUM); Fonthighfont=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_BOLD,Font.SIZE_MEDIUM); intlowColor=0x000000FF; inthighColor=0x00FF0000; inthighBGColor=0x00CCCCCC; intwidth; booleanco; intheight; intstartHeight; intspacing=highfont.getHeight()/2; publicstaticString[]mainmenu={"D?ó??·","°??ú","1?óú"}; intmenuIndex; ThreadmenuThread; privateCommandok=newCommand("ok",Command.OK,1); privatelzhhdmmidlet; publicMenuScreen(lzhhdmmidlet) { this.midlet=midlet; width=getWidth(); height=getHeight(); startHeight=(highfont.getHeight()*mainmenu.length)+((mainmenu.length-1)*spacing); startHeight=(height-startHeight)/2; menuIndex=0; addCommand(ok); setCommandListener(this); menuThread=newThread(this); menuThread.start(); co=true; } publicvoidrun() { while(co) { repaint(); } } publicvoidpaint(Graphicsg) { g.setColor(0x00FFFFFF); g.fillRect(0,0,width,height); for(inti=0;i<mainmenu.length;i++) { if(i==menuIndex) { g.setColor(highBGColor); g.fillRect(0,startHeight+(i*highfont.getHeight())+spacing,width,highfont.getHeight()); g.setFont(highfont); g.setColor(highColor); g.drawString(mainmenu[i],(width-highfont.stringWidth(mainmenu[i]))/2,startHeight+(i*highfont.getHeight())+spacing,20); }else { g.setFont(lowfont); g.setColor(lowColor); g.drawString(mainmenu[i],(width-lowfont.stringWidth(mainmenu[i]))/2,startHeight+(i*highfont.getHeight())+spacing,20); } } } publicvoidkeyPressed(intcode) { if(getGameAction(code)==Canvas.UP&&menuIndex-1>=0) { menuIndex--; } elseif(getGameAction(code)==Canvas.DOWN&&menuIndex+1<mainmenu.length) { menuIndex++; } } publicvoidcommandAction(Commandc,Displayabled) { if(c==ok) { switch(menuIndex) { case0: co=false; midlet.gameShow(); break; case1: midlet.helShow(); break; case2: midlet.renwuShow(); break; } } }

}importjavax.microedition.lcdui.*;importjavax.microedition.lcdui.game.*;publicclassmybulletsextendsSprite{publicintscore=0; privateint[][]bullets; privateintbulletstotal;publicintwidth,bulletheight; publicintno=0; publicmybullets(Imageimg,intpicwidth,intpicheight,intbulletstotal,intwidth,intheight) { super(img,picwidth,picheight); this.bulletstotal=bulletstotal; bullets=newint[bulletstotal][4]; this.width=width; this.bulletheight=height/7; }publicvoidinitBullets(inti){ bullets[i][3]=1; bullets[i][2]=0;}publicvoidupdata(inti){ bullets[i][1]+=bullets[i][2];}publicvoidsetfirstposition(intx,inty,intnof,Spritesprite[],Imageimg){ sprite[nof].setVisible(true);sprite[nof+1].setVisible(true);sprite[nof+2].setVisible(true); bullets[nof][0]=x+10;bullets[nof][1]=y-24;sprite[nof].setImage(img,6,6);bullets[nof+1][1]=bullets[nof][1]+10;bullets[nof+1][0]=x+10;sprite[nof+1].setImage(img,6,6);bullets[nof+2][1]=bullets[nof+1][1]+10;bullets[nof+2][0]=x+10;sprite[nof+2].setImage(img,6,6);}publicvoidnewposition(Spritesprite[],inti,intv,Spritejp0,Spritejp1,Spritejp2,Spriteboss,Imageimg){ bullets[i][2]-=5; sprite[i].setPosition(bullets[i][0],bullets[i][1]+bullets[i][2]); sprite[i+1].setPosition(bullets[i][0],bullets[i+1][1]+bullets[i][2]); sprite[i+2].setPosition(bullets[i][0],bullets[i+2][1]+bullets[i][2]);if(sprite[i].collidesWith(jp0,true)){ sprite[i].setImage(img,32,32); sprite[i+1].setImage(img,32,32); sprite[i+2].setImage(img,32,32); sprite[i].setFrame(1); sprite[i+1].setFrame(1); sprite[i+2].setFrame(2); bullets[i][3]=0; bullets[i+1][3]=0; bullets[i+2][3]=0; jp0.setVisible(false); no=1; score=score+1;}if(sprite[i].collidesWith(jp1,true)){ sprite[i].setImage(img,32,32); sprite[i+1].setImage(img,32,32); sprite[i+2].setImage(img,32,32); sprite[i].setFrame(1); sprite[i+1].setFrame(1); sprite[i+2].setFrame(2); bullets[i][3]=0; bullets[i+1][3]=0; bullets[i+2][3]=0; jp1.setVisible(false); no=1;score=score+1;}if(sprite[i].collidesWith(jp2,true)){ sprite[i].setImage(img,32,32); sprite[i+1].setImage(img,32,32); sprite[i+2].setImage(img,32,32); sprite[i].setFrame(1); sprite[i+1].setFrame(1); sprite[i+2].setFrame(2); bullets[i][3]=0; bullets[i+1][3]=0; bullets[i+2][3]=0; jp2.setVisible(false); no=1;score=score+1;}}publicbooleanisAlive(inti){ if(bullets[i][3]==1)returntrue;elsereturnfalse;}publicvoidsetAlive(inti){ for(intz=i;z<i+3;z++) { bullets[i][3]=0; } }publicintrscore(){ returnscore;}publicvoidclean(inti,Spritesprite[]){ for(intz=i;z<i+3;z++) { //sprite[z].setPosition(0,-1500); sprite[z].setVisible(false); no=1; }}}importjavax.microedition.lcdui.*;importjavax.microedition.lcdui.game.*;importjava.util.*;publicclassgameScreenextendsGameCanvasimplementsRunnable,CommandListener{privateFormal;publicLayerManagerlm,lm1;TiledLayerb1;intheight=getHeight();intbosscolor=0;intsbosscolor=0;intsbz=0;intsbmove=0;intsfire=0;intsmovebz=0;intsbpzbz=0;intslife=0;intsbo=0;intdrawslife=0;intlr=0;intdrawadd=0;intpzbz=0;intpzbzover=0; intplaylife=-1;intbosslife=0;intinputno=0;intposition=0;intj1b=0;intjbsz=-1;intsbsz0=-1;intsbsz1=-1;intsbsz2=-1;intsbsz3=-1;intplanepo;intplanepoup;intkkk;intgz=0;intgzks=0;intjiangli=0;intjplaneno;intcloundno=0;intright=0;intleft=1;intboss=0;intover=0;intai=0;intplanert=-1;intsupermen=0;intovercmd=0;intbossover=0;intjpb=-12;intaipp=0;intjbz=0;intcloudposition;Randomaik=newRandom();Randomaip=newRandom();Randomaicloud=newRandom();intjb[]=newint[5];intplayerno=3;

privatemybullets[]huokebullet=newmybullets[9];privateSpritejbullet0,jbullet1,jbullet2,bossbullet0,bossbullet1,bossbullet2;privateSpritecloud[]=newSprite[5];privateMenuScreenms;privateSpritec1,sboss,cboss,j0,j1,j2,boss1;privatelzhhdmmidlet;ints1=0;ints2=65;ints3=0;introw2;introw;intplanecolor=0;intplanecoco=0;publicintby1;publicinty1;publicgameScreen(lzhhdmmidlet){super(true);this.midlet=midlet;addCommand(newCommand("暫停",Command.BACK,1));setCommandListener(this);

lm=newLayerManager();c1=newSprite(img("/pic/MyPlaneFrames.png"),24,24);cboss=newSprite(img("/pic/boss.png"),65,50);jbullet0=newSprite(img("/pic/bullet.png"),6,6);jbullet1=newSprite(img("/pic/bullet.png"),6,6);jbullet2=newSprite(img("/pic/bullet.png"),6,6);bossbullet0=newSprite(img("/pic/bullet.png"),6,6);bossbullet1=newSprite(img("/pic/bullet.png"),6,6);bossbullet2=newSprite(img("/pic/bullet.png"),6,6);sboss=newSprite(img("/pic/smallboss.png"),65,50);b1=createBackGround();c1.setPosition(getWidth()/2,row2+getHeight()-25);System.out.println("ffffffffffff");planepoup=row2;planepo=row2+getHeight();j0=newSprite(img("/pic/jplane2.png"),24,22);j1=newSprite(img("/pic/jplane2.png"),24,22);j2=newSprite(img("/pic/jplane2.png"),24,22);kkk=getHeight()/8;lm.append(j0);lm.append(j1);lm.append(j2);cboss.setVisible(false);aipp=aip.nextInt()%3;if(aipp==0){aipp=aip.nextInt()%3;}lm.append(cboss);lm.append(bossbullet0);lm.append(bossbullet1);lm.append(bossbullet2);lm.append(jbullet0);lm.append(jbullet1);lm.append(jbullet2);lm.append(sboss);jb[0]=1;jb[1]=1;jb[2]=1;jb[3]=1;try{for(inti=0;i<=4;i++){cloud[i]=newSprite(img("/pic/cloud1.png"),16,16);lm.append(cloud[i]);}}catch(Exceptione){System.out.println("cloud");}try{for(inti=0;i<9;i++){

huokebullet[i]=playerbullet("/pic/bullet.png");}}catch(Exceptione){}try{for(inti=0;i<=8;i=i+3){huokebullet[i].no=1;//okhuokebullet[i].score=0;}}catch(Exceptione){System.out.println("ffffffffffffff");}for(inti=0;i<9;i++){lm.append(huokebullet[i]);}lm.append(c1);lm.append(b1);}privateImageimg(Stringpic){

Imageimg=null;try{ img=Image.createImage(pic);}catch(Exceptionexp){System.out.println(exp);}returnimg;}privatemybulletsplayerbullet(Stringpic){Imageimg=null;try{ img=Image.createImage(pic);}catch(Exceptionexp){System.out.println(exp);}returnnewmybullets(img,6,6,21,getWidth(),getHeight());}publicTiledLayercreateBackGround(){Imageimg=null;try{ img=Image.createImage("/pic/beijing.png");

}catch(Exceptionexp){System.out.println("layercreateimage");} TiledLayertiledLayer=newTiledLayer(50,200,img,16,16);int[]map1[]{地圖};for(inti=0;i<map1.length;i++){intcolumn=i%15;row=(i-column)/15; tiledLayer.setCell(column,row,map1[i]);}row2=(row+1)*16-getHeight();y1=-row2;returntiledLayer;}booleanconti=true;intrate=50; publicvoidrun() {longst=0; longet=0; Graphicsg=getGraphics(); intl=1350; while(conti){st=System.currentTimeMillis(); input();if(huokebullet[0].isAlive(0)){huokebullet[0].no--;if(huokebullet[0].no>0){ huokebullet[0].newposition(huokebullet,0,3,j0,j1,j2,cboss,img("/pic/explosion.png")); }if(huokebullet[0].no<=0){ huokebullet[0].setAlive(0); huokebullet[0].clean(0,huokebullet);}} if(huokebullet[3].isAlive(3)){huokebullet[3].no--;if(huokebullet[3].no>0){huokebullet[3].newposition(huokebullet,3,3,j0,j1,j2,cboss,img("/pic/explosion.png")); }if(huokebullet[3].no<=0){huokebullet[3].setAlive(3);huokebullet[3].clean(3,huokebullet);}} if(huokebullet[6].isAlive(6)){huokebullet[6].no--; if(huokebullet[6].no>0){ huokebullet[6].newposition(huokebullet,6,3,j0,j1,j2,cboss,img("/pic/explosion.png")); }if(huokebullet[6].no<=0){huokebullet[6].setAlive(6);huokebullet[6].clean(6,huokebullet);}}if(huokebullet[0].collidesWith(cboss,true)){huokebullet[0].setVisible(false); huokebullet[1].setVisible(false); huokebullet[2].setVisible(false);cboss.setFrame(1);if(bosslife<=55){bosslife=bosslife+5;}huokebullet[0].setAlive(0);huokebullet[0].clean(0,huokebullet);}if(huokebullet[0].collidesWith(sboss,true)&&(sbpzbz==0)){ huokebullet[0].setVisible(false);huokebullet[1].setVisible(false); huokebullet[2].setVisible(false); sboss.setFrame(1);if(slife<=75){slife=slife+5;}huokebullet[0].setAlive(0); huokebullet[0].clean(0,huokebullet);if(huokebullet[3].collidesWith(cboss,true)){cboss.setFrame(1); huokebullet[3].setVisible(false);huokebullet[4].setVisible(false); huokebullet[5].setVisible(false);huokebullet[3].no=0;if(bosslife<=55){bosslife=bosslife+5;} huokebullet[3].setAlive(3);huokebullet[3].clean(3,huokebullet);}if(huokebullet[3].collidesWith(sboss,true)&&(sbpzbz==0)){sboss.setFrame(1);huokebullet[3].setVisible(false);huokebullet[4].setVisible(false);huokebullet[5].setVisible(false);huokebullet[3].no=1;if(slife<=75){slife=slife+5;}huokebullet[3].setAlive(3);huokebullet[3].clean(3,huokebullet);}if(huokebullet[6].collidesWith(cboss,true)){ huokebullet[6].setVisible(false); huokebullet[7].setVisible(false);huokebullet[8].setVisible(false);cboss.setFrame(1);if(bosslife<=55){bosslife=bosslife+5;}huokebullet[6].setAlive(6);huokebullet[6].clean(6,huokebullet); }if(huokebullet[6].collidesWith(sboss,true)&&(sbpzbz==0)){sboss.setFrame(1);huokebullet[6].setVisible(false); huokebullet[7].setVisible(false); huokebullet[8].setVisible(false);if(slife<=75){slife=slife+5;}huokebullet[6].setAlive(6); huokebullet[6].clean(6,huokebullet);;}if((y1>-1350)&&(pzbzover==0))

{ switch(ai){ case0: if(jb[0]==1){ jbz=0; j0.setVisible(true); j1.setVisible(true); j2.setVisible(true);j1.setFrame(2); j0.setFrame(2); j2.setFrame(2);j0.setPosition(100-aipp*30,planepoup+24); j1.setPosition(100,planepoup); j2.setPosition(100+aipp*30,planepoup-24);jb[0]=2;}if(jb[0]==2){j0.move(0,3);j1.move(0,3);j2.move(0,3);kkk=kkk-1; }if(kkk<=0){jb[0]=3;if(aipp>=0){j1.setFrame(0); j0.setFrame(0);j2.setFrame(0); j0.move(-3,3);j1.move(-3,3); j2.move(-3,3);}elseif(aipp<0){j1.setFrame(1); j0.setFrame(1); j2.setFrame(1);j0.move(3,3);j1.move(3,3);j2.move(3,3);}if(j2.getY()>planepo) {j0.setVisible(false);j1.setVisible(false);j2.setVisible(false);jbullet0.setVisible(false);jbullet1.setVisible(false);jbullet2.setVisible(false);jpb=-1;ai=aik.nextInt()%4; aipp=aip.nextInt()%5;if(aipp==0){aipp=aip.nextInt()%5;}if(ai<0)ai=ai*(-1);jb[ai]=1; kkk=getHeight()/8;}}if((j1.getX()<=c1.getX()-18)&(jbz==0)){jpb=0;if(j0.isVisible()){jbullet0.setVisible(true);}if(j1.isVisible()){jbullet1.setVisible(true);}if(j2.isVisible()){jbullet2.setVisible(true);}jbullet0.setPosition(j0.getX()+12,j0.getY()+30);jbullet1.setPosition(j1.getX()+12,j1.getY()+30);jbullet2.setPosition(j2.getX()+12,j2.getY()+30);jbz=1;}break;case1: if(jb[1]==1){j0.setVisible(true);j1.setVisible(true);j2.setVisible(true);j1.setFrame(2); j0.setFrame(2);j2.setFrame(2);j0.setPosition(100-aipp*30,planepoup+24);j1.setPosition(100,planepoup);j2.setPosition(100+aipp*30,planepoup-24);;jb[1]=2;}if(jb[1]==2){j0.move(0,3);j1.move(0,3);j2.move(0,3);kkk=kkk-1;}if(kkk<0){jb[1]=3;}if(jb[1]==3){jpb=1;j1.setFrame(3);j0.setFrame(3);j2.setFrame(3);jb[1]=4;}if(jb[1]==4){j0.move(0,-4);j1.move(0,-4);j2.move(0,-4); if(j2.getY()<planepoup){j0.setVisible(false);j1.setVisible(false);j2.setVisible(false);jbullet0.setVisible(false); jbullet1.setVisible(false);jpb=-1; jbullet2.setVisible(false); ai=aik.nextInt()%4; if(ai<0)ai=ai*(-1);jb[ai]=1;aipp=aip.nextInt()%5; if(aipp==0){aipp=aip.nextInt()%5;}kkk=getHeight()/8;}}break;case2:if(jb[2]==1){jbz=0;j0.setVisible(true);j1.setVisible(true);j2.setVisible(true);j1.setFrame(2);j0.setFrame(2);j2.setFrame(2);j0.setPosition(100-aipp*30,planepoup+aipp*30);j1.setPosition(100,planepoup);j2.setPosition(100+aipp*30,planepoup+aipp*30);;jb[2]=2;}if(jb[2]==2){j0.move(0,3);j1.move(0,3);j2.move(0,3);kkk=kkk-1;}if(kkk<=0){jb[2]=3;j1.setFrame(0);j0.setFrame(0);j2.setFrame(0);j0.move(-3,3);j1.move(-3,3);j2.move(-3,3); if(j2.getY()>planepo){jpb=-1;jbullet0.setVisible(false);jbullet1.setVisible(false);jbullet2.setVisible(false);j0.setVisible(false);j1.setVisible(false);j2.setVisible(false);ai=aik.nextInt()%4;if(ai<0)ai=ai*(-1);jb[ai]=1; aipp=aip.nextInt()%5;if(aipp==0){aipp=aip.nextInt()%5;}kkk=getHeight()/8; }}if(((j1.getX()<=c1.getX()-18)||((j2.getX()-6)>=c1.getX()))&(jbz==0)){if(j0.isVisible()){jbullet0.setVisible(true);}if(j1.isVisible()){jbullet1.setVisible(true);}if(j2.isVisible()){jbullet2.setVisible(true);}jpb=0;jbullet0.setPosition(j0.getX()+12,j0.getY()+30); jbullet1.setPosition(j1.getX()+12,j1.getY()+30);jbullet2.setPosition(j2.getX()+12,j2.getY()+30);jbz=1;} break;case3:if(jb[3]==1){jbz=0; j0.setVisible(true);j1.setVisible(true);j2.setVisible(true);j1.setFrame(2);j0.setFrame(2);j2.setFrame(2);j0.setPosition(200-aipp*50,planepoup-aipp*10);j1.setPosition(100,planepoup); j2.setPosition(100+aipp*50,planepoup-aipp*10);jb[3]=2;}if(jb[3]==2){j0.move(0,3);j1.move(0,3);j2.move(0,3);if(gzks==0){if(j1.getX()<c1.getX()){j1.move(2,2);j1.setFrame(1);}if(j1.getX()>c1.getX()){j1.setFrame(0);j1.move(-2,2);}if((j1.getX()<c1.getX())&&((j1.getX()+48)>c1.getX())&&(j1.getY()<c1.getY())){j1.setFrame(2);j1.move(0,2);if(j1b==0){jbullet1.setPosition(j1.getX()+12,j1.getY()+30);j1b=1;}}j0.move(0,3);jbullet1.move(0,3);j1.move(0,3);j2.move(0,3);}if((j2.getY()>(planepo+22))&&(j0.getY()>(planepo+22))&&((j1.getY()<(planepoup-22))||(j1.getY()>(planepo+22)))){jb[3]=1;gz=0;gzks=0;jbullet1.setVisible(false);jbullet2.setVisible(false); j0.setVisible(false);j1.setVisible(false); j2.setVisible(false);ai=aik.nextInt()%4;if(ai<0)ai=ai*(-1);jb[ai]=1;aipp=aip.nextInt()%5;if(aipp==0){aipp=aip.nextInt()%5;}kkk=getHeight()/8;}if((j2.getX()<=c1.getX()-18)&(jbz==0))/{jpb=0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論