// второй этам определения доступных позиций для юнитов ближнего боя private void AttackPosition(List<int> List, Model mod) { var list = new List<int>(); foreach (var item in List) // перебор листа с несколькими юнитами в ряду, возврат их доступности для атаки { switch (item) { case 0: case 5: list = new List<int> { 5, 4, 1, 0 }; mod.CanAttack.Add(item, list);//кей в словаре - позиция атакуемого юнита, лист - кто его может атаковать break; case 1: case 4: list = new List<int> { 5, 4, 3, 2, 1, 0 }; mod.CanAttack.Add(item, list);//кей в словаре - позиция атакуемого юнита, лист - кто его может атаковать break; case 2: case 3: list = new List<int> { 1, 4, 3, 2 }; mod.CanAttack.Add(item, list);//кей в словаре - позиция атакуемого юнита, лист - кто его может атаковать break; default: break; } } }
// по окончанию раунда проверка на количество убитых, и победу команды public void EndRound(Model mod, Dictionary<int, Units> team) { int j = 0; foreach (int i in team.Keys) { if (!team[i].Live) { j++; } } if (j == 6) { mod.Die = true; } }
// получение юнита, который должен походить, сейчас public void GetCurrentUnit(Model mod, Dictionary<int, Units> red, Dictionary<int, Units> green) { RoundTurn(mod, red, green); mod.CurrentTeam = mod.TurnList.FirstOrDefault().team; var NameUnit = mod.TurnList.FirstOrDefault().name; if (mod.CurrentTeam == "Red") { var xxx = red.FirstOrDefault(x => x.Value.Name == NameUnit && x.Value.Live == true && x.Value.OnAction == true); mod.CurrentUnitAttak = xxx.Key; } else { mod.CurrentUnitAttak = green.Where(x => x.Value.Name == NameUnit && x.Value.Live == true && x.Value.OnAction == true).FirstOrDefault().Key; } }
// метод возврата пользователю конечного результата доступности юнитов для атаки public void FindPosition(Model mod, Dictionary<int, Units> red, Dictionary<int, Units> green) { CanUnitsOFAttack(mod, green); }
// обработка ходов после ожидания private void WaitSortTurn(Model mod, Dictionary<int, Units> reds, Dictionary<int, Units> greens) { mod.TurnList = new List<Turn>(); var redTurn = reds.Values.Where(x => x.Live == true && x.OnAction == false && x.Wait == true) .OrderBy(z => z.GetStat(Stats.Initiative)).ToList(); var greenTurn = greens.Values.Where(x => x.Live == true && x.OnAction == false && x.Wait == true) .OrderBy(z => z.GetStat(Stats.Initiative)).ToList(); if (redTurn.Count() == 0) { foreach (var item in greenTurn) { Turn t = new Turn(); t.name = item.Name; t.team = "Green"; mod.TurnList.Add(t); } } else if (greenTurn.Count() == 0) { foreach (var item in redTurn) { Turn t = new Turn(); t.name = item.Name; t.team = "Red"; mod.TurnList.Add(t); } } else if (redTurn.Count() == 0 && greenTurn.Count() == 0) { } else while ((redTurn.Last().Sorting == true) || (greenTurn.Last().Sorting == true)) { Turn t = new Turn(); if ((redTurn.Count(x => x.Sorting == true)) != 0 && (greenTurn.Count(x => x.Sorting == true)) != 0) { if (redTurn.FirstOrDefault(x => x.Sorting == true).GetStat(Stats.Initiative) >= greenTurn.FirstOrDefault(x => x.Sorting == true).GetStat(Stats.Initiative)) { t.team = "Red"; t.name = redTurn.FirstOrDefault(x => x.Sorting == true).Name; redTurn.FirstOrDefault(x => x.Sorting == true).Sorting = false; } else { t.team = "Green"; t.name = greenTurn.FirstOrDefault(x => x.Sorting == true).Name; greenTurn.FirstOrDefault(x => x.Sorting == true).Sorting = false; } } else if ((redTurn.Count(x => x.Sorting == true)) != 0) { t.team = "Red"; t.name = redTurn.FirstOrDefault(x => x.Sorting == true).Name; redTurn.FirstOrDefault(x => x.Sorting == true).Sorting = false; } else { t.team = "Green"; t.name = greenTurn.FirstOrDefault(x => x.Sorting == true).Name; greenTurn.FirstOrDefault(x => x.Sorting == true).Sorting = false; } mod.TurnList.Add(t); } ResetSorting(reds); ResetSorting(greens); }
// первая часть определения доступных для аттаки позиций, для юнитов ближнего боя private void MealeCanAttack(Model mod) { var list = new List<int>(); var mealepositions = mod.CanUnitsOfAttack.Where(x => x > 2).ToList(); //находим все живие позиции первого ряда, создание листа юнитов первого ряда if (mealepositions.Count() != 0) //есди есть хоть один из первого ряда { if (mealepositions.Count() == 1) // один юнит в ряду, его может атаковать каждый { list = new List<int> { 5, 4, 3, 2, 1, 0 }; mod.CanAttack.Add(mealepositions.FirstOrDefault(), list); //кей в словаре - позиция атакуемого юнита, лист - кто его может атаковать } else { AttackPosition(mealepositions, mod); //вызов метода отбора с большим количеством доступных для атаки юнитов в ряду } } else { mealepositions = mod.CanUnitsOfAttack.Where(x => x < 3).ToList(); // создание листа юнитов второго ряда if (mealepositions.Count() == 1) // один юнит в ряду { list = new List<int> { 5, 4, 3, 2, 1, 0 }; mod.CanAttack.Add(mealepositions.FirstOrDefault(), list);//кей в словаре - позиция атакуемого юнита, лист - кто его может атаковать } else { AttackPosition(mealepositions, mod);//вызов метода отбора с большим количеством доступных для атаки юнитов в ряду } } }
// выполнение баф-дебаф сценария на юните, во время его хода public void BuffActivations(Model mod) { //DebuffActivation //BuffActivation }
//отбираем всех живых на поле private void CanUnitsOFAttack(Model mod, Dictionary<int, Units> team) { int i = 0; foreach (var item in team) { if (item.Value.Live == true) { mod.CanUnitsOfAttack[i] = item.Key; i++; } } }
static void Main(string[] args) { Model Mod = new Model(); Action A = new Action(); Units u = new Units(); Magic m = new Magic(); double d = 12; Logic Log = new Logic(); var Unit1 = A.GetTest1(); Unit1.GhangeStat(Stats.Initiative, 10); Unit1.Name = "Unit1"; var Unit2 = A.GetTest1(); Unit2.GhangeStat(Stats.Initiative, 9); Unit2.Name = "Unit2"; var Unit3 = A.GetTest1(); Unit3.GhangeStat(Stats.Initiative, 2); Unit3.Name = "Unit3"; var Unit4 = A.GetTest1(); Unit4.GhangeStat(Stats.Initiative, 1); Unit4.Name = "Unit4"; var Unit5 = A.GetTest1(); Unit5.GhangeStat(Stats.Initiative, 3); Unit5.Name = "Unit5"; var Unit6 = A.GetTest1(); Unit6.GhangeStat(Stats.Initiative, 14); Unit6.Name = "Unit6"; var Unit7 = A.GetTest1(); Unit7.GhangeStat(Stats.Initiative, 5); Unit7.Name = "Unit7"; var Unit8 = A.GetTest1(); Unit8.GhangeStat(Stats.Initiative, 6); Unit8.Name = "Unit8"; var Unit9 = A.GetTest1(); Unit9.GhangeStat(Stats.Initiative, 7); Unit9.Name = "Unit9"; var Unit10 = A.GetTest1(); Unit10.GhangeStat(Stats.Initiative, 8); Unit10.Name = "Unit10"; var Unit11 = A.GetTest1(); Unit11.GhangeStat(Stats.Initiative, 11); Unit11.Name = "Unit11"; var Unit12 = A.GetTest2(); Unit12.GhangeStat(Stats.Initiative, 12); Unit12.Name = "Unit12"; Dictionary<int, Units> Red = new Dictionary<int, Units>(); Dictionary<int, Units> Green = new Dictionary<int, Units>(); Red.Add(0, Unit1); Red.Add(1, Unit2); Red.Add(2, Unit3); Red.Add(3, Unit4); Red.Add(4, Unit5); Red.Add(5, Unit6); Green.Add(0, Unit7); Green.Add(1, Unit8); Green.Add(2, Unit9); Green.Add(3, Unit10); Green.Add(4, Unit11); Green.Add(5, Unit12); m.Atribute = "OnAction"; Green[2].BuffsDebuffs.Add(m); Green[1].BuffsDebuffs.Add(m); Green[3].BuffsDebuffs.Add(m); Green[4].BuffsDebuffs.Add(m); Green[5].BuffsDebuffs.Add(m); Red[1].Wait = true; Red[2].Wait = true; Green[1].Wait = true; int i = 0; while (i<10) { i++; Log.GetCurrentUnit(Mod, Red, Green); if (Mod.CurrentTeam == "red") { Red.FirstOrDefault(x => x.Key == Mod.CurrentUnitAttak).Value.OnAction = false; } else { Green.FirstOrDefault(x => x.Key == Mod.CurrentUnitAttak).Value.OnAction = false; } var olol = Mod.TurnList; } Log.GetCurrentUnit(Mod, Red, Green); var z = Mod.TurnList; }