//вычисляем табличное значение условия попадания в ближнем бою public static int MeleeHitCondition(CombatLib.Offence.Melee.OffenceMelee AttackingPlayer, CombatLib.Defence.Melee.DefenceMelee DefendingPlayer, ref CombatLib.Phases.PhaseHits.PhaseHits Hits) { if (AttackingPlayer.WS - DefendingPlayer.WS > 0) Hits.Condition = 3; else if (AttackingPlayer.WS * 2 < DefendingPlayer.WS) Hits.Condition = 5; else Hits.Condition = 4; return Hits.Condition; }
//вычисляем табличное значение условий попадания в //дальнем бою public static int RangedHitConditions(CombatLib.Offence.Ranged.OffenceRanged AttackingPlayer, ref CombatLib.Phases.PhaseHits.PhaseHits Hits) { if (AttackingPlayer.BS < 6) { Hits.Condition = 7 - AttackingPlayer.BS; } else { Hits.Condition = 2; Hits.AdditionalCondition = 12 - AttackingPlayer.BS; } return Hits.Condition; }
//вычисляем табличное значение условия ранения в ближнем бою public static int MeleeWoundCondition(CombatLib.Offence.Melee.OffenceMelee AttackingPlayer, CombatLib.Defence.Melee.DMInfantry DefendingPlayer, ref CombatLib.Phases.PhaseWounds.PhaseWounds Wounds) { int difference = AttackingPlayer.S - DefendingPlayer.T; if (difference >= 2) Wounds.Condition = 2; else if ((difference >= -3) && (difference <= 1)) { if (difference <= -2) Wounds.Condition = 6; if (difference == -1) Wounds.Condition = 5; if (difference == 0) Wounds.Condition = 4; if (difference == 1) Wounds.Condition = 3; } else Wounds.Condition = 7; return Wounds.Condition; }
//Спасброски за пехоту, начальные данные //берутся из PhaseWoundsInfantry, результат записывается в PhaseSavesInfantry, случайные числа получаются из экземпляра класса Random, возвращает количество спасенных public static int Play(ref CombatLib.Phases.PhaseWounds.PhaseWoundsInfantry Wounds, ref CombatLib.Phases.PhaseSaves.PhaseSavesInfantry Saves, ref Random RndGenerator) { Console.WriteLine("PlaySaves, aim - infantry"); //отладочный вывод int i; //счетчик всех попыток спасения Saves.SaveCubes = new int[Wounds.RowWounds]; //выделение памяти под массив кубов на спасброски. Количество бросков = количеству потенциальных ран for (i = 0; i < Wounds.RowWounds; i++) { Saves.SaveCubes[i] = RndGenerator.Next(1, 7); if (Saves.SaveCubes[i] >= Saves.Condition) Saves.Saves++; } Wounds.Wounds = Wounds.RowWounds - Saves.Saves; //Итоговое количество ран = разница между потенциальными и спасшимися Saves.SaveCubesStr = CombatLib.Addition.AdditionalFuncs.ReduceCubesToStr(Saves.SaveCubes); //преобразуем кубы на спасы в строку return Saves.Saves; }
//Дальний бой против пехоты, начальные данные берутся из потомка OffenceRanged, DRInfantry, PhaseHitsInfantry, //результат записывается в экземпляр класса PhaseWoundsInfantry, //случайные числа получаются из экземпляра класса Random, возвращает общее количество ран //Д А Л Ь Н И Й Б О Й public static int RangedPlay(CombatLib.Offence.Ranged.OffenceRanged AttackingPlayer, CombatLib.Defence.Ranged.DRInfantry DefendingPlayer, CombatLib.Phases.PhaseHits.PhaseHitsInfantry Hits, ref CombatLib.Phases.PhaseWounds.PhaseWoundsInfantry Wounds, ref Random RndGenerator) { Console.WriteLine("PlayWounds, RangedPlay, aim - infantry"); //отладочный вывод CombatLib.Phases.PhaseWounds.PhaseWounds baseWounds = Wounds; //создаем указатель на базовый класс для класса фазы ран пехоты, чтобы передать его в функцию CombatLib.Addition.AdditionalFuncs.RangedWoundCondition(AttackingPlayer, DefendingPlayer, ref baseWounds); //вычисляем условие ранения int i; //счетчик всех бросков на раны Wounds.WoundCubes = new int[Hits.Hits]; //выделяем память под массив кубов ран for (i = 0; i < Hits.Hits; i++) //цикл бросков кубов { Wounds.WoundCubes[i] = RndGenerator.Next(1, 7); if (Wounds.WoundCubes[i] >= Wounds.Condition) Wounds.RowWounds++; } Wounds.WoundCubesStr = CombatLib.Addition.AdditionalFuncs.ReduceCubesToStr(Wounds.WoundCubes); //преобразуем кубы на раны в строку return Wounds.RowWounds; }
//Спасброски за технику, начальные данные //берутся из PhaseWoundsVehicle, результат записывается в PhaseSavesVehicle, случайные числа получаются из экземпляра класса Random, возвращает количество спасенных public static int Play(ref CombatLib.Phases.PhaseWounds.PhaseWoundsVehicle Wounds, ref CombatLib.Phases.PhaseSaves.PhaseSavesVehicle Saves, ref Random RndGenerator) { Console.WriteLine("PlaySaves, aim - vehicle"); //отладочный вывод int i; //счетчик всех попыток спасения Saves.SaveCubes = new int[Wounds.RowWounds]; //выделение памяти под массив кубов на спасброски. Количество бросков = количеству потенциальных ран for (i = 0; i < Wounds.RowPunchedWounds; i++) //В первом цикле пробуем спасать пробивающие раны в силу их наибольшей опасности { Saves.SaveCubes[i] = RndGenerator.Next(1, 7); if (Saves.SaveCubes[i] >= Saves.Condition) Saves.PunchedSaves++; } for (i = Wounds.RowPunchedWounds; i < Wounds.RowWounds; i++) //Нумерация i такова, чтобы продолжить заполнение массива после спасов на пробивающие раны { Saves.SaveCubes[i] = RndGenerator.Next(1, 7); if (Saves.SaveCubes[i] >= Saves.Condition) Saves.SlidingSaves++; } Saves.Saves = Saves.PunchedSaves + Saves.SlidingSaves; //Обновляем количество спасенных в итоге Wounds.PunchedWounds = Wounds.RowPunchedWounds - Saves.PunchedSaves; //Обновляем количество ран в итоге после спасов Wounds.SlidingWounds = Wounds.RowSlidingWounds - Saves.SlidingSaves; Wounds.Wounds = Wounds.RowWounds - Saves.Saves; Saves.SaveCubesStr = CombatLib.Addition.AdditionalFuncs.ReduceCubesToStr(Saves.SaveCubes); //преобразуем кубы на спасы в строку return Saves.Saves; }
//Ближний бой против техники, начальные данные берутся из потомка OffenceMelee, DMVehicle, PhaseHitsVehicle, //результат записывается в экземпляр класса PhaseWoundsVehicle, //случайные числа получаются из экземпляра класса Random, возвращает общее количество ран public static int MeleePlay(CombatLib.Offence.Melee.OffenceMelee AttackingPlayer, CombatLib.Defence.Melee.DMVehicle DefendingPlayer, CombatLib.Phases.PhaseHits.PhaseHitsVehicle Hits, ref CombatLib.Phases.PhaseWounds.PhaseWoundsVehicle Wounds, ref Random RndGenerator) { Console.WriteLine("PlayWounds, MeleePlay, aim - vehicle"); CombatLib.Phases.PhaseWounds.PhaseWounds baseWounds = Wounds; //создаем указатель на базовый класс для класса фазы ран техники, чтобы передать его в функцию CombatLib.Addition.AdditionalFuncs.VehicleWoundCondition(DefendingPlayer, ref baseWounds); //вычисляем условие ранения int i; //счетчик всех бросков на раны Wounds.WoundCubes = new int[Hits.Hits]; //выделяем память под массив кубов ран for (i = 0; i < Hits.Hits; i++) //цикл бросков кубов { Wounds.WoundCubes[i] = RndGenerator.Next(1, 7); if (Wounds.WoundCubes[i] + AttackingPlayer.S < Wounds.Condition) continue; //если куб + сила атакующего меньше условия попадания, то ничего не происходит else if (Wounds.WoundCubes[i] + AttackingPlayer.S == Wounds.Condition) Wounds.RowSlidingWounds++; //если эта величина равна условию попадания, то ранение по технике засчитывается, //скользящее else Wounds.RowPunchedWounds++; //если больше, то ранение - пробивающее } Wounds.RowWounds = Wounds.RowPunchedWounds + Wounds.RowSlidingWounds; Wounds.WoundCubesStr = CombatLib.Addition.AdditionalFuncs.ReduceCubesToStr(Wounds.WoundCubes); //преобразуем кубы на раны в строку return Wounds.RowWounds; }
//Ближний бой, начальные данные берутся из потомка OffenceMelee, результат записывается в экземпляр потомка класса PhaseHits, случайные числа получаются из //экземпляра класса Random, возвращает количество попаданий public static int PlayMelee(CombatLib.Offence.Melee.OffenceMelee AttackingPlayer, CombatLib.Defence.Melee.DefenceMelee DefendingPlayer, ref CombatLib.Phases.PhaseHits.PhaseHits Hits, ref Random RndGenerator) { Console.WriteLine("PlayHits, Play Melee"); //отладочный вывод CombatLib.Addition.AdditionalFuncs.MeleeHitCondition(AttackingPlayer, DefendingPlayer, ref Hits); ////вычисляем условие попадания int i, j, actualSizeOfArr = AttackingPlayer.A; //j - счетчик бросков на попадание без учета перебрасываний, i - счетчик всех бросков на попадания и нулей, обозначающих переброс Hits.HitCubes = new int[AttackingPlayer.A]; //выделение памяти под массив кубов на попадание. Количество элементов = количеству атак for (i = 0, j = 0; j < AttackingPlayer.A; j++) //цикл бросков кубов { if (i >= actualSizeOfArr) { actualSizeOfArr = i + 1; Array.Resize(ref Hits.HitCubes, actualSizeOfArr); } Hits.HitCubes[i] = RndGenerator.Next(1, 7); if (Hits.HitCubes[i] >= Hits.Condition) Hits.Hits++; else if (Hits.AdditionalCondition < 7) { i++; if (i >= actualSizeOfArr) { actualSizeOfArr = i + 2; Array.Resize(ref Hits.HitCubes, actualSizeOfArr); } Hits.HitCubes[i] = 0; //отмечаем, что куб был переброшен, добавляя 0 и изменяя счетчик бросков i i++; Hits.HitCubes[i] = RndGenerator.Next(1, 7); if (Hits.HitCubes[i] >= Hits.AdditionalCondition) Hits.Hits++; } i++; } Hits.HitCubesStr = CombatLib.Addition.AdditionalFuncs.ReduceCubesToStr(Hits.HitCubes); //преобразуем кубы на ранения в строку return Hits.Hits; }
//вычисляем табличное значение условия ранения для техники public static int VehicleWoundCondition(CombatLib.Defence.Melee.DMVehicle DefendingPlayer, ref CombatLib.Phases.PhaseWounds.PhaseWounds Wounds) { Wounds.Condition = DefendingPlayer.T; return Wounds.Condition; }
//Ф У Н К Ц И И О Т Ы Г Р Ы Ш А Б О Я //Т Е Х Н И К А П Р О Т И В Т Е Х Н И К И private void PlayVehicleVSVehicle(CombatLib.Offence.Melee.OMVehicle AttackingPlayer, CombatLib.Defence.Melee.DMVehicle DefendingPlayer) { /*//отладочные выводы MessageBox.Show("VehicleVSVehicle"); MessageBox.Show(AttackingPlayer.ToString(), "AttackingPlayer"); MessageBox.Show(DefendingPlayer.ToString(), "DefendingPlayer");*/ //инициализация объектов Random RndGenerator = new Random(); CombatLib.Phases.PhaseHits.PhaseHitsVehicle Hits = new CombatLib.Phases.PhaseHits.PhaseHitsVehicle(); CombatLib.Phases.PhaseWounds.PhaseWoundsVehicle Wounds = new CombatLib.Phases.PhaseWounds.PhaseWoundsVehicle(); CombatLib.Phases.PhaseSaves.PhaseSavesVehicle Saves = new CombatLib.Phases.PhaseSaves.PhaseSavesVehicle(); //указатели на родителей классов CombatLib.Offence.Melee.OffenceMelee baseOMVehicle = AttackingPlayer; CombatLib.Defence.Melee.DefenceMelee baseDMVehicle = DefendingPlayer; CombatLib.Phases.PhaseHits.PhaseHits basePhaseHitsVehicle = Hits; //И Г Р А //попадания try { CombatLib.BattleFuncs.PlayHits.PlayMelee(baseOMVehicle, baseDMVehicle, ref basePhaseHitsVehicle, ref RndGenerator); } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка: " + e.GetType().ToString(), MessageBoxButton.OK, MessageBoxImage.Error); return; } if (Hits.Hits == 0) { this.DisplayResult(Hits); return; } //раны try { CombatLib.BattleFuncs.PlayWounds.MeleePlay(baseOMVehicle, DefendingPlayer, Hits, ref Wounds, ref RndGenerator); } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка: " + e.GetType().ToString(), MessageBoxButton.OK, MessageBoxImage.Error); return; } //спасов нет, поэтому все "сырые" раны станут окончательными Wounds.PunchedWounds = Wounds.RowPunchedWounds; Wounds.SlidingWounds = Wounds.RowSlidingWounds; Wounds.Wounds = Wounds.PunchedWounds + Wounds.SlidingWounds; this.DisplayResult(Hits, Wounds, AttackingPlayer.S); }
//Т Е Х Н И К А П Р О Т И В П Е Х О Т Ы private void PlayVehicleVSInfantry(CombatLib.Offence.Melee.OMVehicle AttackingPlayer, CombatLib.Defence.Melee.DMInfantry DefendingPlayer) { /*//отладочные выводы MessageBox.Show("VehicleVSInfantry"); MessageBox.Show(AttackingPlayer.ToString(), "AttackingPlayer"); MessageBox.Show(DefendingPlayer.ToString(), "DefendingPlayer");*/ //инициализация объектов Random RndGenerator = new Random(); CombatLib.Phases.PhaseHits.PhaseHitsInfantry Hits = new CombatLib.Phases.PhaseHits.PhaseHitsInfantry(); CombatLib.Phases.PhaseWounds.PhaseWoundsInfantry Wounds = new CombatLib.Phases.PhaseWounds.PhaseWoundsInfantry(); CombatLib.Phases.PhaseSaves.PhaseSavesInfantry Saves = new CombatLib.Phases.PhaseSaves.PhaseSavesInfantry(); //указатели на родителей классов CombatLib.Offence.Melee.OffenceMelee baseOMVehicle = AttackingPlayer; CombatLib.Defence.Melee.DefenceMelee baseDMInfantry = DefendingPlayer; CombatLib.Phases.PhaseHits.PhaseHits basePhaseHitsInfantry = Hits; ////ПОДГОТОВЛЕНИЯ ПЕРЕД ИГРОЙ //вычисление наилучшего спасброска Saves.Condition = CombatLib.Addition.AdditionalFuncs.BestSaveThrow(AttackingPlayer.AP, 7, DefendingPlayer.ArmorSave, DefendingPlayer.InvulSave); //И Г Р А //попадания try { CombatLib.BattleFuncs.PlayHits.PlayMelee(baseOMVehicle, DefendingPlayer, ref basePhaseHitsInfantry, ref RndGenerator); } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка: " + e.GetType().ToString(), MessageBoxButton.OK, MessageBoxImage.Error); return; } if (Hits.Hits == 0) { this.DisplayResult(Hits); return; } //раны try { CombatLib.BattleFuncs.PlayWounds.MeleePlay(baseOMVehicle, DefendingPlayer, Hits, ref Wounds, ref RndGenerator); } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка: " + e.GetType().ToString(), MessageBoxButton.OK, MessageBoxImage.Error); return; } if (Wounds.RowWounds == 0) { this.DisplayResult(Hits, Wounds); return; } //спасы try { CombatLib.BattleFuncs.PlaySaves.Play(ref Wounds, ref Saves, ref RndGenerator); } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка: " + e.GetType().ToString(), MessageBoxButton.OK, MessageBoxImage.Error); return; } this.DisplayResult(Hits, Wounds, Saves); }
//против техники void DisplayResult(CombatLib.Phases.PhaseHits.PhaseHitsVehicle Hits, CombatLib.Phases.PhaseWounds.PhaseWoundsVehicle Wounds = null, int S = -1, CombatLib.Phases.PhaseSaves.PhaseSavesVehicle Saves = null) { /*MessageBox.Show(Hits.ToString(), "Попадания", MessageBoxButton.OK); if (Wounds != null) MessageBox.Show(Wounds.ToString(), "Раны", MessageBoxButton.OK); if (Saves != null) MessageBox.Show(Saves.ToString(), "Спасброски", MessageBoxButton.OK);*/ WindowResultVehicle Result = new WindowResultVehicle(); if (Wounds == null) SetResultImg(ref Result, Hits.Hits); else SetResultImg(ref Result, Hits.Hits, Wounds.Wounds); Result.Show(); //Hits if (Hits.Condition > 6) { //hits Result.LabelHits.Content = "нельзя попасть"; Result.LabelAddHitCondInfo.Visibility = System.Windows.Visibility.Hidden; Result.LabelAddHitCondition.Visibility = System.Windows.Visibility.Hidden; //wounds Result.LabelPunchedWoundsInfo.Visibility = System.Windows.Visibility.Hidden; Result.LabelPunchedWounds.Visibility = System.Windows.Visibility.Hidden; Result.LabelSlidingWoundsInfo.Visibility = System.Windows.Visibility.Hidden; Result.LabelSlidingWounds.Visibility = System.Windows.Visibility.Hidden; Result.LabelStrengthInfo.Visibility = System.Windows.Visibility.Hidden; Result.LabelStrength.Visibility = System.Windows.Visibility.Hidden; //saves Result.LabelSaveInfo.Visibility = System.Windows.Visibility.Hidden; Result.LabelSaves.Visibility = System.Windows.Visibility.Hidden; //groups Result.GroupHits.Visibility = System.Windows.Visibility.Hidden; Result.GroupWounds.Visibility = System.Windows.Visibility.Hidden; Result.GroupSaves.Visibility = System.Windows.Visibility.Hidden; return; } else { Result.LabelHits.Content = Hits.Hits.ToString(); Result.LabelHitCondition.Content = Hits.Condition.ToString() + "+"; Result.TextBlockHitCubes.Text = Hits.HitCubesStr; Result.TextBlockHitCubes.TextWrapping = TextWrapping.Wrap; if (Hits.AdditionalCondition <= 6) { Result.LabelAddHitCondition.Content = Hits.AdditionalCondition.ToString() + "+"; } else { Result.LabelAddHitCondInfo.Visibility = System.Windows.Visibility.Hidden; Result.LabelAddHitCondition.Visibility = System.Windows.Visibility.Hidden; } } //Wounds if ((Wounds == null) || (Wounds.Condition > 14)) { //wounds Result.LabelPunchedWoundsInfo.Visibility = System.Windows.Visibility.Hidden; Result.LabelPunchedWounds.Visibility = System.Windows.Visibility.Hidden; Result.LabelSlidingWoundsInfo.Visibility = System.Windows.Visibility.Hidden; Result.LabelSlidingWounds.Visibility = System.Windows.Visibility.Hidden; Result.LabelStrengthInfo.Visibility = System.Windows.Visibility.Hidden; Result.LabelStrength.Visibility = System.Windows.Visibility.Hidden; //saves Result.LabelSaveInfo.Visibility = System.Windows.Visibility.Hidden; Result.LabelSaves.Visibility = System.Windows.Visibility.Hidden; //groups Result.GroupWounds.Visibility = System.Windows.Visibility.Hidden; Result.GroupSaves.Visibility = System.Windows.Visibility.Hidden; } if (Wounds == null) { //wounds Result.LabelWoundsInfo.Content = "не попал"; return; } else if (Wounds.Condition > 14) { //wounds Result.LabelWoundsInfo.Content = "нельзя ранить"; return; } else { Result.LabelPunchedWounds.Content = Wounds.PunchedWounds.ToString(); Result.LabelSlidingWounds.Content = Wounds.SlidingWounds.ToString(); Result.LabelWoundCondition.Content = Wounds.Condition.ToString() + "+"; Result.TextBlockWoundCubes.Text = Wounds.WoundCubesStr; Result.TextBlockWoundCubes.TextWrapping = TextWrapping.Wrap; Result.LabelStrength.Content = S.ToString(); } //Saves if ((Saves == null) && (Wounds.Wounds != 0)) { //saves Result.LabelSaveInfo.Visibility = System.Windows.Visibility.Hidden; Result.LabelSaves.Visibility = System.Windows.Visibility.Hidden; //groups Result.GroupSaves.Visibility = System.Windows.Visibility.Hidden; return; } if ((Saves == null) || (Saves.Condition > 6)) { //groups Result.GroupSaves.Visibility = System.Windows.Visibility.Hidden; } if (Saves == null) { //saves Result.LabelSaves.Content = "не ранил"; return; } else if (Saves.Condition > 6) { //saves Result.LabelSaves.Content = "нельзя спасти"; return; } else { Result.LabelSaves.Content = Saves.Saves.ToString(); Result.LabelSaveCondition.Content = Saves.Condition.ToString() + "+"; Result.TextBlockSaveCubes.Text = Saves.SaveCubesStr; Result.TextBlockSaveCubes.TextWrapping = TextWrapping.Wrap; } return; }
//Ф У Н К Ц И И О Т Ы Г Р Ы Ш А Б О Я //Т Е Х Н И К А П Р О Т И В Т Е Х Н И К И private void PlayVehicleVSVehicle(CombatLib.Offence.Ranged.ORVehicle AttackingPlayer, CombatLib.Defence.Ranged.DRVehicle DefendingPlayer) { /*//отладочные выводы MessageBox.Show("VehicleVSVehicle"); MessageBox.Show(AttackingPlayer.ToString(), "AttackingPlayer"); MessageBox.Show(DefendingPlayer.ToString(), "DefendingPlayer");*/ //инициализация объектов Random RndGenerator = new Random(); CombatLib.Phases.PhaseHits.PhaseHitsVehicle Hits = new CombatLib.Phases.PhaseHits.PhaseHitsVehicle(); CombatLib.Phases.PhaseWounds.PhaseWoundsVehicle Wounds = new CombatLib.Phases.PhaseWounds.PhaseWoundsVehicle(); CombatLib.Phases.PhaseSaves.PhaseSavesVehicle Saves = new CombatLib.Phases.PhaseSaves.PhaseSavesVehicle(); //указатели на родителей классов CombatLib.Offence.Ranged.OffenceRanged baseORInfantry = AttackingPlayer; CombatLib.Phases.PhaseHits.PhaseHits basePhaseHitsVehicle = Hits; ////ПОДГОТОВЛЕНИЯ ПЕРЕД ИГРОЙ //вычисление наилучшего спасброска Saves.Condition = DefendingPlayer.CoverSave; //И Г Р А //попадания try { CombatLib.BattleFuncs.PlayHits.PlayRanged(baseORInfantry, ref basePhaseHitsVehicle, ref RndGenerator); } catch(Exception e) { MessageBox.Show(e.Message, "Ошибка: " + e.GetType().ToString(), MessageBoxButton.OK, MessageBoxImage.Error); return; } if (Hits.Hits == 0) { this.DisplayResult(Hits); return; } //раны try { CombatLib.BattleFuncs.PlayWounds.RangedPlay(baseORInfantry, DefendingPlayer, Hits, ref Wounds, ref RndGenerator); } catch(Exception e) { MessageBox.Show(e.Message, "Ошибка: " + e.GetType().ToString(), MessageBoxButton.OK, MessageBoxImage.Error); return; } if (Wounds.RowWounds == 0) { this.DisplayResult(Hits, Wounds); return; } //спасы try { CombatLib.BattleFuncs.PlaySaves.Play(ref Wounds, ref Saves, ref RndGenerator); } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка: " + e.GetType().ToString(), MessageBoxButton.OK, MessageBoxImage.Error); return; } this.DisplayResult(Hits, Wounds, AttackingPlayer.S, Saves); }
//П Е Х О Т А П Р О Т И В П Е Х О Т Ы private void PlayInfantryVSInfantry(CombatLib.Offence.Ranged.ORInfantry AttackingPlayer, CombatLib.Defence.Ranged.DRInfantry DefendingPlayer) { /*//отладочные выводы MessageBox.Show("InfantryVSInfantry"); MessageBox.Show(AttackingPlayer.ToString(), "AttackingPlayer"); MessageBox.Show(DefendingPlayer.ToString(), "DefendingPlayer");*/ //инициализация объектов Random RndGenerator = new Random(); //генератор рандомных числе - один на все время работы программы со случайной затравкой CombatLib.Phases.PhaseHits.PhaseHitsInfantry Hits = new CombatLib.Phases.PhaseHits.PhaseHitsInfantry(); //класс фазы попаданий CombatLib.Phases.PhaseWounds.PhaseWoundsInfantry Wounds = new CombatLib.Phases.PhaseWounds.PhaseWoundsInfantry(); //класс фазы ран CombatLib.Phases.PhaseSaves.PhaseSavesInfantry Saves = new CombatLib.Phases.PhaseSaves.PhaseSavesInfantry(); //класс фазы спасбросков //указатели на родителей классов CombatLib.Offence.Ranged.OffenceRanged baseORInfantry = AttackingPlayer; //родитель атакующего игрока CombatLib.Phases.PhaseHits.PhaseHits basePhaseHitsInfantry = Hits; //родитель фазы попаданий //ПОДГОТОВЛЕНИЯ ПЕРЕД ИГРОЙ //вычисление наилучшего спасброска Saves.Condition = CombatLib.Addition.AdditionalFuncs.BestSaveThrow(AttackingPlayer.AP, DefendingPlayer.CoverSave, DefendingPlayer.ArmorSave, DefendingPlayer.InvulSave); //И Г Р А //попадания try { CombatLib.BattleFuncs.PlayHits.PlayRanged(baseORInfantry, ref basePhaseHitsInfantry, ref RndGenerator); } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка: " + e.GetType().ToString(), MessageBoxButton.OK, MessageBoxImage.Error); return; } if (Hits.Hits == 0) { this.DisplayResult(Hits); return; } //раны try { CombatLib.BattleFuncs.PlayWounds.RangedPlay(baseORInfantry, DefendingPlayer, Hits, ref Wounds, ref RndGenerator); } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка: " + e.GetType().ToString(), MessageBoxButton.OK, MessageBoxImage.Error); return; } if (Wounds.RowWounds == 0) { this.DisplayResult(Hits, Wounds); return; } //спасы try { CombatLib.BattleFuncs.PlaySaves.Play(ref Wounds, ref Saves, ref RndGenerator); } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка: " + e.GetType().ToString(), MessageBoxButton.OK, MessageBoxImage.Error); return; } this.DisplayResult(Hits, Wounds, Saves); }