设置关卡单例类
在game包创建LevelInof
package map;
import util.MyUtil;
/**
* 用来管理当前关卡信息
* 单例设计模式:如果一个类只需要该类具有唯一的实例,那么可以使用
* 单例设计模式设计该类
*/
public class LevelInof {
//构造方法私有化
private LevelInof(){
}
//定义静态的本类类型的变量,来指向唯一的实例
private static LevelInof instance;
//懒汉模式的单例,第一次使用该例的时候创建唯一的实例
//所有访问该类的唯一实例都通过该方法
//该方法具有安全隐患,多线程可能创建多个实例
public static LevelInof getInstance(){
if (instance == null){
//创建唯一的实例
instance = new LevelInof();
}
return instance;
}
//关卡的编号
private int level;
//敌人的数量
private int enemyCount;
//通关的最多的时长,-1 意味着不限时的
private int crossTime = -1;
//敌人的类型信息
private int[] enemyType;
//游戏的难度 >=1 的值
private int levelType;
//活的敌人类型数组中的随机的一个元素
//获得一个随机的敌人的类型
public int getRandonEnemyType(){
int index = MyUtil.getRandomNumber(0,enemyType.length);
return enemyType[index];
}
public void setLevelType(int levelType) {
this.levelType = levelType;
}
public int getLevelType() {
return levelType <= 0 ? 1 : levelType;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public int getEnemyCount() {
return enemyCount;
}
public void setEnemyCount(int enemyCount) {
this.enemyCount = enemyCount;
}
public int getCrossTime() {
return crossTime;
}
public void setCrossTime(int crossTime) {
this.crossTime = crossTime;
}
public void setEnemyType(int[] enemyType) {
this.enemyType = enemyType;
}
public int[] getEnemyType() {
return enemyType;
}
}
/**
* 解析关卡信息
* @param level
*/
private void loadLeveal(int level) throws Exception{
//或得关卡信息类的唯一实例对象
LevelInof levelInof = LevelInof.getInstance();
//设置第几关
levelInof.setLevel(level);
Properties prop = new Properties();
prop.load(new FileInputStream("level/lv_"+level));
//将所有的地图信息都加载进来
int enemyCount = Integer.parseInt(prop.getProperty("enemyCount"));
//设置敌人数量
levelInof.setEnemyCount(enemyCount);
//关卡的难度
//如果没有设游戏难度,那么就是默认的游戏难度
String levelType = prop.getProperty("levelType");
levelInof.setLevelType(Integer.parseInt(levelType==null ? "1" : levelType));
//0,1 对敌人类型解析
String[] enemyType = prop.getProperty("enemyType").split(",");
//对敌人类型解析
int[] type = new int[enemyType.length];
for (int i = 0; i < type.length; i++) {
type[i] = Integer.parseInt(enemyType[i]);
}
//设置敌人类型
levelInof.setEnemyType(type);
//关卡难度
String leveType = prop.getProperty("levelType");
levelInof.setLevelType(Integer.parseInt(levelType==null?"1":levelType));
String methodName = prop.getProperty("method");
int invokeCount = Integer.parseInt(prop.getProperty("invokeCount"));
//把实参传入数组中来
String[] params = new String[invokeCount];
for (int i = 1; i <= invokeCount; i++) {
params[i-1] = prop.getProperty("param"+i);
}
//将读取到的参数调用对应的方法
invokeMethod(methodName,params);
}