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