Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace Clight_37_OOP_War
- {
- class Program
- {
- static void Main(string[] args)
- {
- int warriorsCount = 7;
- Country odinburg = new Country("Одинбург", warriorsCount);
- Country dvack = new Country("Двацк", warriorsCount);
- ShowStats(odinburg, dvack);
- Console.CursorVisible = false;
- Console.ReadKey(true);
- while (odinburg.IsAliveArmy && dvack.IsAliveArmy)
- {
- odinburg.TakeDamage(dvack.GiveDamage());
- if (!odinburg.IsAliveArmy || !dvack.IsAliveArmy) { break; }
- dvack.TakeDamage(odinburg.GiveDamage());
- System.Threading.Thread.Sleep(100);
- }
- if (odinburg.IsAliveArmy && !dvack.IsAliveArmy) ShowWinner(odinburg);
- else ShowWinner(dvack);
- Console.ReadKey();
- }
- public static void ShowStats(Country country1, Country country2)
- {
- Console.WriteLine($"Битва между странами {country1.Name} и {country2.Name} и их армиями.");
- Console.WriteLine($"\nАрмия страны {country1.Name}:");
- country1.ShowArmy();
- Console.WriteLine($"\nАрмия страны {country2.Name}:");
- country2.ShowArmy();
- Console.WriteLine($"\nПо нажатию на любую клавишу начнётся битва между странами.\n");
- }
- public static void ShowWinner(Country country)
- {
- Console.WriteLine($"\n\nВойну выиграла Страна {country.Name}");
- Console.WriteLine("\nОставшиеся бойцы Армии:");
- country.ShowArmy();
- }
- }
- class Country
- {
- private Random random = new Random();
- public string Name { get; private set; }
- public bool IsAliveArmy { get { return _army.Count > 0; } }
- private List<Warrior> _army;
- public Country(string name, int numberWarriorsInArmy)
- {
- Random random = new Random();
- Name = name;
- List<Warrior> tempArmy = new List<Warrior>();
- for (int i = 0; i < numberWarriorsInArmy; i++)
- {
- switch (random.Next(0, 3))
- {
- case 0:
- Warrior cannonFolder = new CannonFolder();
- tempArmy.Add(cannonFolder);
- break;
- case 1:
- Warrior soldier = new Soldier();
- tempArmy.Add(soldier);
- break;
- case 2:
- Warrior lieutenant = new Lieutenant();
- tempArmy.Add(lieutenant);
- break;
- default:
- break;
- }
- }
- _army = tempArmy;
- }
- public void TakeDamage(int damage)
- {
- int warrior = random.Next(0, _army.Count);
- int takeHealth = 0;
- bool isAliveWarrior = _army[warrior].TakeDamage(damage, ref takeHealth);
- if (!isAliveWarrior)
- {
- Console.WriteLine($"боец страны {Name} умер.");
- _army.RemoveAt(warrior);
- }
- else
- {
- Console.WriteLine($"боец страны {Name} потерял {takeHealth} здоровья. Осталось {_army[warrior].Health}");
- }
- }
- public int GiveDamage()
- {
- int warrior = random.Next(0, _army.Count);
- return _army[warrior].Damage;
- }
- public void ShowArmy()
- {
- foreach (var warrior in _army)
- {
- warrior.ShowInfo();
- }
- }
- }
- abstract class Warrior
- {
- public int Health { get; private set; }
- public int Damage { get; private set; }
- private int _armor;
- public Warrior(int health, int damage, int armor)
- {
- Health = health;
- Damage = damage;
- _armor = armor;
- }
- public void ShowInfo()
- {
- Console.WriteLine($"Здоровье: {Health}, Урон: {Damage}, Защита {_armor}");
- }
- public bool TakeDamage(int damage, ref int healthLoss)
- {
- healthLoss = damage - _armor;
- Health -= healthLoss;
- return Health > 0;
- }
- }
- class CannonFolder : Warrior
- {
- public CannonFolder() : base(100, 60, 20) { }
- }
- class Soldier : Warrior
- {
- public Soldier() : base(100, 80, 40) { }
- }
- class Lieutenant : Warrior
- {
- public Lieutenant() : base(100, 90, 30) { }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement