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