Advertisement
Torgach

Arena

Apr 10th, 2021
687
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.89 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 gladiatorialFight
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             Arena arena = new Arena();
  14.             arena.Work();
  15.         }
  16.     }
  17.  
  18.     class Arena
  19.     {
  20.         private List<Figther> _figthers = new List<Figther>(1);
  21.         private List<Figther> _survivors = new List<Figther>();
  22.  
  23.         public void Work()
  24.         {
  25.             bool isWork = true;
  26.             while(isWork)
  27.             {
  28.                 Console.WriteLine("Выберите бойца:\n" +
  29.                     "[1] - Варвар\n" +
  30.                     "[2] - Маг\n" +
  31.                     "[3] - Лучник\n" +
  32.                     "[4] - Рыцарь\n" +
  33.                     "[5] - Ассассин\n" +
  34.                     "[6] - Выход\n");
  35.  
  36.                 ChooseFighther();
  37.             }
  38.             StartBattle();
  39.         }
  40.  
  41.         public void ChooseFighther(bool isRun = true)
  42.         {
  43.             Random rand = new Random();
  44.  
  45.             while (_figthers.Count != 2 && isRun)
  46.             {
  47.                 Console.Write("Ввод: ");
  48.                 switch (Console.ReadLine())
  49.                 {
  50.                     case "1":
  51.                         Warrior warrior = new Warrior(rand.Next(70, 100), rand.Next(10, 30), rand.Next(0, 15), "Берсерк");
  52.                         _figthers.Add(warrior);
  53.                         break;
  54.                     case "2":
  55.                         Mage mage = new Mage(rand.Next(50, 100), rand.Next(15, 40), rand.Next(5, 15), "Маг");
  56.                         _figthers.Add(mage);
  57.                         break;
  58.                     case "3":
  59.                         Archer archer = new Archer(rand.Next(40, 80), rand.Next(15, 30), rand.Next(0,10), "Лучник");
  60.                         _figthers.Add(archer);
  61.                         break;
  62.                     case "4":
  63.                         ShieldMan shieldMan = new ShieldMan(rand.Next(30, 60), rand.Next(20, 30), rand.Next(10, 15), "Рыцарь");
  64.                         _figthers.Add(shieldMan);
  65.                         break;
  66.                     case "5":
  67.                         Assassin assassin = new Assassin(rand.Next(40, 70), rand.Next(25, 35), rand.Next(5, 10), "Ассассин");
  68.                         _figthers.Add(assassin);
  69.                         break;
  70.                     case "6":
  71.                         isRun = false;
  72.                         break;
  73.                     default:
  74.                         Console.WriteLine("Ошибка!");
  75.                         break;
  76.                 }
  77.             }
  78.         }
  79.  
  80.         public void StartBattle()
  81.         {
  82.             Console.Clear();
  83.  
  84.             _figthers[0].ShowStats();
  85.             Console.WriteLine("=====================");
  86.             _figthers[1].ShowStats();
  87.  
  88.             while (_figthers[0].IsDead() && _figthers[1].IsDead())
  89.             {
  90.                 Console.WriteLine("1 боец наносит удар...");
  91.  
  92.                 if (_figthers[0].IsAbilityReady())
  93.                     _figthers[0].UseAbility(ref _figthers.ElementAt(1));
  94.                 _figthers[1].TakeDamage(_figthers[0].Damage);
  95.  
  96.                 Console.WriteLine();
  97.  
  98.                 Console.WriteLine("2 боец наносит удар...");
  99.  
  100.                 if(_figthers[2].IsAbilityReady())
  101.                     _figthers[2].UseAbility();
  102.                 _figthers[1].TakeDamage(_figthers[1].Damage);
  103.  
  104.                 _figthers[0].ShowStats();
  105.                 Console.WriteLine("=====================");
  106.                 _figthers[1].ShowStats();
  107.  
  108.                 Console.WriteLine("\n");
  109.  
  110.                 Console.ReadKey(true);
  111.                 Console.Clear();
  112.             }
  113.  
  114.             if (_figthers[0].IsDead())
  115.             {
  116.                 Console.WriteLine("1 боец умер!");
  117.                 _survivors.Add(_figthers[0]);
  118.             }
  119.             else if (_figthers[1].IsDead())
  120.             {
  121.                 Console.WriteLine("2 боец умер!");
  122.                 _survivors.Add(_figthers[1]);
  123.             }
  124.             else if (_figthers[0].IsDead() && _figthers[1].IsDead())
  125.             {
  126.                 Console.WriteLine("Оба бойца умерли!");
  127.             }
  128.         }
  129.     }
  130.  
  131.     abstract class Figther
  132.     {
  133.         public bool IsAvoid { get; protected set; }
  134.         public bool IsPoisonAttack { get; protected set; }
  135.         public int ReloadAbillityCounter { get; protected set; }
  136.         public int Health { get; protected set; }
  137.         public int Damage { get; protected set; }
  138.         public int Armor { get; protected set; }
  139.         public string Name { get; protected set; }
  140.  
  141.         public abstract void UseAbility(ref Figther enemy);
  142.  
  143.         public void TakeDamage(int damage)
  144.         {
  145.             if (IsAvoid)
  146.             {
  147.                 Console.WriteLine("Противник увернулся!");
  148.                 IsAvoid = false;
  149.                 return;
  150.             }
  151.             else if(IsPoisonAttack)
  152.             {
  153.                 Console.WriteLine("Ядовитая атака проходит сквозь броню!");
  154.                 IsPoisonAttack = false;
  155.                 Health -= damage;
  156.                 return;
  157.             }
  158.  
  159.             Health -= damage - (Armor / 2);
  160.  
  161.             if (Health < 0)
  162.                 Health = 0;
  163.  
  164.             Armor -= damage - (Armor / 10);
  165.  
  166.             if (Armor < 0)
  167.             {
  168.                 Armor = 0;
  169.                 Console.WriteLine("Броня рассыпалась!");
  170.             }
  171.         }
  172.  
  173.         public bool IsDead()
  174.         {
  175.             return Health > 0;
  176.         }
  177.  
  178.         public virtual bool IsAbilityReady()
  179.         {
  180.             if (ReloadAbillityCounter == 0)
  181.             {
  182.                 Console.WriteLine("Способность готова!");
  183.                 return true;
  184.             }
  185.             else if (ReloadAbillityCounter > 0)
  186.             {
  187.                 Console.WriteLine("Способность перезаряжается! Осталось: " + ReloadAbillityCounter--);
  188.             }
  189.             return false;
  190.         }
  191.  
  192.         public virtual void ShowStats()
  193.         {
  194.             Console.WriteLine($"{Name}:HP = {Health}; DMG = {Damage}; ARM = {Armor}");
  195.         }
  196.     }
  197.  
  198.     class Warrior : Figther
  199.     {
  200.         public Warrior(int health, int damage, int armor, string name)
  201.         {
  202.             Health = health;
  203.             Damage = damage;
  204.             Armor = armor;
  205.             Name = name;
  206.         }
  207.  
  208.         public override void UseAbility(ref Figther enemy)
  209.         {
  210.             Console.WriteLine("Варвар использует Гриб-Берсерка!");
  211.             Random rand = new Random();
  212.  
  213.             Health += rand.Next(5, 26);
  214.             Damage += rand.Next(5, 11);
  215.             Armor -= rand.Next(5, 10);
  216.             if (Armor < 0)
  217.                 Armor = 0;
  218.  
  219.             ReloadAbillityCounter = 3;
  220.         }
  221.  
  222.         public override bool IsAbilityReady()
  223.         {
  224.             return base.IsAbilityReady();
  225.         }
  226.     }
  227.  
  228.     class Mage : Figther
  229.     {
  230.         public Mage(int health, int damage, int armor, string name)
  231.         {
  232.             Health = health;
  233.             Damage = damage;
  234.             Armor = armor;
  235.             Name = name;
  236.         }
  237.  
  238.         public override void UseAbility(ref Figther enemy)
  239.         {
  240.             Console.WriteLine("Маг кастует огненный шар!");
  241.             ReloadAbillityCounter = 5;
  242.  
  243.             Random rand = new Random();
  244.  
  245.             enemy.TakeDamage(rand.Next(20, 40));
  246.         }
  247.  
  248.         public override bool IsAbilityReady()
  249.         {
  250.             return base.IsAbilityReady();
  251.         }
  252.     }
  253.  
  254.     class Archer : Figther
  255.     {
  256.         public Archer(int health, int damage, int armor, string name)
  257.         {
  258.             Health = health;
  259.             Damage = damage;
  260.             Armor = armor;
  261.             Name = name;
  262.         }
  263.  
  264.         public override void UseAbility(ref Figther enemy)
  265.         {
  266.             Console.WriteLine("Лучник уворачивается от удара и стреляет в ответ!");
  267.             ReloadAbillityCounter = 3;
  268.  
  269.             Random rand = new Random();
  270.             enemy.TakeDamage(rand.Next(20, 40));
  271.  
  272.             IsAvoid = true;
  273.         }
  274.  
  275.         public override bool IsAbilityReady()
  276.         {
  277.             return base.IsAbilityReady();
  278.         }
  279.     }
  280.  
  281.     class ShieldMan : Figther
  282.     {
  283.         public ShieldMan(int health, int damage, int armor, string name)
  284.         {
  285.             Health = health;
  286.             Damage = damage;
  287.             Armor = armor;
  288.             Name = name;
  289.         }
  290.         public override void UseAbility(ref Figther enemy)
  291.         {
  292.             Console.WriteLine("Рыцарь закрылся щитом!");
  293.             Random rand = new Random();
  294.  
  295.             Armor += rand.Next(10, 20);
  296.  
  297.             IsAvoid = true;
  298.             ReloadAbillityCounter = 2;
  299.         }
  300.  
  301.         public override bool IsAbilityReady()
  302.         {
  303.             return base.IsAbilityReady();
  304.         }
  305.     }
  306.  
  307.     class Assassin : Figther
  308.     {
  309.         public Assassin(int health, int damage, int armor, string name)
  310.         {
  311.             Health = health;
  312.             Damage = damage;
  313.             Armor = armor;
  314.             Name = name;
  315.         }
  316.         public override void UseAbility(ref Figther enemy)
  317.         {
  318.             Console.WriteLine("Ассассин бросает ядовитые кинжалы!");
  319.             Random rand = new Random();
  320.  
  321.             ReloadAbillityCounter = 1;
  322.  
  323.             enemy.TakeDamage(rand.Next(20, 30));
  324.         }
  325.  
  326.         public override bool IsAbilityReady()
  327.         {
  328.             return base.IsAbilityReady();
  329.         }
  330.     }
  331. }
  332.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement