From f2f4e1e45981bb294a5221ade7b4646cc3e29d35 Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Wed, 11 Nov 2020 18:56:44 +0800 Subject: [PATCH] 无尽模式分数 --- Assets/Scripts/Data/EndlessPortData.cs | 121 +++++++++++++++++++++++++++++++++++++--- 1 files changed, 111 insertions(+), 10 deletions(-) diff --git a/Assets/Scripts/Data/EndlessPortData.cs b/Assets/Scripts/Data/EndlessPortData.cs index 6a8c4cf..6d45576 100644 --- a/Assets/Scripts/Data/EndlessPortData.cs +++ b/Assets/Scripts/Data/EndlessPortData.cs @@ -17,9 +17,14 @@ public endless_port Config; /// <summary> - /// 预先随机好的敌人数据,spawnAgent时直接取这个数据,不再动态随机 + /// 预先随机好的敌人数据,spawnAgent时直接取这个数据,不再动态随机, + /// id > 0:获取指定id的小怪, + /// id = -1:从类型为1(小怪)随机, + /// id = -2:从类型为2(精英怪)随机 + /// id = -3:从所有小怪中随机 + /// 当前 id = -1, id = -2, id = -3时,EnemyDataList列表的数量就是敌人数量, id > 0 时因为是指定id所以敌人是重复的,EnemyDataList长度为1 /// </summary> - public endless_enemy EnemyData; + public List<endless_enemy> EnemyDataList; /// <summary> /// 掉落概率总权重,即:表中掉落概率那一项全部加起来 @@ -46,6 +51,11 @@ /// </summary> private static Dictionary<int, List<EndlessPortConfig>> portDic; + /// <summary> + /// 关卡每波次敌人总血量字典 + /// </summary> + private static Dictionary<int, List<float>> portEnemiesTotalHPDic; + private static System.Random random; /// <summary> @@ -53,6 +63,7 @@ /// </summary> /// <value></value> private static int maxLevel { get; set; } + public static int MaxLevel { get { return maxLevel; } @@ -68,10 +79,12 @@ portConfigList = new List<EndlessPortConfig>(); portDic = new Dictionary<int, List<EndlessPortConfig>>(); InitPortList(); + InitPortEnemiesTotalHP(); + int score = GetLevelScore(1); } /// <summary> - /// 更新关卡数据的时候也重新初始化一次 + /// 初始化关卡数据 /// </summary> public static void InitPortList() { @@ -92,7 +105,18 @@ EndlessPortConfig param = new EndlessPortConfig(); param.Config = data; - param.EnemyData = EndlessEnemyData.GetDataById(data.enemy_id); + param.EnemyDataList = new List<endless_enemy>(); + + if (param.Config.id > 0) + param.EnemyDataList.Add(EndlessEnemyData.GetDataById(data.enemy_id)); + else + { + for (int i = 0; i < data.amount; ++i) + { + param.EnemyDataList.Add(EndlessEnemyData.GetDataById(data.enemy_id)); + } + } + param.PortLevel = maxLevel; int totalWeight = 0; @@ -112,6 +136,69 @@ } /// <summary> + /// 初始化关卡每波次敌人总血量 + /// </summary> + private static void InitPortEnemiesTotalHP() + { + portEnemiesTotalHPDic = new Dictionary<int, List<float>>(); + + for (int i = 1; i <= MaxLevel; ++i) + { + List<List<EndlessPortConfig>> levelData = GetLevelWaveData(i); + + if (levelData.Count == 0) continue; + + portEnemiesTotalHPDic.Add(i, new List<float>()); + + // levelData.Count 就是 i关卡的总波次数 + for (int j = 0; j < levelData.Count; ++j) + { + float total = 0; + + // levelData[j].Count 是这一波的所有可出怪的赛道数量 + for (int k = 0; k < levelData[j].Count; ++k) + { + // > 0,生成的敌人是重复的,直接 × 数量就行 + if (levelData[j][k].Config.enemy_id > 0) + { + float add = levelData[j][k].Config.amount * levelData[j][k].Config.b_hp * levelData[j][k].EnemyDataList[0].hp_rate; + + // 木属性小怪一次性生成两个 + if (levelData[j][k].EnemyDataList[0].resource == 103) + total += 2 * add; + else + total += add; + } + else + { + for (int n = 0; n < levelData[j][k].EnemyDataList.Count; ++n) + { + float add = levelData[j][k].Config.b_hp * levelData[j][k].EnemyDataList[n].hp_rate; + + if (levelData[j][k].EnemyDataList[n].resource == 103) + total += 2 * add; + else + total += add; + } + } + } + + portEnemiesTotalHPDic[i].Add(total); + } + } + } + + /// <summary> + /// 根据关卡,波次获得该波次敌人总血量 + /// </summary> + /// <param name="level"></param> + /// <param name="wave"></param> + public static float GetWaveEnemiesTotalHP(int level, int wave) + { + return portEnemiesTotalHPDic[level][wave]; + } + + /// <summary> /// 根据关卡等级获取关卡的所有波数据,如果本波次敌人数量为0,直接忽略掉 /// </summary> /// <param name="level">关卡等级</param> @@ -119,17 +206,18 @@ public static List<List<EndlessPortConfig>> GetLevelWaveData(int level) { List<List<EndlessPortConfig>> ret = new List<List<EndlessPortConfig>>(); - - for (int i = 0; i < 5; ++i) - { - ret.Add(new List<EndlessPortConfig>()); - } - List<EndlessPortConfig> allLevelData = portDic[level]; + int wave = 0; foreach (EndlessPortConfig data in allLevelData) { if (data.Config.amount == 0) continue; + + if (data.Config.wave != wave) + { + ret.Add(new List<EndlessPortConfig>()); + wave = data.Config.wave; + } ret[data.Config.wave - 1].Add(data); } @@ -239,5 +327,18 @@ return ret; } + + /// <summary> + /// 根据关卡获得关卡奖励分数 + /// </summary> + /// <param name="level"></param> + public static int GetLevelScore(int level) + { + List<List<EndlessPortConfig>> list = GetLevelWaveData(level); + + if (list.Count == 0) return 0; + + return list[0][0].Config.bonus; + } } } \ No newline at end of file -- Gitblit v1.9.1