// Path: LinkupCore/src/com/znv/linkup/core/GameSettings.java
// public class GameSettings {
// 
//     /**
//      * 地板卡片值
//      */
//     public static byte GroundCardValue = 0;
// 
//     /**
//      * 游戏卡片值，用于地图模版
//      */
//     public static byte GameCardValue = 1;
// 
//     /**
//      * 障碍卡片值
//      */
//     public static byte ObstacleCardValue = -1;
// 
//     /**
//      * 空卡片值
//      */
//     public static byte EmptyCardValue = -2;
// 
//     /**
//      * 消除卡片获得的积分，消除一对卡片得10分
//      */
//     public static int CardScore = 5;
// 
//     /**
//      * 连击延时时间，2000ms
//      */
//     public static int ComboDelay = 2000;
// 
//     /**
//      * 连击间隔，3连击，6连击，9连击。。。
//      */
//     public static int ComboMod = 3;
// 
//     /**
//      * 连击分数，3连击则3*10=30
//      */
//     public static int ComboScore = 10;
// 
//     /**
//      * 剩余时间奖励分数，剩余10s，则奖励40分
//      */
//     public static int TimeScore = 4;
// 
//     /**
//      * 路径转弯奖励分数，直线不奖励，一个弯奖励5分，2个弯奖励10分
//      */
//     public static int CornerScore = 5;
// 
//     /**
//      * 消除一对卡片奖励的时间，0s
//      */
//     public static int RewardTime = 0;
// 
//     /**
//      * 减少时间奖励，补偿分数
//      */
//     public static int RewardScoreMax = 5;
// 
//     /**
//      * 任务系数
//      */
//     public static int TaskFactor = 10;
// 
//     /**
//      * 重排时尝试次数，默认5次
//      */
//     public static int RefreshTryCount = 5;
// 
//     /**
//      * 星星的比例
//      */
//     public static float StarRatio = 0.4f;
// }
// 
// Path: LinkupCore/src/com/znv/linkup/core/map/BaseMap.java
// public class BaseMap implements Serializable {
//     private static final long serialVersionUID = 7379717910848419154L;
// 
//     protected BaseMap() {
//     }
// 
//     protected BaseMap(int ySize, int xSize) {
//         YSize = ySize;
//         XSize = xSize;
//         Data = new Byte[ySize][xSize];
//     }
// 
//     /**
//      * 随机重排
//      */
//     public void randomRefresh() {
//         int index = 0;
//         // 获取游戏块的值
//         List<Byte> array = new ArrayList<Byte>();
//         for (int i = 0; i < YSize; i++) {
//             for (int j = 0; j < XSize; j++) {
//                 if (isRefresh(i, j)) {
//                     array.add(Data[i][j]);
//                 }
//             }
//         }
//         // 随机打乱
//         Collections.shuffle(array);
//         // 重新赋值
//         index = 0;
//         for (int i = 0; i < YSize; i++) {
//             for (int j = 0; j < XSize; j++) {
//                 if (isRefresh(i, j)) {
//                     Data[i][j] = array.get(index++);
//                 }
//             }
//         }
//     }
// 
//     protected boolean isRefresh(int i, int j) {
//         return true;
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder strMap = new StringBuilder(String.valueOf(YSize) + "*" + String.valueOf(XSize) + "$");
//         for (int i = 0; i < YSize; i++) {
//             for (int j = 0; j < XSize; j++) {
//                 strMap.append(String.valueOf(Data[i][j]) + ",");
//             }
//             strMap.replace(strMap.length() - 1, strMap.length(), ";");
//         }
//         strMap.deleteCharAt(strMap.length() - 1);
//         return strMap.toString();
//     }
// 
//     protected int YSize;
//     protected int XSize;
//     protected Byte[][] Data;
// }


import com.znv.linkup.core.GameSettings;
import com.znv.linkup.core.map.BaseMap;
package com.znv.linkup.core.map.template;


/**
 * 地图模版类
 * 
 * @author yzb
 * 
 */
public class MapTemplate extends BaseMap {
    private static final long serialVersionUID = -8030816635103999967L;

    protected MapTemplate() {
    }

    public MapTemplate(int ySize, int xSize) {
        this(ySize, xSize, 0, 0);
    }

    public MapTemplate(int ySize, int xSize, int empty, int obstacle) {
        super(ySize, xSize);
        this.EmptyCount = empty;
        this.ObstacleCount = obstacle;
        this.Data = new Byte[ySize][xSize];

        initTemplate();
    }

    protected void initTemplate() {
        for (int i = 0; i < YSize; i++) {
            for (int j = 0; j < XSize; j++) {
                if (i == 0 || i == YSize - 1 || j == 0 || j == XSize - 1) {
// Path: LinkupCore/src/com/znv/linkup/core/GameSettings.java
// public class GameSettings {
// 
//     /**
//      * 地板卡片值
//      */
//     public static byte GroundCardValue = 0;
// 
//     /**
//      * 游戏卡片值，用于地图模版
//      */
//     public static byte GameCardValue = 1;
// 
//     /**
//      * 障碍卡片值
//      */
//     public static byte ObstacleCardValue = -1;
// 
//     /**
//      * 空卡片值
//      */
//     public static byte EmptyCardValue = -2;
// 
//     /**
//      * 消除卡片获得的积分，消除一对卡片得10分
//      */
//     public static int CardScore = 5;
// 
//     /**
//      * 连击延时时间，2000ms
//      */
//     public static int ComboDelay = 2000;
// 
//     /**
//      * 连击间隔，3连击，6连击，9连击。。。
//      */
//     public static int ComboMod = 3;
// 
//     /**
//      * 连击分数，3连击则3*10=30
//      */
//     public static int ComboScore = 10;
// 
//     /**
//      * 剩余时间奖励分数，剩余10s，则奖励40分
//      */
//     public static int TimeScore = 4;
// 
//     /**
//      * 路径转弯奖励分数，直线不奖励，一个弯奖励5分，2个弯奖励10分
//      */
//     public static int CornerScore = 5;
// 
//     /**
//      * 消除一对卡片奖励的时间，0s
//      */
//     public static int RewardTime = 0;
// 
//     /**
//      * 减少时间奖励，补偿分数
//      */
//     public static int RewardScoreMax = 5;
// 
//     /**
//      * 任务系数
//      */
//     public static int TaskFactor = 10;
// 
//     /**
//      * 重排时尝试次数，默认5次
//      */
//     public static int RefreshTryCount = 5;
// 
//     /**
//      * 星星的比例
//      */
//     public static float StarRatio = 0.4f;
// }
// 
// Path: LinkupCore/src/com/znv/linkup/core/map/BaseMap.java
// public class BaseMap implements Serializable {
//     private static final long serialVersionUID = 7379717910848419154L;
// 
//     protected BaseMap() {
//     }
// 
//     protected BaseMap(int ySize, int xSize) {
//         YSize = ySize;
//         XSize = xSize;
//         Data = new Byte[ySize][xSize];
//     }
// 
//     /**
//      * 随机重排
//      */
//     public void randomRefresh() {
//         int index = 0;
//         // 获取游戏块的值
//         List<Byte> array = new ArrayList<Byte>();
//         for (int i = 0; i < YSize; i++) {
//             for (int j = 0; j < XSize; j++) {
//                 if (isRefresh(i, j)) {
//                     array.add(Data[i][j]);
//                 }
//             }
//         }
//         // 随机打乱
//         Collections.shuffle(array);
//         // 重新赋值
//         index = 0;
//         for (int i = 0; i < YSize; i++) {
//             for (int j = 0; j < XSize; j++) {
//                 if (isRefresh(i, j)) {
//                     Data[i][j] = array.get(index++);
//                 }
//             }
//         }
//     }
// 
//     protected boolean isRefresh(int i, int j) {
//         return true;
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder strMap = new StringBuilder(String.valueOf(YSize) + "*" + String.valueOf(XSize) + "$");
//         for (int i = 0; i < YSize; i++) {
//             for (int j = 0; j < XSize; j++) {
//                 strMap.append(String.valueOf(Data[i][j]) + ",");
//             }
//             strMap.replace(strMap.length() - 1, strMap.length(), ";");
//         }
//         strMap.deleteCharAt(strMap.length() - 1);
//         return strMap.toString();
//     }
// 
//     protected int YSize;
//     protected int XSize;
//     protected Byte[][] Data;
// }


// Path: LinkupCore/src/com/znv/linkup/core/map/template/MapTemplate.java
import com.znv.linkup.core.GameSettings;
import com.znv.linkup.core.map.BaseMap;

package com.znv.linkup.core.map.template;


/**
 * 地图模版类
 * 
 * @author yzb
 * 
 */
public class MapTemplate extends BaseMap {
    private static final long serialVersionUID = -8030816635103999967L;

    protected MapTemplate() {
    }

    public MapTemplate(int ySize, int xSize) {
        this(ySize, xSize, 0, 0);
    }

    public MapTemplate(int ySize, int xSize, int empty, int obstacle) {
        super(ySize, xSize);
        this.EmptyCount = empty;
        this.ObstacleCount = obstacle;
        this.Data = new Byte[ySize][xSize];

        initTemplate();
    }

    protected void initTemplate() {
        for (int i = 0; i < YSize; i++) {
            for (int j = 0; j < XSize; j++) {
                if (i == 0 || i == YSize - 1 || j == 0 || j == XSize - 1) {
                    Data[i][j] = GameSettings.GroundCardValue;