亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

一個MIDP俄羅斯方塊游戲的設計和實現

2020-01-31 16:52:30
字體:
來源:轉載
供稿:網友
文章來源:csdn 作者:陳萬飛

 

作者簡介

  陳萬飛,男,中南大學數軟系學士,曾任北京長城軟件高級程序員,系統分析師.有較為豐富的j2se,j2ee開發經驗。目前致力于j2me研究工作??赏ㄟ^chen_cwf@163.net與他聯系

摘要

  本文給出了一個基于MIDP1.0的俄羅斯方塊游戲的設計方案,并給出全部實現源代碼。該游戲的最大特色是屏幕自適應,無論各種手機,PDA的屏幕大小如何,該游戲總是能獲得最佳的顯示效果。游戲在J2me wireless toolkit 2.1的4種模擬器上測試通過。

聲明:本游戲代碼最初來源于一個日本開源項目(見參考資料1),筆者有大幅度修改。

  以下為幾張游戲截屏圖:

設計

1. 操作流程

  本游戲的操作流程非常簡單,用戶啟動MIDlet啟動后,即進入游戲主畫面,屏幕開始顯示為歡迎畫面。用戶按下[開始]按鈕后,就可以開始玩游戲了,當用戶想暫停時,再次按一下[開始]按鈕,游戲就暫停了,在暫停的情況下再按[開始]按鈕,游戲繼續運行。任何時候按[退出]按鈕,游戲MIDlet都會終止.

  游戲畫面流程圖如下:

2. 算法

  MIDP的游戲設計,本質上就是用一個線程或者定時器產生重繪事件,用線程和用戶輸入改變游戲狀態。這個游戲也不例外,啟動MIDlet后,就立即生成一個重繪線程,該線程每隔50ms繪制一次屏幕。當然,重繪時有一些優化措施,并不是屏幕上所有的像素都需要重繪,而是有所選擇,比如游戲畫布上那些已經固定下來的下墜物(下墜物一共有7種,由4個小磚塊組成,每種下墜物顏色固定,可以上下左右旋轉)就不需重繪。游戲畫布是一個CommandListener,可以接受用戶鍵盤命令,控制下墜物的左移,右移,下移,旋轉動作。整個游戲的流程控制體現在游戲畫布對象的paint()方法里。paint()根據當前的游戲狀態,繪制出當時的游戲畫面。歡迎畫面和Game Over畫面的繪制相當簡單。游戲暫停畫面的繪制也相當容易,就是設立標志,讓paint()執行的時候無需真正執行重繪動作。對于游戲處于運行狀態的畫面的繪制,則需要在下墜物的當前位置,繪制下墜物。在繪制下墜物之前,判斷下墜物是否還能下墜,如果能下墜的話,就讓它下落一格,再進行繪制,如果下墜物已無法下墜,則判斷游戲是否處于Game Over狀態,如果是處于Game Over狀態的話,則設置游戲狀態為Game over狀態,這樣畫布在下一次重繪時就繪出Game Over的畫面.如果游戲不是處于Game Over狀態,則把下墜物固定下來,同時檢查游戲畫布上下墜物當前行下面的所有行,看是否需要進行行刪除動作,如果需要行刪除,則清除游戲地圖上被刪行的數據,再把被刪行繪制成背景色。然后初始化一個新的下墜物,繪制這個新的下墜物。paint方法的流程圖如下所示:

3. 數據結構

  本游戲涉及到以下幾種數據結構。

游戲區域

  游戲區域為手機或者PDA屏幕的一部分,該區域為正方形,邊長一定能被16整除(因為俄羅斯游戲區域剛好為16個小磚塊長,16個小磚塊寬的方形)。無論在水平方向還是垂直方向,該區域都要處于屏幕的居中位置。游戲區域在水平方向上分為2部分,一部分為12個小磚塊寬,用來顯示游戲容器,另一部分為4個小磚塊寬,用來顯示下一個下墜物和分數。

小磚塊

  小磚塊是下墜物和游戲容器的組成部分。表現為一個正方形,邊長為游戲區域邊長的1/16。每個小磚塊在繪制的時候,4邊會留出1個象素寬,繪制成白色或者灰色,這樣磚塊之間才有間隙。每種小磚塊也有id,分別為1到8。我們可以用一個顏色數組(程序里叫BRICK_COLORS)存儲這8種顏色。若某種小磚塊的id為3,那么該小磚的顏色為BRICK_COLORS[3-1].

下墜物

  下墜物本質上為16個小磚塊組成的正方形。下墜物一共有7種,比如有"田"字形的,"L"字形的等等。每種下墜物一共有4種旋轉變化。 每種下墜物都有一個id,分別為1到7。因為對于一種下墜物來說,其顏色是固定的。我們同樣可以用該種顏色在BRICK_COLORS數組中的下標值加上1,作為下墜物的id.

  例如"L"形下墜物的id為3,其變化形式為:

 那么用什么數據結構存儲一個下墜物呢,我們以"L"形的下墜物為例子來說明:

  因為每一個下墜物有四種狀態,所以我們可以考慮用一個長度為4的數組來存貯一個下墜物的4種狀態,數組中每一個元素表示該下墜物的一種狀態。那么用什么東西來表示某個下墜物的某種狀態呢,從上圖可以看出,用一個4X4的二維數組來存儲一種下墜物的一種狀態最合適不過了。在有色磚塊出現的位置,值為1,而只有背景顏色,無需繪制的位置,值為0。因此,整個"L"形下墜物的4種狀態可以用一個3維數組來表示:

protected int blockpattern3[][][] = {
{{0, 1, 0, 0}, {0, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 0, 0}},
{{0, 0, 0, 0}, {0, 1, 1, 1}, {0, 1, 0, 0}, {0, 0, 0, 0}},
{{0, 0, 0, 0}, {0, 1, 1, 0}, {0, 0, 1, 0}, {0, 0, 1, 0}},
{{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 1, 1, 0}, {0, 0, 0, 0}}
};

游戲地圖

  游戲地圖是用來存儲游戲容器上的固定磚塊的。游戲容器為一個寬為12個小磚塊單位,高為16個小磚塊單位,包括左右2堵墻和下邊的容器底在內。所以用一個16X12的二維數組(程序里叫mapdata)來存儲固定磚塊。如果mapdata[i][j]=k(k!=0).那么就表示游戲容器的i行j列上有個固定的小磚塊,小磚塊的顏色值為BRICK_COLORS[k-1].如果k=0則表示i行j列無磚塊。

  因此對于以下這種游戲運行時刻,mapdata的值為{{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}
{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}
{8,0,0,0,0,0,0,0,0,1,1,8}{8,0,0,0,0,0,0,0,0,1,1,8}{8,0,0,0,0,0,7,7,5,1,1,8}{8,0,5,0,0,7,2,5,5,1,1,8}
{8,8,8,8,8,8,8,8,8,8,8,8}}

源代碼和可執行代碼

  總共為3個文件:src.rar, ketrisgame.jad, ketrisgame.jar 說明:src.rar中有全部的源代碼。ketrisgame.jar中還有程序運行所需要的資源文件.安裝wtk2.1后,讓ketrisgame.jad和ketrisgame.jar處于同一目錄下(目錄路徑中不能含有中文和空格 切記),雙擊ketrisgame.jad文件,即可在模擬器里運行游戲。

參考資料

 http://www.javadrive.jp/j2me/game/3/index.html

<j2me in a nutshell>

<java 手機/PDA 程序設計入門>

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内偷自视频区视频综合| 美女视频黄免费的亚洲男人天堂| 在线成人激情黄色| 亚洲欧美日韩一区二区在线| 成人自拍性视频| 狠狠久久五月精品中文字幕| 亚洲色图综合网| 久久精品亚洲热| 亚洲偷熟乱区亚洲香蕉av| 国产日韩欧美综合| 亚洲日本中文字幕| 精品中文字幕久久久久久| 青青久久av北条麻妃黑人| 性夜试看影院91社区| 国产精品91久久| 日韩美女视频中文字幕| 中文字幕久热精品在线视频| 97在线精品国自产拍中文| 97久久超碰福利国产精品…| 91av在线免费观看视频| 久久久999国产| 成人有码在线播放| 国产91在线视频| 4444欧美成人kkkk| 2018日韩中文字幕| 国产日韩在线观看av| 精品无人区乱码1区2区3区在线| 亚洲欧洲日本专区| 午夜欧美不卡精品aaaaa| 国产精品免费久久久久久| 欧洲美女7788成人免费视频| 国产精品极品美女粉嫩高清在线| 日韩免费在线观看视频| 亚洲国产欧美一区二区三区同亚洲| 成人免费视频网| 最近的2019中文字幕免费一页| 日韩**中文字幕毛片| 国产在线播放91| 51精品国产黑色丝袜高跟鞋| 午夜免费日韩视频| 亚洲xxx视频| 亚洲国产高清福利视频| 97视频在线看| 亚洲精品99久久久久中文字幕| 亚洲欧洲偷拍精品| 都市激情亚洲色图| 欧美成人h版在线观看| 亚洲免费福利视频| 成人av在线天堂| 日韩电影中文字幕av| 伊人一区二区三区久久精品| 欧美日韩加勒比精品一区| 国产亚洲欧美视频| 7m精品福利视频导航| 欧美午夜精品久久久久久浪潮| 97视频在线观看网址| 亚洲国产欧美一区| 欧美一区深夜视频| 国产精品扒开腿做爽爽爽视频| 97超碰国产精品女人人人爽| 亚洲天堂av综合网| 超在线视频97| 日本韩国欧美精品大片卡二| 欧美日韩国产精品一区二区不卡中文| 狠狠躁夜夜躁人人爽天天天天97| 5252色成人免费视频| 色偷偷888欧美精品久久久| 中文字幕精品在线| 国产成人在线一区二区| 国产视频丨精品|在线观看| 2018中文字幕一区二区三区| 日韩国产欧美精品在线| 亚洲精品免费av| 原创国产精品91| 2019av中文字幕| 国产精品观看在线亚洲人成网| 欧美日韩亚洲视频一区| 韩国精品美女www爽爽爽视频| 亚洲少妇中文在线| 9.1国产丝袜在线观看| 欧美日韩成人免费| 国产精品久久久久久久app| 日韩成人小视频| 超碰91人人草人人干| 国产精品普通话| 97碰碰碰免费色视频| 日韩av片电影专区| 国产亚洲视频在线观看| 国产精品成人国产乱一区| 国产999视频| 国产日韩欧美黄色| 精品国产欧美一区二区三区成人| 亚洲视频第一页| 国产在线久久久| 日韩亚洲欧美中文在线| 69av在线播放| 欧美日韩美女在线观看| 精品国产区一区二区三区在线观看| 欧美激情videoshd| 精品人伦一区二区三区蜜桃网站| 国产精品欧美激情| 国产成人极品视频| 亚洲欧美中文在线视频| 亚洲a级在线播放观看| 国产欧美日韩高清| 8x拔播拔播x8国产精品| 精品福利在线观看| 午夜精品久久久久久久99黑人| 中文字幕日韩精品有码视频| 18性欧美xxxⅹ性满足| 久久免费视频网| 欧洲中文字幕国产精品| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美成人中文字幕在线| 日韩**中文字幕毛片| 欧美日韩亚洲一区二区三区| 国产极品jizzhd欧美| 欧美成人免费在线视频| 欧美成人性色生活仑片| 日韩精品视频在线免费观看| 欧洲日韩成人av| 亚洲第一av网| 国产有码在线一区二区视频| 中文字幕精品—区二区| 久久久免费观看| 一区二区三区日韩在线| 一区二区三区四区精品| 亚州精品天堂中文字幕| 国产综合久久久久| 亚洲国产欧美久久| 国产激情久久久久| 欧美国产日韩中文字幕在线| 国产精品av在线| 国产精品久久久久久久久久久久久| 国产精品一区二区女厕厕| www.xxxx欧美| 青青草一区二区| 欧美精品videossex88| 2024亚洲男人天堂| 97精品免费视频| 久久免费在线观看| 高清欧美性猛交xxxx| 亚洲一区二区在线播放| 亚洲欧美激情精品一区二区| 欧美激情videos| 91精品在线播放| 亚洲美女在线看| 欧美日韩国产丝袜另类| 日本精品一区二区三区在线播放视频| 狠狠色噜噜狠狠狠狠97| 日韩一级裸体免费视频| 国产在线视频2019最新视频| 欧美日韩午夜激情| 北条麻妃久久精品| 久久福利视频导航| 在线电影av不卡网址| 黑人巨大精品欧美一区免费视频| 日本欧美中文字幕| 欧美韩国理论所午夜片917电影| 69久久夜色精品国产7777| 亚洲欧洲日韩国产| 97av在线播放| 97精品国产97久久久久久春色| 在线观看中文字幕亚洲|