J2me-開發(fā)實例-俄羅斯方塊.ppt
《J2me-開發(fā)實例-俄羅斯方塊.ppt》由會員分享,可在線閱讀,更多相關(guān)《J2me-開發(fā)實例-俄羅斯方塊.ppt(26頁珍藏版)》請在裝配圖網(wǎng)上搜索。
JavaME移動開發(fā)編程 開發(fā)實例 實例 俄羅斯方塊 一 游戲設(shè)計 操作流程本游戲的操作流程非常簡單 玩家啟動MIDlet啟動后 即進入游戲主畫面 屏幕開始顯示為歡迎畫面 玩家按下任意鍵 進入游戲 當(dāng)玩家按下 開始 按鈕后 就可以開始玩游戲了 在游戲過程中 玩家可以按下 暫停 按鈕暫停游戲運行 按下 繼續(xù) 按鈕 恢復(fù)游戲運行 任何時候按 退出 按鈕 MIDlet都會終止 流程圖 游戲分析 要實現(xiàn)上述游戲功能 我們需要實現(xiàn)哪些類 首先 我們需要一個控制類 用來管理整個程序運行的流程 其次 我們需要一個游戲類 用來實現(xiàn)游戲的核心功能 再次 我們需要一個類來實現(xiàn)產(chǎn)生下一個方塊 方塊移動和旋轉(zhuǎn)等操作 其他的一些輔助類 諸如定時器任務(wù)類等 控制類的實現(xiàn) 控制類的功能比較簡單 根據(jù)流程 它主要控制在顯示了歡迎界面后 啟動游戲類的顯示 二 核心邏輯的設(shè)計思路 游戲的實現(xiàn)其實就是把一個現(xiàn)實世界的物理模型抽象成能用程序描述的邏輯模型 我們回想一下俄羅斯方塊的游戲過程 一個有一定形狀的方塊從屏幕頂部往下掉 而且這個方塊可以旋轉(zhuǎn) 可以左右移動 那么我們來分解這個過程 俄羅斯方塊的游戲過程 首先 考慮怎樣實現(xiàn)方塊不停的從屏幕頂端往下落的過程 要上方塊不停的從屏幕頂端往下落 這是一個重復(fù)的且按照一定時間間隔的行為 我們自然可以想到在這里用一個定時器來實現(xiàn)這一個重復(fù)的過程 我們只需要在定時器的定時任務(wù)里完成方塊的下落就行了 俄羅斯方塊的游戲過程 其次 考慮方塊表示和方塊的旋轉(zhuǎn) 移動 俄羅斯方塊共有7種不同類型的方塊 上面的7種方塊中 每一種類型的方塊都可以看作是單位方塊的組合 且都是由4個單位方塊組成 俄羅斯方塊的游戲過程 另外 方塊在屏幕上的移動是以一個單位方塊為單位移動到的 那么我們可以把屏幕劃分成若干個小方格 每次移動就向相應(yīng)的方向移動一小格 如下圖 俄羅斯方塊的游戲過程 向右移動五次 向下移動五次 核心邏輯的設(shè)計思路 在本例中 方塊都是用一個填充顏色的實心矩形表示的 那么我們?yōu)榱艘硎痉艍K 需要先把屏幕劃分成mxn個小格子 在本例中 m 15 n 11 為了表示這些格子 我們可以定義一個二維數(shù)組intScreenBlock newint 11 15 來表示屏幕中的每個小格子 這里為了和屏幕坐標(biāo)統(tǒng)一起來 所以數(shù)組的第一維表示一行多少列 第二維表示總共多少行 這樣與x y是統(tǒng)一的 有了這個二維數(shù)組 我們可以將方塊對應(yīng)屏幕位置的二維數(shù)組的相應(yīng)數(shù)據(jù)設(shè)置為1 而沒有方塊的地方設(shè)置為0 這樣我們在屏幕渲染時 就掃描整個二維數(shù)組 只要數(shù)組元素為1 我們就將相應(yīng)的區(qū)域著色 核心邏輯的設(shè)計思路 下面考慮怎樣表示不同類型的方塊以及方塊的旋轉(zhuǎn) 接著上面思考 既然我們的屏幕上已經(jīng)劃分好了小格子 那么我們只要把每種方塊貼到屏幕上的相應(yīng)位置的格子里就行了 因此我們需要知道每種方塊對應(yīng)的那些格子應(yīng)該著色 我們可以同樣用數(shù)組來標(biāo)記每種不同的方塊應(yīng)該在哪些區(qū)域著色 因為在這7種方塊中 每一種類型的方塊無論長或?qū)挾疾怀^4個單位方塊 所以我們可以用一個4x4的矩陣來表示 核心邏輯的設(shè)計思路 方塊的旋轉(zhuǎn) 我們其實是用了一個4x4的二維數(shù)組來表示一種方塊 那么我們在程序里可以用矩陣旋轉(zhuǎn)的方法把放塊旋轉(zhuǎn)后的結(jié)果計算出來 這是一種方法 另一種方法 因為我們每次旋轉(zhuǎn)都是旋轉(zhuǎn)90度 那么每種方塊也就只有4種狀態(tài) 7個放塊也就28種狀態(tài) 那么我們可以在程序里將這28種狀態(tài)都寫出來 那么旋轉(zhuǎn)的時候 我們只要順序的取這些方塊的狀態(tài)就可以了 因此我們定義一個類BlockTypeArray來存儲這些狀態(tài) 方塊的移動 有了前面的數(shù)據(jù)結(jié)構(gòu) 我們可以設(shè)計一個類Block來控制方塊的移動和旋轉(zhuǎn)等操作 那么這個Block類有一個 x y屬性對應(yīng)了這個方塊在屏幕坐標(biāo)中的位置 當(dāng)我們要移動方塊時 只要改變這個x y坐標(biāo)就可以了 至于渲染得時候 也是根據(jù)這個x y坐標(biāo)在加上每個方塊的偏移位置 在屏幕中將這個方塊畫出來 MainCanvas類的實現(xiàn) 完成的功能該類實現(xiàn)游戲的核心邏輯 需要完成的功能 實現(xiàn)游戲的控制 用戶通過這個類實現(xiàn)與游戲的交互 游戲邏輯的實現(xiàn)包括 讓方塊定時下落判斷方塊左右移動和下落的可能性判斷一個放塊所涉及的行是否填滿消去填滿的行等 流程 實現(xiàn) 繪圖采用雙緩沖由于游戲中會頻繁的清除屏幕 畫方塊 為了避免出現(xiàn)屏幕閃爍的現(xiàn)象 我們需要采用雙緩沖技術(shù) 實現(xiàn) 在屏幕上畫方塊根據(jù)前面的分析 我們會將游戲區(qū)域劃分成15x11個小格子 并用一個二維數(shù)組來表示這些小格子 通過分析 我們會發(fā)現(xiàn) 這些小格子不外乎有3種狀態(tài) 沒有方塊映射到當(dāng)前格子上 有方塊固定在當(dāng)前格子上 有方塊經(jīng)過當(dāng)前格子 為此 我們可以用數(shù)字0 1 2分別來表示屏幕上每個小格子的當(dāng)前狀態(tài) 實現(xiàn) 有了格子的狀態(tài)表示 那么我們在paint函數(shù)里畫圖的時候 先清除這個屏幕 然后掃描代表屏幕小格子的二維數(shù)組 如果當(dāng)前的小格子狀態(tài)為0 則不用對當(dāng)前小格子所代表的屏幕區(qū)域作處理 若狀態(tài)為1 在將當(dāng)前小格子所代表的區(qū)域畫上活動方塊的顏色 若狀態(tài)為2 則將當(dāng)前小格子所代表的區(qū)域畫上固定方塊的顏色 如下圖 實現(xiàn) 0 0 0 0 方塊的定時下落 在程序中 會隨機產(chǎn)生一個方塊 要讓這個方塊定時下落 根據(jù)上面所講的block類 我們可以知道只要在定時器任務(wù)里 將具體的某個block的成員變量y 1即可 方塊的左右移動 旋轉(zhuǎn)和下落 方塊左右移動 旋轉(zhuǎn)和下落的數(shù)據(jù)表達在上面的Block類里已經(jīng)實現(xiàn)了 在MainCanvas類里需要解決的問題是 怎樣判斷方塊這些動作的可能性 有了我們在前面所做的設(shè)計 要判斷方塊的這些可能性還是比較簡單的 我們可以先記錄下方塊還沒有作動作的狀態(tài) 包括它的x y和它的類型 讓后讓方塊做這些動作 方塊做完了這些動作后 它有了新的位置和狀態(tài) 對應(yīng)的x y和類型會有所改變 那我們判斷這個新的位置核心的類型所對應(yīng)的方塊數(shù)據(jù)會不會和其他方塊或者屏幕的邊界發(fā)生碰撞 如果發(fā)生碰撞 則當(dāng)前的方塊的狀態(tài)改變無效 我們將它重設(shè)會沒有改變前的狀態(tài) 否則就承認(rèn)當(dāng)前的改變 消除行的判定 有了前面的基礎(chǔ) 消除行的判定是比較容易實現(xiàn)的 現(xiàn)在 我們用1來表示屏幕中某個小格子是方塊固定后的狀態(tài) 那么我們可以循環(huán)掃描屏幕中的每一行 如果這一行中的每個小格子的狀態(tài)均為1 則表明這一行可以消除 消除的時候 我們把這一行的小格子的狀態(tài)置為0就可以了 另外 我們消除一行時 還需要將這一行上面的方塊順序的往下挪 要達到這個目的 我們只需要在消除行時 對每一列的數(shù)據(jù)元素進行移位就行了- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- J2me 開發(fā) 實例 俄羅斯方塊
鏈接地址:http://m.appdesigncorp.com/p-6357333.html