本项目代码共有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轴)
该类为游戏的主体运行视图