Advertisement
GPbl3YH

CSLight #33

Feb 6th, 2021 (edited)
575
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.37 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace CSLight
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             War war = new War();
  14.  
  15.             war.PrepareForBattle();
  16.             war.Battle();
  17.         }
  18.     }
  19.  
  20.     class War
  21.     {
  22.         private List<Warrior> _warriorsForLeftCorner = new List<Warrior> {
  23.                                                             new Barbarian("Goah", 80, 15, 5, 1),
  24.                                                             new Knight("Artur", 100, 25, 8, 2),
  25.                                                             new Engineer("Gnom", 75, 80, 5, 3),
  26.                                                             new Kamikaze("Ji", 50, 0, 9, 3),
  27.                                                             new Viking("Torin", 110, 10, 6, 1.2f)
  28.                                                            };
  29.  
  30.         private List<Warrior> _warriorsForRightCorner = new List<Warrior> {
  31.                                                             new Barbarian("Goah", 80, 15, 5, 1),
  32.                                                             new Knight("Artur", 100, 25, 8, 2),
  33.                                                             new Engineer("Gnom", 75, 80, 5, 3),
  34.                                                             new Kamikaze("Ji", 50, 0, 9, 3),
  35.                                                             new Viking("Torin", 110, 10, 6, 1.2f)
  36.                                                            };
  37.  
  38.         private List<Warrior> _gladiators = new List<Warrior>();
  39.  
  40.         private void ChooseWarrior(ref int numberOfTeam)
  41.         {
  42.             int warriorChoice;
  43.             string input;
  44.             string numberOfChoice = "";
  45.  
  46.             if (numberOfTeam == 1)
  47.                 numberOfChoice = "первого";
  48.             else if (numberOfTeam == 2)
  49.                 numberOfChoice = "второго";
  50.  
  51.             Console.WriteLine($"Выберите {numberOfChoice} бойца:\n1) Варвар\n2) Рыцарь\n3) Инженер\n4) Камикадзе\n5) Викинг\n");
  52.  
  53.             input = Console.ReadLine();
  54.  
  55.             if (int.TryParse(input, out warriorChoice) && warriorChoice > 0 && warriorChoice < 6)
  56.             {
  57.                 if (numberOfTeam == 1)
  58.                 {
  59.                     var person1 = _warriorsForLeftCorner[warriorChoice - 1];
  60.                     _gladiators.Add(person1);
  61.                 }
  62.                 else if (numberOfTeam == 2)
  63.                 {
  64.                     var person2 = _warriorsForRightCorner[warriorChoice - 1];
  65.                     _gladiators.Add(person2);
  66.                 }
  67.  
  68.                 numberOfTeam += 1;
  69.             }
  70.             else
  71.             {
  72.                 Console.WriteLine("\n\nПовторите ввод:\n\n");
  73.             }
  74.         }
  75.  
  76.         public void PrepareForBattle()
  77.         {
  78.             int currentChoice = 1;
  79.             bool isBattlePreparing = true;
  80.  
  81.             while (isBattlePreparing)
  82.             {
  83.                 if (currentChoice == 1 || currentChoice == 2)
  84.                 {
  85.                     ChooseWarrior(ref currentChoice);
  86.                 }
  87.                 else if (currentChoice == 3)
  88.                 {
  89.                     isBattlePreparing = false;
  90.                 }
  91.                 else
  92.                 {
  93.                     continue;
  94.                 }
  95.             }
  96.         }
  97.  
  98.         public void Battle()
  99.         {
  100.             if (_gladiators.Count == 2)
  101.             {
  102.                 var person1 = _gladiators[0];
  103.                 var person2 = _gladiators[1];
  104.  
  105.                 while (person1.HealthPoints > 0 && person2.HealthPoints > 0)
  106.                 {
  107.                     person1.TakeDamage(person2.Damage);
  108.                     person2.TakeDamage(person1.Damage);
  109.                     Console.WriteLine((int)person1.HealthPoints + " " + (int)person2.HealthPoints);
  110.                 }
  111.  
  112.                 if (person1.HealthPoints <= 0)
  113.                 {
  114.                     Console.WriteLine($"Победил - {person2.Name}");
  115.                 }
  116.                 else
  117.                 {
  118.                     Console.WriteLine($"Победил - {person1.Name}");
  119.                 }
  120.  
  121.                 Console.ReadKey();
  122.             }
  123.             else
  124.             {
  125.                 Console.WriteLine("Сражение невозможно. Гладиаторы не выбраны. Вызовите метод .Start");
  126.                 Console.ReadKey();
  127.             }
  128.         }
  129.     }
  130.  
  131.     class Warrior
  132.     {
  133.         private float _decreaseDamage;
  134.         private float _decreaseArmor;
  135.  
  136.         protected static Random Random = new Random();
  137.  
  138.         public string Name { get; private set; }
  139.         public float HealthPoints { get; protected set; }
  140.         public float Armor { get; protected set; }
  141.         public float Damage { get; protected set; }
  142.  
  143.         public Warrior(string name, float healthPoints, float armor, float damage)
  144.         {
  145.             Name = name;
  146.             HealthPoints = healthPoints;
  147.             Armor = armor;
  148.             Damage = damage;
  149.             _decreaseDamage = damage / 2;
  150.             _decreaseArmor = armor / 3;
  151.         }
  152.  
  153.         public virtual void TakeDamage(float damage)
  154.         {
  155.             if (damage > Armor)
  156.             {
  157.                 if (Armor > 0)
  158.                 {
  159.                     Armor -= _decreaseArmor;
  160.                     HealthPoints -= damage - Armor;
  161.                 }
  162.                 else
  163.                 {
  164.                     HealthPoints -= damage;
  165.                 }
  166.             }
  167.             else
  168.             {
  169.                 Armor -= damage;
  170.                 HealthPoints -= _decreaseDamage;
  171.             }
  172.         }
  173.     }
  174.  
  175.     class Barbarian : Warrior
  176.     {
  177.         private float _attackMagnifier;
  178.  
  179.         public Barbarian(string name, float healthPoints, float armor, float damage, float attackMagnifier) : base(name, healthPoints, armor, damage)
  180.         {
  181.             _attackMagnifier = attackMagnifier;
  182.         }
  183.  
  184.         public override void TakeDamage(float damage)
  185.         {
  186.             base.TakeDamage(damage);
  187.             ChangeDamage();
  188.         }
  189.  
  190.         private void ChangeDamage()
  191.         {
  192.             Damage += _attackMagnifier;
  193.         }
  194.     }
  195.  
  196.     class Knight : Warrior
  197.     {
  198.         private float _cureSpeed;
  199.  
  200.         public Knight(string name, float healthPoints, float armor, float damage, float cureSpeed) : base(name, healthPoints, armor, damage)
  201.         {
  202.             _cureSpeed = cureSpeed;
  203.         }
  204.  
  205.         public override void TakeDamage(float damage)
  206.         {
  207.             base.TakeDamage(damage);
  208.             HealthPoints += _cureSpeed;
  209.         }
  210.     }
  211.  
  212.     class Engineer : Warrior
  213.     {
  214.         private float _repairSpeed;
  215.  
  216.         public Engineer(string name, float healthPoints, float armor, float damage, float repairSpeed) : base(name, healthPoints, armor, damage)
  217.         {
  218.             _repairSpeed = repairSpeed;
  219.         }
  220.  
  221.         public override void TakeDamage(float damage)
  222.         {
  223.             base.TakeDamage(damage);
  224.             Armor += _repairSpeed;
  225.         }
  226.     }
  227.  
  228.     class Kamikaze : Warrior
  229.     {
  230.         private float _damageMultiplier;
  231.  
  232.         public Kamikaze(string name, float healthPoints, float armor, float damage, float damageMultiplier) : base(name, healthPoints, armor, damage)
  233.         {
  234.             Armor = 0;
  235.             _damageMultiplier = damageMultiplier;
  236.         }
  237.  
  238.         public override void TakeDamage(float damage)
  239.         {
  240.             ChangeDamage();
  241.             base.TakeDamage(damage);
  242.         }
  243.  
  244.         private void ChangeDamage()
  245.         {
  246.             int probability = Random.Next(0, 3);
  247.             if (probability == 2)
  248.             {
  249.                 Damage *= 3;
  250.             }
  251.         }
  252.     }
  253.  
  254.     class Viking : Warrior
  255.     {
  256.         private float _attackSpeed;
  257.  
  258.         public Viking(string name, float healthPoints, float armor, float damage, float attackSpeed) : base(name, healthPoints, armor, damage)
  259.         {
  260.             Armor = 0;
  261.             _attackSpeed = attackSpeed;
  262.         }
  263.  
  264.         public override void TakeDamage(float damage)
  265.         {
  266.             base.TakeDamage(damage);
  267.             Damage *= _attackSpeed;
  268.         }
  269.     }
  270. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement