最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一個MIDP俄羅斯方塊游戲的設(shè)計和實現(xiàn)

 更新時間:2006年12月23日 00:00:00   作者:  
文章來源:csdn 作者:陳萬飛

 

作者簡介

  陳萬飛,男,中南大學數(shù)軟系學士,曾任北京長城軟件高級程序員,系統(tǒng)分析師.有較為豐富的j2se,j2ee開發(fā)經(jīng)驗。目前致力于j2me研究工作。可通過chen_cwf@163.net與他聯(lián)系

摘要

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

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

  以下為幾張游戲截屏圖:

設(shè)計

1. 操作流程

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

  游戲畫面流程圖如下:

2. 算法

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

3. 數(shù)據(jù)結(jié)構(gòu)

  本游戲涉及到以下幾種數(shù)據(jù)結(jié)構(gòu)。

游戲區(qū)域

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

小磚塊

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

下墜物

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

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

 那么用什么數(shù)據(jù)結(jié)構(gòu)存儲一個下墜物呢,我們以"L"形的下墜物為例子來說明:

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

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堵墻和下邊的容器底在內(nèi)。所以用一個16X12的二維數(shù)組(程序里叫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}}

源代碼和可執(zhí)行代碼

  總共為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 程序設(shè)計入門>

 

相關(guān)文章

  • Java StringBuilder類相關(guān)知識總結(jié)

    Java StringBuilder類相關(guān)知識總結(jié)

    這篇文章主要介紹了Java StringBuilder類相關(guān)知識總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java:泛型知識知多少

    Java:泛型知識知多少

    這篇文章主要介紹了java泛型基礎(chǔ)知識及通用方法,從以下幾個方面介紹一下java的泛型: 基礎(chǔ), 泛型關(guān)鍵字, 泛型方法, 泛型類和接口,感興趣的可以了解一下
    2021-08-08
  • java使用jdbc鏈接Oracle示例類分享

    java使用jdbc鏈接Oracle示例類分享

    本文為大家提供一個java使用jdbc鏈接Oracle的示例類,大家參考使用吧
    2014-01-01
  • java如何導出insert語句并生成sql腳本

    java如何導出insert語句并生成sql腳本

    這篇文章主要介紹了java導出insert語句并生成sql腳本的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 利用maven deploy上傳本地jar至私服的方法

    利用maven deploy上傳本地jar至私服的方法

    這篇文章主要介紹了利用maven deploy上傳本地jar至私服的方法,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • SpringBoot讀取Resource下文件的4種方法

    SpringBoot讀取Resource下文件的4種方法

    這篇文章主要介紹了SpringBoot讀取Resource下文件的4種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • JVM的類加載器和雙親委派模式你了解嗎

    JVM的類加載器和雙親委派模式你了解嗎

    這篇文章主要為大家詳細介紹了JVM類加載器和雙親委派模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • tk.mybatis通用插件updateByPrimaryKeySelective無法自動更新列的解決辦法

    tk.mybatis通用插件updateByPrimaryKeySelective無法自動更新列的解決辦法

    tk.mybatis是一個很好用的通用插件,本文主要介紹了tk.mybatis通用插件updateByPrimaryKeySelective無法自動更新列的解決辦法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Java 獲取properties的幾種方式

    Java 獲取properties的幾種方式

    這篇文章主要介紹了Java 獲取properties的幾種方式,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下
    2021-04-04
  • Spring Boot集成Quartz注入Spring管理的類的方法

    Spring Boot集成Quartz注入Spring管理的類的方法

    本篇文章主要介紹了Spring Boot集成Quartz注入Spring管理的類的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04

最新評論

宣恩县| 台东县| 东方市| 龙胜| 西林县| 南木林县| 拉萨市| 色达县| 武隆县| 崇礼县| 延吉市| 建宁县| 灌云县| 栖霞市| 集贤县| 牟定县| 白银市| 吐鲁番市| 基隆市| 崇仁县| 永福县| 泽州县| 彝良县| 会昌县| 寿宁县| 永善县| 扬中市| 阳山县| 驻马店市| 庆云县| 郴州市| 广安市| 犍为县| 政和县| 平罗县| 广水市| 南开区| 钟祥市| 自治县| 汕尾市| 新闻|