本項目代碼共有17個類,能夠分爲活動類、視圖類、遊戲處理類、輔助功能類這4個部分canvas
該部分包含一個類:MagicTower類
此類繼承了Activity類,是本項目的主活動。佈局
該部分實現了遊戲的界面顯示,包含了八個類:GameView類、GameScreen類、MainMenu類、SplashScreen類、HelpScreen類、AboutScreen類、FightScreen類、ThreadCanvas類字體
GameView類
此類繼承了View類,是概念層類。線程
GameScreen類
此類繼承了GameView類,是遊戲的遊戲運行視圖。3d
MainMenu類
此類繼承了GameView類,是遊戲的主菜單視圖。code
SplashScreen類
此類繼承了GameView類,是遊戲的音效選擇視圖。blog
HelpScreen類
此類繼承了GameView類,是遊戲的幫助視圖。繼承
AboutScreen類
此類繼承了GameView類,是遊戲的關於信息視圖。遊戲
FightScreen類
該類是遊戲的戰鬥視圖,因爲該視圖顯示與遊戲運行視圖之上,調用該類須要傳入GameScreen類。事件
ThreadCanvas類
該類是遊戲的操做控制類,做爲獨立線程獨立與其餘視圖以外,用於接收用戶的觸屏或按鍵等操做。
該部分實現了遊戲的後臺處理,包括六個類:MainGame類、GameMap類、HeroSprite類、FightCalc類、Task類、MySet類
MainGame類
此類是遊戲的運行本體,負責在各個視圖間的調度。
GameMap類
此類負責處理遊戲的地圖信息。
HeroSprite類
此類負責遊戲的主角(即用戶操做的角色)數據以及對主角的操做處理。
FightCalc類
此類負責遊戲的戰鬥處理。
Task類
此類負責處理遊戲的npc事件以及遊戲關鍵道具。
MySet類
此類負責處理遊戲的基本數據信息設定,如界面長寬、字體大小、基本文字圖像顯示等。
該部分添加了一些遊戲的輔助功能,包括了兩個類:CMIDIPlayer類和TextUtil類
CMIDIPlayer類
該類是遊戲的音樂播放器,負責播放遊戲背景音樂。
TextUtil類
該類負責對遊戲的一些文本文字進行處理和顯示輸出。
遊戲運行時首先會調用主活動MagicTower;
MagicTower在運行過程當中會打開ThreadCanvas類對用戶操做進行監控,以及MainGame實例化遊戲本體;
MainGame類在實例化的過程當中會打開SplashScreen界面;
用戶將在SplashScreen界面顯示是否開啓音效,根據觸點位置判斷是否開啓,選擇後將進入MainMenu界面;
在MainMenu界面,用戶經過點擊操做杆的上和下按鍵控制MainMenu中的curItem
參數,選擇當前的選項,點擊確認鍵後將根據curItem
參數的值實例化進入AboutScreen界面、HelpScreen界面或是GameScreen界面;
在AboutScreen界面、HelpScreen界面將顯示遊戲的相關信息,點擊操做杆的上和下按鍵以外的部分將返回MainMenu界面;
在GameScreen界面實例化的過程當中,將實例化HeroSprite、GameMap和Task三個類,以獲取主角屬性、地圖信息、事件信息等數據。然後在GameScreen界面將從上至下分顯示遊戲地圖、角色狀態欄、操做欄三段圖像。
經過操做欄能夠對主角的行動進行控制,經過方向按鍵能夠修改HeroSprite中的座標;
根據主角的座標以及操做,並根據地圖的佈局能夠修改當前狀態type值
;
根據type值
在dealType方法
對主角當前遇到的情況進行判斷,是遭遇了樓梯、npc、物品或是怪物;
當主角遭遇了npc時會根據npc類型調用Task類中的不一樣對話;
當遭遇了物品時將根據物品類型修改HeroSprite類中主角的屬性,或是修改Task類中的關鍵物品,並顯示信息;
當遭遇樓梯時將更改GameMap類中的樓層參數,修改地圖信息;
當遭遇怪物時將首先調用FightCalc類中的canAttack方法
判斷是否能夠打過,若是打不過則無反應,不然將打開 FightScreen界面顯示戰鬥畫面;
FightScreen界面將顯示主角屬性以及怪物屬性。
該類是一個獨立線程,用於監聽用戶的屏幕操做、按鍵操做,並不斷刷新遊戲的頁面顯示當前的狀態。
其主要方法包括:
void refurbish()
刷新頁面:void run()
遊戲循環MySet.GAME_LOOP
的時間後,調用refurbish()
刷新畫面;boolean onKeyDown(int keyCode)
處理按鍵按下onKeyDown
方法;boolean onKeyUp(int keyCode)
處理按鍵鬆開onKeyUp
方法;boolean onTouchEvent(MotionEvent event)
處理觸屏事件onTouchEvent
方法;該類包括了一些系統的基本信息,包括:
//界面狀態 public static final int GAME_SPLASH = 1; public static final int GAME_MENU = 2; public static final int GAME_ABOUT = 3; public static final int GAME_HELP = 4; public static final int GAME_RUN = 5; public static final int GAME_CONTINUE = 6; // 遊戲循環時間 public static final int GAME_LOOP = 100; // 屏幕的寬高 public static final int SCREENW = 1080; //屏幕寬 public static final int SCREENH = 1920; //屏幕高 public static final int BORDERW = 1056; //沙盒寬 public static final int BORDERH = 1152; //沙盒高 public static final int BORDERX = (MySet.SCREENW - BORDERW) / 2; //沙盒橫座標(相對左上角) public static final int BORDERY = 60; //沙盒縱座標(相對左上角) public static final int MessageBoxH = 210; //消息界面高度 // 文字的尺寸 public static final int TextSize = 48; //觸屏位置判斷 public static boolean touchUp (int x ,int y) //上 public static boolean touchDown (int x ,int y) // 下 public static boolean touchRight (int x ,int y) // 右 public static boolean touchLeft (int x ,int y) // 左 public static boolean touchOK (int x ,int y) // 確認 public static boolean touchBack (int x ,int y) // 返回 public static boolean touchYes (int x ,int y) // 是 public static boolean touchNo (int x ,int y) // 否 // 繪圖 public static void fillRect(Canvas canvas, int x, int y, int w, int h, Paint paint) //繪製填充矩形 public static void drawRect(Canvas canvas, int x, int y, int w, int h, Paint paint) //繪製矩形框 public static void drawImage(Canvas canvas, Bitmap blt, int x, int y, int w, int h, int bx, int by) //繪製圖片 public static void drawImage(Canvas canvas, Bitmap bitmap, float x, float y) //繪製圖片 public static void drawString(Canvas canvas, String str, float x, float y, Paint paint) //繪製文本
該類是個概念類,表示遊戲中的界面顯示部分。
該類繼承View類,而遊戲中的全部顯示界面都繼承該類。
包括了:
public GameView(Context context) //構造方法 protected abstract void onDraw(Canvas canvas); // 繪圖 public abstract boolean onTouchEvent(MotionEvent event); //觸屏操做 public abstract boolean onKeyDown(int keyCode); //按鍵按下 public abstract boolean onKeyUp(int keyCode); //按鍵彈起 protected abstract void reCycle(); //回收資源 protected abstract void refurbish(); //刷新
該類包括了遊戲的地圖信息,用於繪製遊戲的地圖,包括:
// 基本信息 public static final int SWITCH_OFFSET = 44; //動態相差 public static final int TILE_WIDTH = 96; //單個格子大小 public static final int TILE_HEIGHT = TILE_WIDTH; private static final int TILE_NUM_COL = 11; //地圖格式 11*11 private static final int TILE_NUM_ROW = TILE_NUM_COL; public static final int MAP_WIDTH = TILE_WIDTH * TILE_NUM_COL; //地圖大小 public static final int MAP_HEIGHT = MAP_WIDTH; public static final int FLOOR_NUM = 22; public static final int TILE_NUM = TILE_NUM_COL * TILE_NUM_ROW; //格子數量 // 地圖詳細數據 private int[][] floorArray // 各層詳細地圖 private static final int[][] heroPosition // 各層主角出生點 // 活動參數 private int curUpDown = 0;// 上/下樓 private int[] curFloorArray = new int[TILE_NUM]; // 當前層地圖 public int curFloorNum = 0; // 樓層數 public int reachedHighest = 0; // 最高層數 private TiledLayer floorMap = null; //地圖 private HeroSprite hero = null; //主角 private int aheadIndex = 0; //主角位置 private int aheadCol = 0; //主角位置(x軸) private int aheadRow = 0; //主角位置(y軸)
該類爲遊戲的主體運行視圖