package com.znv.linkup.json; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.znv.linkup.core.config.GameAlign; import com.znv.linkup.core.config.GlobalCfg; import com.znv.linkup.core.config.LevelCfg; import com.znv.linkup.core.config.ModeCfg; import com.znv.linkup.core.config.RankCfg; /** * Json配置和原有的游戏配置相互转化 * * @author yzb * */ public class JsonCfgConverter { private static int modeIndex = 0; private static int rankIndex = 0; private static int levelIndex = 0; /** * 将游戏配置转化为Json配置 * * @param modeCfgs * 游戏模式配置 * @return Json配置 */ public static JsonGameCfg toJsonCfg(List<ModeCfg> modeCfgs) { JsonGameCfg jsonGame = new JsonGameCfg(); jsonGame.setGlobalcfg(toJsonGlobalCfg()); for (ModeCfg modeCfg : modeCfgs) { jsonGame.getModeCfgs().add(toJsonModeCfg(modeCfg)); } return jsonGame; } private static JsonGlobalCfg toJsonGlobalCfg() { JsonGlobalCfg jsonGlobal = new JsonGlobalCfg(); jsonGlobal.setGsound(LevelCfg.globalCfg.isGameSound() ? 1 : 0); jsonGlobal.setBgmusic(LevelCfg.globalCfg.isGameBgMusic() ? 1 : 0); jsonGlobal.setPrompt(LevelCfg.globalCfg.getPromptNum()); jsonGlobal.setRefresh(LevelCfg.globalCfg.getRefreshNum()); jsonGlobal.setAddtime(LevelCfg.globalCfg.getAddTimeNum()); return jsonGlobal; } private static JsonModeCfg toJsonModeCfg(ModeCfg modeCfg) { JsonModeCfg jsonMode = new JsonModeCfg(); jsonMode.setName(modeCfg.getModeName()); for (RankCfg rankCfg : modeCfg.getRankInfos()) { jsonMode.getRankCfgs().add(toJsonRankCfg(rankCfg)); } return jsonMode; } private static JsonRankCfg toJsonRankCfg(RankCfg rankCfg) { JsonRankCfg jsonRank = new JsonRankCfg(); jsonRank.setName(rankCfg.getRankName()); jsonRank.setBg(rankCfg.getRankBackground()); jsonRank.setGskin(rankCfg.getGameSkin()); for (LevelCfg levelCfg : rankCfg.getLevelInfos()) { jsonRank.getLevelCfgs().add(toJsonLevelCfg(levelCfg)); } return jsonRank; } private static JsonLevelCfg toJsonLevelCfg(LevelCfg levelCfg) { JsonLevelCfg jsonLevel = new JsonLevelCfg(); jsonLevel.setName(levelCfg.getLevelName()); jsonLevel.setYsize(levelCfg.getYSize()); jsonLevel.setXsize(levelCfg.getXSize()); jsonLevel.setGtime(levelCfg.getLevelTime()); jsonLevel.setGalign(levelCfg.getLevelAlign().value()); jsonLevel.setEmpty(levelCfg.getEmptyNum()); jsonLevel.setObstacle(levelCfg.getObstacleNum()); jsonLevel.setMaptpl(levelCfg.getMaptplStr()); return jsonLevel; } /** * 将Json配置转化为游戏配置 * * @param jsonCfg * Json配置 * @return 游戏模式配置 */ public static List<ModeCfg> toCfg(JSONObject jsonCfg) { modeIndex = 0; rankIndex = 0; levelIndex = 0; List<ModeCfg> modeCfgs = new ArrayList<ModeCfg>(); try { toGlobalCfg(jsonCfg.getJSONObject("globalcfg")); JSONArray jsonModes = jsonCfg.getJSONArray("modeCfgs"); for (int i = 0; i < jsonModes.length(); i++) { ModeCfg modeCfg = toModeCfg(jsonModes.getJSONObject(i)); if (modeCfg != null) { modeCfgs.add(modeCfg); } } return modeCfgs; } catch (JSONException e) { e.printStackTrace(); } return null; } private static GlobalCfg toGlobalCfg(JSONObject jsonGlobal) { try { GlobalCfg globalCfg = new GlobalCfg(); globalCfg.setGameSound(jsonGlobal.getInt("gsound") == 1); globalCfg.setGameBgMusic(jsonGlobal.getInt("bgmusic") == 1); globalCfg.setPromptNum(jsonGlobal.getInt("prompt")); globalCfg.setRefreshNum(jsonGlobal.getInt("refresh")); globalCfg.setAddTimeNum(jsonGlobal.getInt("addtime")); return globalCfg; } catch (JSONException e) { e.printStackTrace(); } return null; } private static ModeCfg toModeCfg(JSONObject jsonMode) { try { String name = jsonMode.getString("name"); ModeCfg modeCfg = new ModeCfg(name); modeCfg.setModeId(String.valueOf(modeIndex++)); JSONArray jsonRankCfgs = jsonMode.getJSONArray("rankCfgs"); for (int i = 0; i < jsonRankCfgs.length(); i++) { RankCfg rankCfg = toRankCfg(jsonRankCfgs.getJSONObject(i)); if (rankCfg != null) { modeCfg.getRankInfos().add(rankCfg); } } return modeCfg; } catch (JSONException e) { e.printStackTrace(); } return null; } private static RankCfg toRankCfg(JSONObject jsonRank) { try { String name = jsonRank.getString("name"); RankCfg rankCfg = new RankCfg(name); rankCfg.setRankId(String.valueOf(rankIndex++)); rankCfg.setGameSkin(jsonRank.getString("gskin")); rankCfg.setRankBackground(jsonRank.getInt("bg")); JSONArray jsonLevelCfgs = jsonRank.getJSONArray("levelCfgs"); for (int i = 0; i < jsonLevelCfgs.length(); i++) { LevelCfg levelCfg = toLevelCfg(jsonLevelCfgs.getJSONObject(i)); if (levelCfg != null) { rankCfg.getLevelInfos().add(levelCfg); } } return rankCfg; } catch (JSONException e) { e.printStackTrace(); } return null; } private static LevelCfg toLevelCfg(JSONObject jsonLevel) { try { String name = jsonLevel.getString("name"); LevelCfg levelCfg = new LevelCfg(name); levelCfg.setLevelId(levelIndex++); levelCfg.setYSize(jsonLevel.getInt("ysize")); levelCfg.setXSize(jsonLevel.getInt("xsize")); levelCfg.setLevelTime(jsonLevel.getInt("gtime")); levelCfg.setLevelAlign(GameAlign.valueOf(jsonLevel.getInt("galign"))); levelCfg.setEmptyNum(jsonLevel.getInt("empty")); levelCfg.setObstacleNum(jsonLevel.getInt("obstacle")); levelCfg.setMaptplStr(jsonLevel.getString("maptpl")); levelCfg.initStarScores(); return levelCfg; } catch (JSONException e) { e.printStackTrace(); } return null; } }