坦克大战—day 40

设置关卡单例类

在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);
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值