/// <summary> /// 升色方法 /// </summary> /// <param name="v1">兵种</param> /// <param name="v2">颜色值</param> /// <returns></returns> private List <string> UpColor(string v1, string v2) { List <string> str_list = new List <string>(); //随机拿到符合要求的武将数据,给品阶和战斗周目数为1 List <int> heroids = new List <int>(); for (int i = 0; i < LoadJsonFile.RoleTableDatas.Count; i++) //遍历所有武将 { //判断兵种和稀有度(颜色) if (LoadJsonFile.RoleTableDatas[i][3] == v1 && LoadJsonFile.RoleTableDatas[i][4] == v2) { heroids.Add(i + 1); //存储符合的英雄id } } int num = heroids.Count; //符合的英雄总数 if (num <= 0) { Debug.Log("///没有符合的升色英雄///"); return(null); } str_list = LoadJsonFile.DeepClone <string>(LoadJsonFile.RoleTableDatas[heroids[Random.Range(0, num)] - 1]); str_list.Add("1"); //品阶 str_list.Add("1"); //战斗周目数 return(str_list); }
/// <summary> /// 保持英雄数据 /// </summary> /// <param name="arrHeroData"></param> /// <param name="i"></param> private void HoldHeroData(List <string>[] arrHeroData, int i) { List <string> newHeroData = new List <string>(); newHeroData = LoadJsonFile.DeepClone <string>(LoadJsonFile.RoleTableDatas[int.Parse(arrHeroData[i][0]) - 1]); //记录该英雄所有数据 array_str[i] = newHeroData; array_str[i].Add(arrHeroData[i][1]); //记录他的品阶 array_str[i].Add((int.Parse(arrHeroData[i][2]) + 1).ToString()); //记录他的参与战斗周目数+1 }
/// <summary> /// 放置卡牌 /// </summary> /// <param name="card_parant">父亲位置</param> private void PutCardToPos(Transform card_parant, int grade) { //实例化武将卡牌到备战位,并传递数据过去 GameObject newheroCard = Instantiate(hero_Card, card_parant); newheroCard.transform.position = card_parant.position; List <string> newData = LoadJsonFile.DeepClone <string>(LoadJsonFile.RoleTableDatas[heroId - 1]); //list深拷贝 newheroCard.GetComponent <HeroDataControll>().HeroData = newData; //设置品阶颜色表现和属性 newheroCard.transform.GetChild(4).GetChild(0).GetComponent <Text>().text = grade.ToString(); newheroCard.GetComponent <HeroDataControll>().Grade_hero = grade; newheroCard.GetComponent <HeroDataControll>().BattleNums = 0; if (grade == 1) { newheroCard.GetComponent <HeroDataControll>().Price_hero = price; } else { if (grade == 2) { newheroCard.GetComponent <HeroDataControll>().Price_hero = price * 2; } else { newheroCard.GetComponent <HeroDataControll>().Price_hero = price * 6; } } //设置文字颜色,体现卡牌稀有度 switch (int.Parse(newheroCard.GetComponent <HeroDataControll>().HeroData[4])) { case 1: //newheroCard.transform.GetChild(0).GetComponent<Text>().color = ColorData.green_Color; //绿色 newheroCard.transform.GetChild(0).GetChild(0).GetComponent <Image>().color = ColorData.green_Color; //绿色 break; case 2: //newheroCard.transform.GetChild(0).GetComponent<Text>().color = ColorData.blue_Color_hero; //蓝色 newheroCard.transform.GetChild(0).GetChild(0).GetComponent <Image>().color = ColorData.blue_Color_hero; //蓝色 break; case 3: //newheroCard.transform.GetChild(0).GetComponent<Text>().color = ColorData.purple_Color; //紫色 newheroCard.transform.GetChild(0).GetChild(0).GetComponent <Image>().color = ColorData.purple_Color; //紫色 break; case 4: //newheroCard.transform.GetChild(0).GetComponent<Text>().color = ColorData.red_Color_hero; //红色 newheroCard.transform.GetChild(0).GetChild(0).GetComponent <Image>().color = ColorData.red_Color_hero; //红色 break; } newheroCard.GetComponent <HeroDataControll>().HeroData[6] = (Mathf.Pow(2, grade - 1) * int.Parse(newheroCard.GetComponent <HeroDataControll>().HeroData[6])).ToString(); newheroCard.GetComponent <HeroDataControll>().HeroData[8] = (Mathf.Pow(2, grade - 1) * int.Parse(newheroCard.GetComponent <HeroDataControll>().HeroData[8])).ToString(); newheroCard.GetComponent <HeroDataControll>().ShowThisHeroData(); }
/// <summary> /// 升阶方法 /// </summary> /// <param name="v1">所升阶数</param> /// <param name="v2">英雄id</param> /// <returns></returns> private List <string> UpGrade(int v1, int v2) { //传递武将数据链表尾部依次添加品阶和战斗周目数 List <string> str_list = new List <string>(); str_list = LoadJsonFile.DeepClone <string>(LoadJsonFile.RoleTableDatas[v2 - 1]); str_list.Add(v1.ToString()); str_list.Add("1"); return(str_list); }
//获取表中英雄的所有数据(暂时弃用) private void GetHeroDateFromId(int id) { heroData.Clear(); //清空上一次所购买的英雄数据 int heroNums = LoadJsonFile.RoleTableDatas.Count; for (int i = 0; i < heroNums; i++) { if (int.Parse(LoadJsonFile.RoleTableDatas[i][0]) == id) //通过Id获取当前单元格在第几行 { heroData = LoadJsonFile.DeepClone <string>(LoadJsonFile.RoleTableDatas[i]); } } }
//获取羁绊英雄名 List <string> GetFetterInformationFromId(int id) { List <string> arr = new List <string>(); for (int i = 0; i < 46; i++) { if (int.Parse(LoadJsonFile.FetterTableDates[i][0]) == id) { arr = LoadJsonFile.DeepClone <string>(LoadJsonFile.FetterTableDates[i]); } } return(arr); }
//展示武将信息 public void ShowHeroInformation(GameObject btn) { GameObject topBar = GameObject.Find("TopInformationBar"); btnNum = btn.GetComponentInChildren <Text>().text; btnTag = int.Parse(btn.name); heroId = int.Parse(LoadJsonFile.RandowTableDates[btnTag - 1][0]); //武将id获取 GetSpecificValue(heroId); List <string> HeroDate = LoadJsonFile.DeepClone <string>(LoadJsonFile.RoleTableDatas[heroId - 1]); List <List <string> > fetterInformation = new List <List <string> >(); List <string> heroIdDate = new List <string>(); string heroKindName = GetHeroTypeName(HeroDate[3]); //获取兵种名 topBar.GetComponentInChildren <Text>().text = ""; int heroId_ = heroId; heroIdDate.Add(heroId_.ToString()); fetterInformation = GameObject.Find("FettrrControl").GetComponent <FetterContronl>().init_One(heroIdDate); //显示点击英雄的名字 及 阶数(阶数尚未得到) topBar.GetComponentsInChildren <Text>()[1].fontSize = HeroDate[1].Length > 2 ? 50 : 70; topBar.GetComponentsInChildren <Text>()[1].text = HeroDate[1] + "\u1500"; //显示兵种及英雄相关属性 topBar.GetComponentsInChildren <Text>()[2].text = heroKindName + "\u2000" + "攻击" + HeroDate[6] + "\u2000" + "防御" + HeroDate[7] + "\u2000" + "士兵" + HeroDate[8]; topBar.GetComponentsInChildren <Text>()[3].text = HeroDate[20]; //显示羁绊内容 //if (fetterInformation.Count > 0) //{ // for (int j = 0; j < fetterInformation.Count; j++) // { // for (int i = 0; i < fetterInformation[j].Count; i++) // { // topBar.GetComponentsInChildren<Text>()[0].text += "[" + fetterInformation[j][1] + "]" + fetterInformation[j][9] + "同时上阵时," + "攻击+" + fetterInformation[j][3] + "%" + "," + "防御+" + fetterInformation[j][4] + "%" + "," + "士兵+" + fetterInformation[j][5] + "%" + "\t"; // break; // } // } //} //else //{ // topBar.GetComponentInChildren<Text>().text = "\u3000" + "此英雄无羁绊"; //} heroIdDate.Clear(); fetterInformation.Clear(); HeroDate.Clear(); }
/// <summary> /// 接收敌方武将现有的上阵卡牌,进行卡牌变化和传递 /// </summary> /// <param name="arrHeroData">武将数据</param> /// <param name="enemyUnits">阵容兵种定位[前排,中排,后排]</param> /// <param name="battles">总周目数 - 1</param> /// <param name="npcForceIndex">npc势力索引</param> /// <returns></returns> public List <string>[] SendHeroData(List <string>[] arrHeroData, int[] enemyUnits, int battles, int npcForceIndex) { if (battles == -1) //游戏开始第一年 { string[] heroArrs = LoadJsonFile.forcesTableDatas[UIControl.enemy_forces[npcForceIndex] - 1][8].Split(','); int num = 0; //添加新英雄到总英雄数据中 for (int i = 0; i < 9; i++) { if (num >= heroArrs.Length) { break; } if (array_str[i] == null) { int heroId = (int)float.Parse(heroArrs[i]); //初始武将id获取 //添加新英雄的数据 array_str[i] = LoadJsonFile.DeepClone <string>(LoadJsonFile.RoleTableDatas[heroId - 1]); array_str[i].Add("1"); //品阶 array_str[i].Add("1"); //战斗周目数 num++; } } } else { int heroCount = 0; //记录英雄数 for (int i = 0; i < arrHeroData.Length; i++) //依次处理传过来的九个位置 { if (arrHeroData[i] != null) //若该位置有英雄 { heroCount++; switch (arrHeroData[i][1]) //判断英雄的品阶 { case "1": switch (LoadJsonFile.RoleTableDatas[int.Parse(arrHeroData[i][0]) - 1][4]) //判断稀有度 { case "1": //绿1 if (int.Parse(arrHeroData[i][2]) >= int.Parse(LoadJsonFile.difficultyChooseDatas[hardNum - 1][7])) //判断此卡牌参与的战斗周目 { if (GradeOrColor()) //升阶 { array_str[i] = UpGrade(2, int.Parse(arrHeroData[i][0])); //执行升阶方法传递所需阶值和英雄id } else //升色 { array_str[i] = UpColor(LoadJsonFile.RoleTableDatas[int.Parse(arrHeroData[i][0]) - 1][3], "2"); //执行升色方法传递所需兵种和升色值(稀有度1234) if (array_str[i] == null) { HoldHeroData(arrHeroData, i); //保持英雄数据 } } } else { HoldHeroData(arrHeroData, i); //保持英雄数据 } break; case "2": //蓝1 if (int.Parse(arrHeroData[i][2]) >= int.Parse(LoadJsonFile.difficultyChooseDatas[hardNum - 1][8])) { if (GradeOrColor()) //升阶 { array_str[i] = UpGrade(2, int.Parse(arrHeroData[i][0])); //执行升阶方法传递所需阶值和英雄id } else //升色 { array_str[i] = UpColor(LoadJsonFile.RoleTableDatas[int.Parse(arrHeroData[i][0]) - 1][3], "3"); //执行升色方法传递所需兵种和升色值(稀有度1234) if (array_str[i] == null) { HoldHeroData(arrHeroData, i); //保持英雄数据 } } } else { HoldHeroData(arrHeroData, i); //保持英雄数据 } break; case "3": //紫1 if (int.Parse(arrHeroData[i][2]) >= int.Parse(LoadJsonFile.difficultyChooseDatas[hardNum - 1][9])) { if (GradeOrColor()) //升阶 { array_str[i] = UpGrade(2, int.Parse(arrHeroData[i][0])); //执行升阶方法传递所需阶值和英雄id } else //升色 { array_str[i] = UpColor(LoadJsonFile.RoleTableDatas[int.Parse(arrHeroData[i][0]) - 1][3], "4"); //执行升色方法传递所需兵种和升色值(稀有度1234) if (array_str[i] == null) { HoldHeroData(arrHeroData, i); //保持英雄数据 } } } else { HoldHeroData(arrHeroData, i); //保持英雄数据 } break; case "4": //橙1 if (int.Parse(arrHeroData[i][2]) >= int.Parse(LoadJsonFile.difficultyChooseDatas[hardNum - 1][10])) { if (GradeOrColor()) //升阶 { array_str[i] = UpGrade(2, int.Parse(arrHeroData[i][0])); //执行升阶方法传递所需阶值和英雄id } else { HoldHeroData(arrHeroData, i); //保持英雄数据 } } else { HoldHeroData(arrHeroData, i); //保持英雄数据 } break; } break; case "2": switch (LoadJsonFile.RoleTableDatas[int.Parse(arrHeroData[i][0]) - 1][4]) //判断稀有度 { case "1": //绿2 if (int.Parse(arrHeroData[i][2]) >= int.Parse(LoadJsonFile.difficultyChooseDatas[hardNum - 1][11]) && GradeOrColor()) //判断此卡牌参与的战斗周目 { //二阶英雄升阶,失败后不用升色 { array_str[i] = UpGrade(3, int.Parse(arrHeroData[i][0])); //执行升阶方法传递所需阶值和英雄id } } else { HoldHeroData(arrHeroData, i); //保持英雄数据 } break; case "2": //蓝2 if (int.Parse(arrHeroData[i][2]) >= int.Parse(LoadJsonFile.difficultyChooseDatas[hardNum - 1][12]) && GradeOrColor()) { //升阶 { array_str[i] = UpGrade(3, int.Parse(arrHeroData[i][0])); //执行升阶方法传递所需阶值和英雄id } } else { HoldHeroData(arrHeroData, i); //保持英雄数据 } break; case "3": //紫2 if (int.Parse(arrHeroData[i][2]) >= int.Parse(LoadJsonFile.difficultyChooseDatas[hardNum - 1][13]) && GradeOrColor()) { //升阶 { array_str[i] = UpGrade(3, int.Parse(arrHeroData[i][0])); //执行升阶方法传递所需阶值和英雄id } } else { HoldHeroData(arrHeroData, i); //保持英雄数据 } break; case "4": //橙2 if (int.Parse(arrHeroData[i][2]) >= int.Parse(LoadJsonFile.difficultyChooseDatas[hardNum - 1][14]) && GradeOrColor()) { //升阶 { array_str[i] = UpGrade(3, int.Parse(arrHeroData[i][0])); //执行升阶方法传递所需阶值和英雄id } } else { HoldHeroData(arrHeroData, i); //保持英雄数据 } break; } break; case "3": //三阶英雄保持数据 HoldHeroData(arrHeroData, i); //保持英雄数据 break; } } } //更新英雄上阵位置和个数 if (battles < int.Parse(LoadJsonFile.DifficultyTableDates[1][hardNum + 1]) - 1) { if (heroCount < arrayBattles[0]) { //添加英雄 AddHeros(enemyUnits, arrayBattles[0] - heroCount); } } else { if (battles < int.Parse(LoadJsonFile.DifficultyTableDates[2][hardNum + 1]) - 1) { if (heroCount < arrayBattles[1]) { AddHeros(enemyUnits, arrayBattles[1] - heroCount); } } else { if (battles < int.Parse(LoadJsonFile.DifficultyTableDates[3][hardNum + 1]) - 1) { if (heroCount < arrayBattles[2]) { AddHeros(enemyUnits, arrayBattles[2] - heroCount); } } else { if (battles < int.Parse(LoadJsonFile.DifficultyTableDates[4][hardNum + 1]) - 1) { if (heroCount < arrayBattles[3]) { AddHeros(enemyUnits, arrayBattles[3] - heroCount); } } else { if (battles < int.Parse(LoadJsonFile.DifficultyTableDates[5][hardNum + 1]) - 1) { if (heroCount < arrayBattles[4]) { AddHeros(enemyUnits, arrayBattles[4] - heroCount); } } else { if (battles < int.Parse(LoadJsonFile.DifficultyTableDates[6][hardNum + 1]) - 1) { if (heroCount < arrayBattles[5]) { AddHeros(enemyUnits, arrayBattles[5] - heroCount); } } else { if (battles < int.Parse(LoadJsonFile.DifficultyTableDates[7][hardNum + 1]) - 1) { if (heroCount < arrayBattles[6]) { AddHeros(enemyUnits, arrayBattles[6] - heroCount); } } else { if (battles < int.Parse(LoadJsonFile.DifficultyTableDates[8][hardNum + 1]) - 1) { if (heroCount < arrayBattles[7]) { AddHeros(enemyUnits, arrayBattles[7] - heroCount); } } else { if (battles < int.Parse(LoadJsonFile.DifficultyTableDates[9][hardNum + 1]) - 1) { if (heroCount < arrayBattles[8]) { AddHeros(enemyUnits, arrayBattles[8] - heroCount); } } else { if (heroCount < arrayBattles[9]) { AddHeros(enemyUnits, arrayBattles[9] - heroCount); } } } } } } } } } } } return(array_str); }
//array_str [0]heroid [3]kind兵种 [4]稀有度 /// <summary> /// 添加敌方英雄卡牌 /// </summary> /// <param name="enemyUnits">兵种类型</param> /// <param name="v">添加个数</param> private void AddHeros(int[] enemyUnits, int v) { //记录现有英雄的种类个数 int[] hero_kindNum = new int[3] { 0, 0, 0 }; //记录所有绿色稀有度英雄id List <int> heroIds = new List <int>(); //记录所有新加英雄的id List <int> newheroIds = new List <int>(); for (int i = 0; i < 9; i++) { if (array_str[i] != null) { if (array_str[i][4] == "1") //判断稀有度是否为1 { heroIds.Add(int.Parse(array_str[i][0])); } int bingzhong = int.Parse(array_str[i][3]); if (bingzhong == enemyUnits[0]) { hero_kindNum[0]++; } else { if (bingzhong == enemyUnits[1]) { hero_kindNum[1]++; } else { if (bingzhong == enemyUnits[2]) { hero_kindNum[2]++; } } } } } //添加v个英雄 for (int i = 0; i < v; i++) { int id_newHero = 0; if (hero_kindNum[0] < 3) { int index = 0; while (true) { if (LoadJsonFile.RoleTableDatas[index++][3] == enemyUnits[0].ToString() && LoadJsonFile.RoleTableDatas[index - 1][4] == "1") { break; } } int id = index; do { id_newHero = Random.Range(0, 3) + id; } while (IsHadThisHero(heroIds, id_newHero)); newheroIds.Add(id_newHero); hero_kindNum[0]++; continue; } if (hero_kindNum[1] < 3) { int index = 0; while (true) { if (LoadJsonFile.RoleTableDatas[index++][3] == enemyUnits[1].ToString() && LoadJsonFile.RoleTableDatas[index - 1][4] == "1") { break; } } int id = index; do { id_newHero = Random.Range(0, 3) + id; } while (IsHadThisHero(heroIds, id_newHero)); newheroIds.Add(id_newHero); hero_kindNum[1]++; continue; } if (hero_kindNum[2] < 3) { int index = 0; while (true) { if (LoadJsonFile.RoleTableDatas[index++][3] == enemyUnits[2].ToString() && LoadJsonFile.RoleTableDatas[index - 1][4] == "1") { break; } } int id = index; do { id_newHero = Random.Range(0, 3) + id; } while (IsHadThisHero(heroIds, id_newHero)); newheroIds.Add(id_newHero); hero_kindNum[2]++; continue; } } int num = 0; //添加新英雄到总英雄数据中 for (int i = 0; i < 9; i++) { if (num >= v) { break; } if (array_str[i] == null) { //添加新英雄的数据 array_str[i] = LoadJsonFile.DeepClone <string>(LoadJsonFile.RoleTableDatas[newheroIds[num] - 1]); array_str[i].Add("1"); //品阶 array_str[i].Add("1"); //战斗周目数 num++; } } }