State模式在J2ME遊戲設計中的應用(轉)
State模式在J2ME遊戲設計中的應用(轉)[@more@] 遊戲設計中的狀態轉換是一個既是非常重要又十分複雜的部分。我前幾天做移植的時候看到一個public void keyPressed(int keyCode)中間竟然有著近2000千行的程式碼,這樣的話冗長的程式碼不僅不符合OO的思更加嚴重的是會打擾我們的程式思路。這兩天運用State模式做了一個J2ME遊戲中的狀態轉換由於只是一個實驗的例子所以只做了開始選單和幫助的轉換,在這個框架下再加入其他的狀態實際就是十分的簡單的了。 現在DEMO中只有兩個狀態,兩種狀態下keyPressed和paint的功能是不同的,我們用狀態模式來實現各種狀態下的keyPressed和paint的功能功能。 首先定義抽象狀態State介面,這個介面指定了keyPressed和paint的行為 public interface State { public void onKeyPressed(int keyCode,StateManage _current); public void paint(Graphics g); } State介面keyPressed和paint方法,我們實現兩個子類HelpMenuState和MainMenuState,分別表示主選單狀態和HELP選單的狀態,並實現具體的onKeyPressed和paint方法: public class MainMenuState implements State { /**省略變數的宣告和初使化部分*/ public void onKeyPressed(int keyCode, StateManage _current) { switch (whichMenu) { case 0: mainMenuKeyPressed(keyCode,_current); break; case 1: break; } } private void mainMenuKeyPressed(int keyCode,StateManage _current) { switch (keyCode) { case 1: //KEY_UP = 1; menuIndex = menuIndex <= 0 ? menuMain.length - 1 : --menuIndex; break; case 6://KEY_DOWN = 6; menuIndex = menuIndex >= menuMain.length - 1 ? 0 : ++menuIndex; break; case 8://KEY_MIDDLE = 8; if (menuIndex == 2) _current.setState(new HelpMenuState()); break; } } public void paint(Graphics g) { switch (whichMenu) { case 0: drawMainMenu(g); break; } } private void drawMainMenu(Graphics g) { g.drawImage(imgMenu, 0, 0, 0); g.setColor(0, 0, 0); g.setFont(GameInfo.FONT_LARGE); for (int i = 0; i < menuMain.length; i++) g.drawString(menuMain[i], 120, 70 + i * 20, Graphics.TOP | Graphics.HCENTER); g.drawImage(imgIndex, 60, 65 + 20 * menuIndex, 0); //畫index圖 g.setColor(255, 0, 0); g.drawString(menuMain[menuIndex], 120, 70 + 20 * menuIndex, Graphics.TOP | Graphics.HCENTER); } } public class HelpMenuState implements State { /**省略變數的宣告和初使化部分*/ public void onKeyPressed(int keyCode, StateManage _current) { switch (whichMenu) { case 0: helpMenuKeyPressed(keyCode, _current); break; case 1: break; } } public void helpMenuKeyPressed(int keyCode, StateManage _current) { switch (keyCode) { case 1: //KEY_UP = 1; menuIndex = menuIndex <= 0 ? helpMenuString.length - 1 : --menuIndex; break; case 6://KEY_DOWN = 6; menuIndex = menuIndex >= helpMenuString.length - 1 ? 0 : ++menuIndex; break; case 8://KEY_MIDDLE = 8; if (menuIndex == 4) { _current.setState(new MainMenuState()); } break; } } public void paint(Graphics g) { drawHelp(g); } private void drawHelp(Graphics g) { for (int i = 0; i <= 15; i++) { for (int j = 0; j <= 10; j++) { g.drawImage(img, 0 + 24 * i, 0 + 24 * j, 0); } } g.setColor(251, 220, 48); g.setFont(GameInfo.FONT_LARGE); g.drawString("<< HELP >>", 120, 40, Graphics.TOP | Graphics.HCENTER); for (int i = 0; i < helpMenuString.length; i++) g.drawString(helpMenuString[i], 120, 80 + i * 25, Graphics.TOP | Graphics.HCENTER); g.setColor(255, 0, 0); g.drawString(helpMenuString[menuIndex], 120, 80 + 25 * menuIndex, Graphics.TOP | Graphics.HCENTER); } } 最後,定義StateManage,StateManage的例項作為狀態轉換的控制器: public class StateManage { State _current; public StateManage(){ _current = new MainMenuState(); //以主選單開始 }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-951593/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 設計模式在 TypeScript 中的應用 – 策略模式設計模式TypeScript
- 設計模式在vue中的應用(一)設計模式Vue
- 設計模式在vue中的應用(七)設計模式Vue
- 設計模式在vue中的應用(六)設計模式Vue
- 設計模式在vue中的應用(三)設計模式Vue
- 設計模式在vue中的應用(二)設計模式Vue
- 設計模式在vue中的應用(四)設計模式Vue
- 設計模式在vue中的應用(五)設計模式Vue
- 設計模式之--策略模式及其在JDK中的應用設計模式JDK
- 設計模式 - 命令模式詳解及其在JdbcTemplate中的應用設計模式JDBC
- 設計模式 - 迭代器模式詳解及其在ArrayList中的應用設計模式
- 設計模式及其在spring中的應用(含程式碼)設計模式Spring
- 設計模式-狀態模式(State Pattern)設計模式
- 設計模式之狀態模式(State)設計模式
- AI在視訊遊戲中的應用AI遊戲
- 遊戲設計裡的那些色彩應用遊戲設計
- 設計模式應用場景之Model設計中可以用到的設計模式設計模式
- 設計模式學習筆記(十六)迭代器模式及其在Java 容器中的應用設計模式筆記Java
- socket程式設計在TCP中的應用程式設計TCP
- .net core 中的經典設計模式的應用設計模式
- 視訊在H5遊戲中的應用H5遊戲
- 人工智慧(AI)在遊戲中的應用(下)人工智慧AI遊戲
- 因果推斷在騰訊遊戲中的應用遊戲
- 淺談設計模式在iOS開發實戰專案中的應用設計模式iOS
- State設計模式上篇(理論篇)設計模式
- 如何在程式碼中應用設計模式設計模式
- SoIidWorks在鈑金件設計中的應用
- FMEA在車門設計中的應用策略
- FMEA在架構設計中的應用分析架構
- 【遊戲設計】淺談快速反應事件(QTE)的應用遊戲設計事件QT
- 演算法、資料結構、與設計模式等在遊戲開發中的運用 (一):單例設計(Singleton Design)演算法資料結構設計模式遊戲開發單例
- 設計模式學習筆記(十四)責任鏈模式實現以及在Filter中的應用設計模式筆記Filter
- 設計模式學習筆記(十三)組合模式及其在樹形結構中的應用設計模式筆記
- 關於“斯金納箱”及相關理論在遊戲設計中應用的討論遊戲設計
- 策略模式在應用中的實踐模式
- 微分方程在遊戲經濟建模中的應用遊戲
- [譯] 設計 QA 在應用程式設計中的重要性程式設計
- 遊戲基礎知識——“骸骨”元素在遊戲中的設計要點遊戲
- 設計模式 | 策略模式及典型應用設計模式