public override bool IsPenetrated(Ammo projectile) { Console.WriteLine($"Прилетел снаряд " + projectile.type + " калибра " + projectile.GetPenetration()); if (projectile is HECartridge) { //Если фугасный, то толщина брони считается больше Console.WriteLine($"Броня =" + this.thickness * Config._HArmour_VS_HE + " мм"); return(projectile.GetPenetration() > this.thickness * Config._HArmour_VS_HE); } else if (projectile is HEATCartridge) { //Если кумулятивный, то толщина брони нормальная Console.WriteLine($"Броня =" + this.thickness * Config._HArmour_VS_HEAT + " мм"); return(projectile.GetPenetration() > this.thickness * Config._HArmour_VS_HEAT); } else { //Если подкалиберный, то считаем уменьшаем толщину Console.WriteLine($"Броня =" + this.thickness * Config._HArmour_VS_AP + " мм"); return(projectile.GetPenetration() > this.thickness * Config._HArmour_VS_AP); } //возвращаем результат сравнения способности снаряда к проникновению (всегда равна калибру) со скорректированной толщиной брони //если TRUE - броня пробита }
public virtual bool IsPenetrated(Ammo projectile) { return(projectile.GetDamage() > thickness); }
static void Main(string[] args) { Panzer player1 = new Panzer("ИС-2", new Gun(122, 40), 90, 600); Panzer player2 = new Panzer("Тигр", new Gun(88, 55), 120, 650); string selectedStr; int selectedAmmo; int selectedArmour; while (true) { //================================= ХОД ПЕВРОГО ИГРОКА ========================================= Console.WriteLine("========== Игрок 1 ============>"); selectedAmmo = -1; while (player1.LoadedAmmo == null) { while (selectedAmmo < 0 || selectedAmmo > 2) { Console.WriteLine("Выбрать снаряд:"); Console.WriteLine("0 - фугасный"); Console.WriteLine("1 - кумулятивный"); Console.WriteLine("2 - бронебойный"); selectedStr = Console.ReadLine(); int.TryParse(selectedStr, out selectedAmmo); } player1.LoadGun(Config.ammoTypes[selectedAmmo]); } Console.WriteLine(); selectedArmour = -1; while (selectedArmour < 0 || selectedArmour > 2) { Console.WriteLine("Выбрать броню:"); Console.WriteLine("0 - гомогенная"); Console.WriteLine("1 - разнесенная"); Console.WriteLine("2 - комбинированная"); selectedStr = Console.ReadLine(); int.TryParse(selectedStr, out selectedArmour); } player1.SelectArmour(Config.armourTypes[selectedArmour]); Console.WriteLine(); Console.WriteLine("Игрок 1 - текущее состояние:"); Console.Write(player1.ToString()); Console.WriteLine("Нажмите ENTER для выстрела"); Console.ReadKey(); Ammo flyingAmmo = (Ammo)player1.Shoot()?.Clone(); if (flyingAmmo != null) { player2.HandleHit(flyingAmmo); } if (player2.GetHealth() <= 0) { Console.WriteLine($"Танк игрока 2 уничтожен"); break; } //================================= ХОД ВТОРОГО ИГРОКА ========================================= Console.WriteLine("========== Игрок 2 ============>"); selectedAmmo = -1; while (player2.LoadedAmmo == null) { while (selectedAmmo < 0 || selectedAmmo > 2) { Console.WriteLine("Выбрать снаряд:"); Console.WriteLine("0 - фугасный"); Console.WriteLine("1 - кумулятивный"); Console.WriteLine("2 - бронебойный"); selectedStr = Console.ReadLine(); int.TryParse(selectedStr, out selectedAmmo); } player2.LoadGun(Config.ammoTypes[selectedAmmo]); } selectedArmour = -1; while (selectedArmour < 0 || selectedArmour > 2) { Console.WriteLine("Выбрать броню:"); Console.WriteLine("0 - гомогенная"); Console.WriteLine("1 - разнесенная"); Console.WriteLine("2 - комбинированная"); selectedStr = Console.ReadLine(); int.TryParse(selectedStr, out selectedArmour); } player2.SelectArmour(Config.armourTypes[selectedArmour]); Console.WriteLine("Игрок 2:"); Console.Write(player2.ToString()); Console.WriteLine("Нажмите ENTER для выстрела"); Console.ReadKey(); flyingAmmo = (Ammo)player2.Shoot()?.Clone(); if (flyingAmmo != null) { player1.HandleHit(flyingAmmo); } if (player1.GetHealth() <= 0) { Console.WriteLine($"Танк игрока 1 уничтожен"); break; } } }