




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目錄緒論41 課題總體介紹41.1 課題背景41.2國內外概況41.3研究內容52 開發(fā)平臺與技術概述52.1開發(fā)環(huán)境52.2wtk、eclipse與jam的介紹52.3java語言介紹63 j2me及其體系結構概述63.1 j2me簡介63.2 j2me 體系結構73.3 移動信息設備簡表概述73.3.1 midp的目標硬件環(huán)境73.3.2 midp應用程序73.3.3 cldc和midp庫中的類74 手機游戲開發(fā)過程84.1 貪吃蛇游戲的規(guī)則簡介84.2詳細設計84.3代碼設計94.3.1游戲地圖代碼設計94.3.2操作控制代碼設計194.3.3進入游戲畫面極其字體設計224.3.4分數記
2、錄255 總結29致謝31參考文獻30基于j2me平臺的貪吃蛇游戲的設計與實現摘 要隨著通信技術的發(fā)展和手機的日益普及、java功能在移動設備上的實現,java應用程序產生的手機增值服務逐漸體現出其影響力,對于豐富人們的生活內容、提供快捷的資訊起著不可忽視的作用。j2me(java 2 micro edition)是近年來隨著各種不同設備,尤其是移動通信設備的飛速發(fā)展而誕生的一項新的開發(fā)技術,它定位在消費性電子產品的應用上,對設備的智能化、多樣化,提供了革命性的解決方案。以j2me為開發(fā)平臺,利用java提供的強大工具,不但可以在手機上實現靜態(tài)html技術所無法實現的計算處理、數據存儲、與服務
3、器的通信等功能,而且能夠開發(fā)各種手機游戲。本文在介紹j2me及其體系結構的基礎上,以貪吃蛇游戲為實例,描述了借助j2me的midlet類庫開發(fā)手機游戲的全過程。【關鍵詞】:手機游戲 嵌入式開發(fā) 永久性數據 midp應用程序 design and implementation of snake game based on j2me abstractalong with the development of mobile communication technology and the increasing popularity of mobile devices, java function i
4、n the realization, java applications that make mobile value-added services gradually reflect its influence, to enrich peoples life content, provide quick information plays an important role. j2me (java 2 micro happen) is in recent years, with different equipment, especially the rapid development of
5、mobile communications equipment and the birth of a new development of technology, it positioned in the consumer electronics applications, the intelligent, diversification of equipment, provides innovative solutions. for development platform, in j2me using java provide powerful tools, not only can ce
6、llphones realize static html technology can computing processing, data storage, the servers and communications, and other functions, but also can develop all kinds of mobile games. based on the introduction of the j2me and its system structure based on the snake game for example, describes the aid m
7、idlet class library development j2me the whole process of mobile gaming.【key words】 : mobile games embedded development permanent data midp application program緒論java自從20世紀90年代早期誕生以來,以其強大的功能迅速為廣大程序員們所接受。j2me是sun公司針對嵌入式、消費類電子產品推出的開發(fā)平臺,與j2se和j2ee共同組成java技術的三個重要的分支。j2me實際上是一系列規(guī)范的集合,由jcp組織制定相關的java speci
8、fication request(jsr)并發(fā)布,各個廠商會按照規(guī)范在自己的產品上進行實現,但是必須要通過tck測試,這樣確保兼容性。比如midp2.0規(guī)范就是在jsr118中制定的。可能接觸過j2me的開發(fā)者會覺得說j2me是一系列的規(guī)范不準確吧。因為我們在開發(fā)中用到了很多例如cldc(connected limited devices configuration)和midp(mobile information devices profile)等內容。其實這并不矛盾,因為這些就是在相關規(guī)范中制定的。1 課題總體介紹1.1 課題背景 隨著近年來科學技術的迅猛發(fā)展,計算機技術已近慢慢的向微型化
9、、便攜化等方向發(fā)展。如今,人們對于嵌入式的研究的深入,誕生了各種基于多功能操作系統(tǒng)的手機,使得這些手機上可以安裝各種各樣的軟件,實現功能和性能上的擴展和提高。目前大部分手機分為智能手機(smartphone)和非智能手機。智能手機包括以諾基亞和三星手機為代表的symbian s60操作系統(tǒng),以摩托羅拉為代表的linux操作系統(tǒng),以多普達、htc(宏達)為代表的windows mobile操作系統(tǒng),還有最近興起的基于google操作系統(tǒng)android的新上市的手機。非智能手機包括諾基亞的s40平臺、摩托羅拉早期的p2k平臺等等。隨著移動通信技術的發(fā)展和無線數據業(yè)務的進步以及人們對移動傳播方式的日
10、趨依賴,無線終端在人們日常生活中的使用也逐漸得到普及,手機已被賦予了除通話以外的其他許多功能。研究發(fā)現,在700 名受訪對象中,60的人會在家中玩手機游戲,而且其中 60每天不止玩一次,每天的時間在 15 到 20 分鐘。而諾基亞做的一項研究發(fā)現,玩家玩手機游戲的時間平均為 28 分鐘。種種調查數據可以證明全世界手機游戲市場的繁榮,如今沒有人會懷疑手機游戲的美好未來,全新的手機游戲領域已逐漸聚焦了眾多軟件開發(fā)商的目光。手機游戲的市場空間進一步增大。在日本以及韓國,手機游戲已經貢獻了大筆收;美國以及歐洲市場同樣很樂觀;而在南美洲以及其他國家和地區(qū),市場規(guī)模也在不斷擴大。1.2國內外概況當java
11、平臺發(fā)展到java 2的版本以后,為了適應不同級別計算機硬件的開發(fā)需要,java平臺形成了三個主要分支:l java 2, standard edition(j2se):是為臺式機而設計的,主要運行在linux, solaris, 或microsoft windows等操作系統(tǒng)上。l java 2, enterprise edition (j2ee):則是一個適合分布式的、多用戶、企業(yè)級應用系統(tǒng)運轉的平臺。它以j2se為基礎,增加了處理服務器端計算的功能。l java 2, micro edition (j2me):和j2se不同,它既不算是一個軟件也不能算是一則規(guī)范。準確地說,j2me是為了
12、支持象pda、手機等小型的嵌入式或移動設備而推出的一系列的技術和規(guī)范的總稱。它借用了j2se類庫的一部分,使用了更少的api,而且其j2me采用的java虛擬機(jvm)比j2se的jvm也要小得多。1.3研究內容 本課題研究的是基于j2me的手機貪吃蛇游戲,利用eclipseide工具和sun java me sdk 3.0,java語法和j2me系統(tǒng)的api來實現。主要研究的對象是: 1.面向對象的編程技巧;2.j2me的低級、高級界面的開發(fā); 3.j2me內專門游戲開發(fā)包game包的使用 4.多線程技術的應用; 5.簡單人工智能的實現。2 開發(fā)平臺與技術概述 2.1開發(fā)環(huán)境 操作系統(tǒng):m
13、icrosoft windows xp 程序語言:java 2 開發(fā)包:sun java(tm) wireless toolkit 2.5.2 for cldc ide:eclipse 3.2 2.2 wtk、eclipse與jam的介紹(1) wtk 的全稱是sun j2me wireless toolkit sun的無線開發(fā)工具包。這一工具包的設計目的是為了幫助開發(fā)人員簡化j2me的開發(fā)過程。使用其中的工具可以開發(fā)與 java technology for the wireless industry (jtwi, jsr 185) 規(guī)范兼容的設備上運行的j2me 應用程序。該工具箱包含了完
14、整的生成工具、實用程序以及設備仿真器。到本文寫作時為止可以獲取有四個版本,分別是1.0.4, 2.0, 2.1和2.2。每個版本都包括英語,日語,簡體中文,繁體中文4個語種包。wtk是sun提供的一個開發(fā)工具包。目前各大手機廠商往往把wtk經過自身的簡化與改裝,推出適合自身產品,如sonyericsson,nokia developers suit等,都屬于此種類型;而通過jbuilder, eclipse等ide,j2me開發(fā)包工具可以被綁定在這些集成開發(fā)環(huán)境中,進一步提高開發(fā)效率。(2)eclipse 是一個開放源代碼的、基于 java 的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組
15、服務,用于通過插件組件構建開發(fā)環(huán)境。幸運的是,eclipse 附帶了一個標準的插件集,包括 java 開發(fā)工具(java development tools,jdt)。eclipse是一個開放源代碼的軟件開發(fā)項目,專注于為高度集成的工具開發(fā)提供一個全功能的、具有商業(yè)品質的工業(yè)平臺。它主要由eclipse項目、eclipse工具項目和eclipse技術項目三個項目組成,具體包括四個部分組成eclipse platform、jdt、cdt和pde.jdt支持java開發(fā)、cdt支持c開發(fā)、pde用來支持插件開發(fā),eclipse platform則是一個開放的可擴展ide,提供了一個通用的開發(fā)平臺。
16、它提供建造塊和構造并運行集成軟件開發(fā)工具的基礎。2.3 java語言介紹(1)面向對象 面向對象其實是現實世界模型的自然延伸。現實世界中任何實體都可以看作是對象。對象之間通過消息相互作用。另外,現實世界中任何實體都可歸屬于某類事物,任何對象都是某一類事物的實例。如果說傳統(tǒng)的過程式編程語言是以過程為中心以算法為驅動的話,面向對象的編程語言則是以對象為中心以消息為驅動。用公式表示,過程式編程語言為:程序=算法+數據;面向對象編程語言為:程序=對象+消息。(2)平臺無關性 java是平臺無關的語言是指用java寫的應用程序不用修改就可在不同的軟硬件平臺上運行。平臺無關有兩種:源代碼級和目標代碼級。c
17、和c+具有一定程度的源代碼級平臺無關,表明用c或c+寫的應用程序不用修改只需重新編譯就可以在不同平臺上運行。(3)分布式 分布式包括數據分布和操作分布。數據分布是指數據可以分散在網絡的不同主機上,操作分布是指把一個計算分散在不同主機上處理。(4)可靠性和安全性 java最初設計目的是應用于電子類消費產品,因此要求較高的可靠性。java雖然源于c+,但它消除了許多c+不可靠因素,可以防止許多編程錯誤。首先,java是強類型的語言,要求顯式的方法聲明,這保證了編譯器可以發(fā)現方法調用錯誤,保證程序更加可靠;其次,java不支持指針,這杜絕了內存的非法訪問;第三,java的自動單元收集防止了內存丟失等
18、動態(tài)內存分配導致的問題;第四,java解釋器運行時實施檢查,可以發(fā)現數組和字符串訪問的越界,最后,java提供了異常處理機制,程序員可以把一組錯誤代碼放在一個地方,這樣可以簡化錯誤處理任務便于恢復。(5)多線程 線程是操作系統(tǒng)的一種新概念,它又被稱作輕量進程,是比傳統(tǒng)進程更小的可并發(fā)執(zhí)行的單位。3 j2me及其體系結構概述3.1 j2me簡介現在java-java2 platform大致可分為j2se、j2ee、j2me三類。j2se為java-java2 platform 的標準版,通常在pc上使用的java。j2ee是在j2se的api上,擴展了給企業(yè)使用ejb與servlet等主要使用在
19、服務器上的功能。而j2me則是面向家電和通信工具等微小設備。j2me的目標是微小設備,這類設備有許多種類,在這些設備的j2me當中,定義了cdc(connected device configuration),cldc(connected limited device configuration)這兩個configuration。cdc是以能用在個人網關、下一代移動電話、pda(個人數字助理)、家電設備、pos終端、車輛導航系統(tǒng)等上運行為前提設計出來的。cldc,是以能使用在移動電話、pda(個人數字助理)、家電設備、pos終端等上面為前提設計出來的。3.2 j2me 體系結構配置和簡表:配置
20、定義了一個設計在一系列類似硬件上運行的java平臺的能力。j2me的目標是家電與嵌入式設備,這類設備有很多種類,對應這些設備的j2me當中,定義了cdc(連接設備配置)和cldc(受限接設備配置)兩個配置,配置所提供的類函數只有java.lang, java.io,java.util包等j2se等核心類的子集。cldc是與手機相關的,它實際是定義一個設備制造商用來實現java運行環(huán)境的標準,第三方開發(fā)者只需要遵循這個標準。cldc主要影響java開發(fā)和軟件發(fā)布的以下方面: 1)目標設備的特性;2)安全模型:安全模型有兩個部分,虛擬機和應用程序安全。虛擬機安全層的目的是保護下面的設備不受任何執(zhí)行
21、代碼可能引起的損害。3.3 移動信息設備簡表概述3.3.1 midp的目標硬件環(huán)境1)顯示 :96*54象素,1位顏色,大約1:1比例;2)輸入: (a)單手鍵盤或者小鍵盤;(b)雙手的qwertv鍵盤;(c)觸摸屏。 3)內存: (a)128kb非易失性內存,供midp組件使用;(b)8kb的非易失性內存,供應用程序生成的永久數據使用;(c)32kb的易失性內存,供java堆使用。4)網絡:(a)雙響無線網絡,可間歇性連接;(b)通常是很有限的帶寬。3.3.2 midp應用程序 在midp上運行的java程序被稱為midlet。midlet是服從一些關于它運行環(huán)境和程序打包的一些規(guī)則。其運行
22、環(huán)境是啟動midlet,這是設備內置應用管理器的任務。應用程序能訪問到下面的一些資源:(1)震動文件中的所有文件。(2)midlet描敘文件的內容(jad)。3.3.3 cldc和midp庫中的類 打包:midlet應用一般采用震動文件的形式。這個文件應該包含運行應用程序需要的類和所有的資源文件,它也應該包含一個叫manifest.mf的清單文件。保存在震動文件中的清單文件是一個簡單的文本文件,包含屬性值。應用程序描敘(jads)在移動電話網絡上傳送大量的數據,需要有一個描敘文件讓用戶在沒有下載整個包之前來查看一下midlet震動的細節(jié)。4 手機游戲開發(fā)過程4.1 貪吃蛇游戲的規(guī)則簡介貪吃蛇游
23、戲的規(guī)則簡介在貪吃蛇游戲中,玩家操作由小方塊連接而成的蛇,去吃隨機散落在畫面內的小方塊,每吃一塊就增加一小方塊長度,要是撞壁以及撞自己的尾,就屬于失敗,如無失敗則直到通關為止。屏幕的長度的行向為11單位,縱向為18單位。在這個范圍內,玩家通過操作方向鍵來控制蛇的運動方向。該游戲的最大特色是屏幕自適應,無論各種手機,pda的屏幕大小如何,該游戲總是能獲得最佳的顯示效果。圖4.1游戲運行界面4.2詳細設計本游戲的操作流程:用戶在啟動midlet后,即進入游戲主畫面,屏幕開始顯示為歡迎畫面。用戶按下啟動按鈕后,就可以開始玩游戲。當用戶想暫停時,再次按一下啟動按鈕開始,游戲就暫停了,在暫停的情況下再按
24、開始按鈕,游戲繼續(xù)運行。任何時候按exit按鈕退出,游戲midlet都會終止。圖4.2 程序流程圖4.3代碼設計4.3.1游戲地圖代碼設計 游戲地圖是蛇的活動范圍和食物隨機散落的范圍,游戲的容器為行向為11單位,縱向為18單位,如下代碼:private final int ix = 10;/地圖的開始坐標 private final int iy = 10;/private final int swidth = 16;/圖標的寬度 private final int icells = 240;/地圖的列數 private final int irows = 320;/地圖的行數 private
25、 final int iboxw = swidth*icells;/地圖的寬采用二維繪圖工具:二維繪圖工具drawline采用4個參數直線起點的x、y坐標值和直線終點x、y的坐標值,例如:graphics.drawline(50,0,100,0);這行代碼會從位置(50,0)到(100,0)繪制一條直線。繪制一個矩形是一個類似的過程,不同的只是需要用起點加上寬度和高度的方式來指定這個對象。可以繪制透明的或者填充的矩形,甚至可以繪制圓角的矩形。4個繪制矩形的方法是:drawrect、drawroundedrect、fillrect和fillroundedrect。貪吃蛇和食物的代碼設計屏幕的長度
26、為行向為320單位,縱向為240單位;在這個范圍內,玩家操作方向鍵控制蛇的運動方向。該游戲的最大特色是屏幕自適應,無論各種手機,pda的屏幕大小如何,該游戲總是能獲得最佳的顯示效果。貪吃蛇最初由3個小正方形組成,小正方形是蛇的身體和游戲容器的組成部分。食物也由一塊小正方形組成,并且隨機散落在游戲框圖的區(qū)域內,待玩家操作游戲完成一個任務后面,再出現下個食物,小蛇每吃一個食物就增加一個長度。實現代碼如下:import javax.microedition.lcdui.*;import java.util.random;import javax.microedition.lcdui.game.*;p
27、ublic class snakegamesprite extends gamecanvas implements runnable public boolean isplay;public static int width, height; private snakes snakes;static final int snakes_num = 50;private threadthread;private int canvaswidth = getwidth(); private int canvasheight = getheight();public static longupdates
28、= 0;public static random rand;public intsnake_n= 3;public int eatfood = 0;private int maxrand = 1000;private int map_bg_x ;private int map_bg_y ;private int map_bg_w = 16;private int map_bg_h = 16; private int level= 1;public boolean addsnake_n= false;private int win=32;public int sleeptime;public s
29、nakegamesound snakegamesound;public splashscreen splashscreen; private final snakesmid midlet;private int soundmax=1; public boolean over = false; public boolean picover = false; long starttime=0; private gameoverscreen gameover; public image image; public menulist menulist; public int tempcontinue=
30、0; private display display; private int map_bg;private image imggamebg= new image4;/*建立一個if類的圖像數組gif*/private gifgold= new gif5;private gif cat= new gif2;private font font = font.getfont( font.face_system, font.style_bold, font.size_small ); private int snake_n,time_n; snakegamesprite(snakesmid midl
31、et,int snake_n,int time_n) super(true);setfullscreenmode(true);/*設置全屏模式,如何是放在height=getheight的后面則不會是全全屏*/this.midlet = midlet;this.time_n=time_n;sleeptime=time_n;width=getwidth();height=getheight(); load();starttime = system.currenttimemillis() - 0; private void load() rand= new random( system.curre
32、nttimemillis() );/用currenttimemillis方法檢測一段程序代碼運行時所花費的時間/*裝載一系列圖片*/try /*裝載蛇圖*/ image img2= image.createimage(/snake_n.png); snakes = new snakes(img2,img2.getwidth(),img2.getheight(); snakes.setsnakesnum(snakes_num); snakes.setcanvassize(canvaswidth,canvasheight);/*裝載食物圖蘑菇*/ for( int i=0; igold.lengt
33、h; i+ ) goldi= new gif(gold, 12, 16, 15 );/gold:名字,5:5張圖,19和15就是圖像的高寬的像素 /*裝載食物圖-貓*/ for( int i=0; icat.length; i+ ) cati= new gif(cat, 6, 21, 16 );/cat:名字,10:10張圖,21和16就是圖像的高寬的像素 /*裝載背景圖*/image temp_bg1 = image.createimage(/bg_tile_0.png);image temp_bg2 = image.createimage(/bg_tile_0a.png);int bgma
34、p = rand.nextint(maxrand);/取0到1000的隨機數,因為maxgraphics bg;for( int i=0; i100)bg.drawimage(temp_bg1, -i*16, 0, bg.left|bg.top);/被繪制的圖像,x軸y軸,基點elsebg.drawimage(temp_bg2, -i*16, 0, bg.left|bg.top);/*裝載障礙物*/bg = null;/釋放實例化對象可以使用bg=nul; temp_bg1 = null;/釋放實例化對象可以使用temp=nul; temp_bg2 = null;/釋放實例化對象可以使用tem
35、p=nul; system.gc();/釋放實例化對象語句 catch(exception e) e.printstacktrace(); replay( level );/snakes.initsnakes();/*裝載線程,預執(zhí)行*/public void start() /*開始由singactive決定聲音的進入與否*/if(midlet.singactive=true)snakegamesound.getinstance().loadresourse(soundmax);/snakegamesound.getinstance().start();isplay=true;thread
36、=new thread(this);thread.start();/*當用戶按下撥號鍵時游戲暫停下來*/ public void keypressed(int keycode) if (keycode = fire) tempcontinue+=1; if(tempcontinue%2!=0) stop(); snakegamesound.getinstance().stop(); else start(); / midlet.gamecanvasmenu_continue(); /*獲得鍵盤的動作*/private void input()int keystates=getkeystates
37、(); if (keystates & left_pressed) != 0) snakes.move(2); else if (keystates & right_pressed) != 0) snakes.move(3); else if (keystates & up_pressed) != 0) snakes.move(0); else if (keystates & down_pressed) != 0) snakes.move(1); /*按#鍵代碼暫停游戲*/ else if (keystates & key_pound) !=0) midlet.pauseapp(); publ
38、ic void stop() isplay=false;/*線程開始執(zhí)行* * throws interruptedexception */public void run()graphics g=getgraphics();/獲取graphics對象while(isplay) long start =system.currenttimemillis();input();/獲得鍵盤輸入paint(g); /繪制背景和蛇iscollide();long end=system.currenttimemillis();/獲取執(zhí)行完畢的事件int duration=(int)(end-start);if
39、(sleeptime50)sleeptime=50;if(durationsleeptime)/如果執(zhí)行時間小于循環(huán)預定時間,則等待到循環(huán)時間 try/wait(3000);/start();thread.sleep(sleeptime-duration);catch(interruptedexception ie)/*判斷蛇是否與自己重合*/public void iscollide()for (int i = 4;i=snakes.snake_n;i+)if(snakes.snakes00=snakes.snakesi0&snakes.snakes01=snakes.snakesi1)re
40、play(level); isplay=false; snakegamesound.getinstance().stop(); over=true; midlet.gamecanvasgameover(midlet.totaleatfood,over);/*負責各種圖形的最終繪制*/public void paint(graphics g) g.setcolor(0x000000); g.fillrect(0, 0, width, height);/*繪制背景*/ for( int i=0; imap_bg_x; i+ )/繪制背景(草地)for( int j=0; jmap_bg_y; j+
41、 )g.drawimage(imggamebg map_bgij , j*map_bg_h, i*map_bg_w, g.left|g.top); /*繪制食物gold*/ for( int i=0; igold.length; i+ )/調用類gif里的paint()來繪制gold圖形 goldi.paint(g); /*繪制食物cat*/ for( int i=0; icat.length; i+ )/調用類gif里的paint()來繪制cat圖形 cati.paint(g); /*蛇與四墻碰撞*/if( snakes.getx()width | snakes.gety()height )
42、/蛇頭碰到邊就重來 replay(level); isplay=false; snakegamesound.getinstance().stop(); over=true; midlet.gamecanvasgameover(midlet.totaleatfood,over); /*如果蛇與食物-蘑菇發(fā)生碰撞*/for( int i=0; iwin) /*讓聲音停止*/ snakegamesound.getinstance().stop(); isplay=false; midlet.win_splashscreen(); goldi.setpos();/碰著食物則重新定位食物的位置 /*如果
43、蛇與食物-貓發(fā)生碰撞*/for( int i=0; icat.length; i+ ) if( isintersect(snakes.getx(),snakes.gety(),8,8, cati.pos_x,cati.pos_y,cati.w, cati.h ) snakes.snake_n-=3;/蛇的身體自動減3 eatfood-=3;/記錄當前屏幕上吃食物的總數 midlet.totaleatfood-=3;/記錄吃食物的總數 /*不能讓蛇的長度、吃食物的量、吃食物的總數小于*/ if(snakes.snake_n=1) snakes.snake_n=1; if(eatfood=0) e
44、atfood=0; if(midlet.totaleatfood=0) midlet.totaleatfood=0; cati.setpos();/碰著食物貓則重新定位食物的位置 /*繪制蛇及字體*/ /*繪制字體靠左*/g.setcolor( 0xf0ff00 );/黃色g.setfont( font );g.drawstring( eat:+eatfood, 1, 2, 0 );/字體,坐標,坐標,方位/*繪制字體靠右*/g.setcolor( 0xf0ff00 );g.setfont( font );g.drawstring( eat:+eatfood, 3, 2, 0 );/字體,坐標
45、,坐標,方位/*繪制字體靠上*/g.setcolor( 0xf0ff00 );g.setfont( font );g.drawstring( eat:+eatfood, 2, 1, 0 );/字體,坐標,坐標,方位/*繪制字體靠下*/g.setcolor( 0xf0ff00 );g.setfont( font );g.drawstring( eat:+eatfood, 2, 3, 0 );/字體,坐標,坐標,方位/*繪制字體居中*/ g.setcolor( 0xff0000 ); g.setfont( font ); g.drawstring( eat:+eatfood, 2, 2, 0 );
46、/字體,坐標,坐標,方位 snakes.draw(g); flushgraphics();/將緩沖屏幕上的內容繪制到手機屏幕上/*碰撞檢測函數*/ boolean isintersect(int x1,int y1, int w1, int h1, int x2, int y2, int w2, int h2)/判斷蛇的頭是否和食物重合在做的動作 if( math.abs(x2-x1) (w1+w2)/2 & math.abs(y2-y1) (h1+h2)/2 )/math.abs(x2-x1):返回一個數字的絕對值 return true; else return false; /*增加蛇的
47、長度*/ public void addsnake(boolean addsnake_n) addsnake_n=true; /*把草地分在數組mapij中*/public void replay( int level ) map_bg_x= height/16;/把寬高分成16*16的小塊背景(x軸要多少塊)map_bg_y= width/16;/(y軸要多少塊)map_bg = new intmap_bg_xmap_bg_y;/撲滿整個背景要多少張圖片的總數for( int i=0; imap_bg_x; i+ )/繪制背景,從y軸開始繪制for( int j=0; jmap_bg_y;
48、j+ )int r = rand.nextint(maxrand);/取0到1000的隨機數,因為max /例:int i = rand.nextint(9); 0-9隨即數 可以用 math.random()*9; for( int k=0; kimggamebg.length; k+ )/從返回的隨機數中抽取 /其中的一幅出來作背景(imggamebg.length是4)if( r k+1 ) )/向右移k+1位,例:b=ai;向右移n位相當于除以2的n次方 / b1=ai;向左移n位相當于乘以2的n次方map_bgij = k;snakes.initsnakes();4.3.2操作控制代碼設計圖4.3 游戲運行畫面midp的游戲設計,本質上就是用一個線程或者定時器產生重繪事件,用線程和用戶輸入改變游戲狀態(tài)。這個游戲也不例外,啟動midlet后,就立即生成一個重繪線程,該線程每隔50ms繪制一次屏幕。當然,重繪時有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 場地設備回收合同協(xié)議
- 工程合伙入股協(xié)議合同書
- 地磚改造租房合同協(xié)議
- 夫妻共同債務合同協(xié)議
- 國外安裝合同協(xié)議
- 工程合同簽三方協(xié)議
- 工控安全服務合同協(xié)議
- 工型護坡磚采購合同協(xié)議
- 地下車位轉讓協(xié)議合同
- 大棚轉租合同協(xié)議
- 2025年注冊會計師(專業(yè)階段)題庫完美版帶答案分析
- 專利代理師考試題庫含答案2024
- 云南師大附中2025屆高三下學期第六次檢測物理試卷含解析
- DB12 T1230-2023 政務信息資源共享 總體框架
- 市政排水移交協(xié)議書
- 廣西壯族自治區(qū)馬山縣實驗高中-雙休背后:從“要我學”到“我要學”的轉變-高三家長會【課件】
- 湖南省長沙市四大名校2024-2025學年高三2月月考語文試題(原卷版+解析版)
- 中職世界歷史試題及答案
- 《政府采購管理研究的國內外文獻綜述》5500字
- 糖尿病護理查房提出問題
- T-ZMDS 10019-2024 經顱電刺激儀基本技術規(guī)范
評論
0/150
提交評論