Advertisement
Torgach

Arena3.0

Apr 18th, 2021
907
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 13.18 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()
  12.         {
  13.             Arena arena = new Arena();
  14.             arena.Work();
  15.         }
  16.     }
  17.  
  18.     class Arena
  19.     {
  20.         private List<Fighter> _figthers = new List<Fighter>(1);
  21.         private List<Fighter> _survivors = new List<Fighter>();
  22.  
  23.         public void Work()
  24.         {
  25.             bool isRun = true;
  26.             while(isRun)
  27.             {
  28.                 ChooseFighters();
  29.  
  30.                 if(isRun)
  31.                     StartFight();
  32.             }
  33.         }
  34.  
  35.         private void ChooseFighters()
  36.         {
  37.             while (_figthers.Count != 2)
  38.             {
  39.                 Console.Write("[1] - выбрать готового бойца\n" +
  40.                     "[2] - выбрать выжившего бойца.\n");
  41.                 switch (Console.ReadLine())
  42.                 {
  43.                     case "1":
  44.                         ChooseRandomFighther();
  45.                         break;
  46.                     case "2":
  47.                         ChooseSurviour();
  48.                         break;
  49.                     default:
  50.                         Console.WriteLine("Неправильный ввод!");
  51.                         break;
  52.                 }
  53.             }
  54.         }
  55.  
  56.         private void ChooseRandomFighther()
  57.         {
  58.             Random rand = new Random();
  59.  
  60.             Console.WriteLine("Выберите бойца:\n" +
  61.                 "[1] - Варвар\n" +
  62.                 "[2] - Маг\n" +
  63.                 "[3] - Лучник\n" +
  64.                 "[4] - Рыцарь\n" +
  65.                 "[5] - Ассассин\n");
  66.             Console.Write("Ввод: ");
  67.             switch (Console.ReadLine())
  68.             {
  69.                 case "1":
  70.                     Warrior warrior = new Warrior(rand.Next(70, 100), rand.Next(20, 30), rand.Next(0, 10), "Берсерк");
  71.                     _figthers.Add(warrior);
  72.                     break;
  73.                 case "2":
  74.                     Mage mage = new Mage(rand.Next(50, 90), rand.Next(20, 40), rand.Next(5, 10), "Маг");
  75.                     _figthers.Add(mage);
  76.                     break;
  77.                 case "3":
  78.                     Archer archer = new Archer(rand.Next(40, 80), rand.Next(15, 30), rand.Next(0, 10), "Лучник");
  79.                     _figthers.Add(archer);
  80.                     break;
  81.                 case "4":
  82.                     ShieldMan shieldMan = new ShieldMan(rand.Next(30, 60), rand.Next(20, 35), rand.Next(10, 15), "Рыцарь");
  83.                     _figthers.Add(shieldMan);
  84.                     break;
  85.                 case "5":
  86.                     Assassin assassin = new Assassin(rand.Next(40, 70), rand.Next(25, 35), rand.Next(0, 6), "Ассассин");
  87.                     _figthers.Add(assassin);
  88.                     break;
  89.                 default:
  90.                     Console.WriteLine("Ошибка!");
  91.                     break;
  92.             }
  93.         }
  94.  
  95.         private void ChooseSurviour()
  96.         {
  97.             bool isChose = true;
  98.  
  99.             if(_survivors.Count == 0)
  100.             {
  101.                 Console.WriteLine("Нет выживших бойцов!");
  102.                 return;
  103.             }
  104.  
  105.             foreach (var survivor in _survivors)
  106.             {
  107.                 Console.WriteLine($"№{_survivors.Count}: {survivor.Name}; HP = {survivor.CurrentHealth }; DMG = {survivor.CurrentDamage}; ARM = {survivor.CurrentArmor}");
  108.             }
  109.  
  110.             Console.Write("Ввод: ");
  111.  
  112.             while (isChose)
  113.             {
  114.                 isChose = int.TryParse(Console.ReadLine(), out int number);
  115.                 if (isChose)
  116.                 {
  117.                     --number;
  118.  
  119.                     foreach (var figther in _figthers)
  120.                     {
  121.                         if(figther == _survivors[number])
  122.                         {
  123.                             Console.WriteLine("Этот выживший уже выбран!");
  124.                             return;
  125.                         }
  126.                     }
  127.                     _figthers.Add(_survivors[number]);
  128.                     isChose = false;
  129.                 }
  130.                 else if (isChose)
  131.                 {
  132.                     Console.WriteLine("Такого выжившего нет. Введите занового.");
  133.                 }
  134.             }
  135.         }
  136.  
  137.         private void StartFight()
  138.         {
  139.             Console.Clear();
  140.  
  141.             while (IsGameOver() == false)
  142.             {
  143.                 ShowFightersStats();
  144.                 Console.WriteLine("\n");
  145.  
  146.                 Hit(_figthers[0], _figthers[1]);
  147.                 Console.WriteLine();
  148.                 Hit(_figthers[1], _figthers[0]);
  149.  
  150.                 Console.ReadKey(true);
  151.                 Console.Clear();
  152.             }
  153.             ClearFightersList();
  154.         }
  155.  
  156.         private void Hit(Fighter attacker, Fighter defender)
  157.         {
  158.             Console.WriteLine($"{attacker.Name} наносит удар...");
  159.             attacker.Attack(defender);
  160.         }
  161.  
  162.         private void ShowFightersStats()
  163.         {
  164.             _figthers[0].ShowStats();
  165.             Console.WriteLine("=====================");
  166.             _figthers[1].ShowStats();
  167.         }
  168.  
  169.         private bool IsFighterDie(Fighter fighter, Fighter deadMan)
  170.         {
  171.             if (deadMan.IsAlive() == false)
  172.             {
  173.                 Console.WriteLine(deadMan.Name + " умер!");
  174.                
  175.                 fighter.RefreshStats();
  176.  
  177.                 foreach (var survivor in _survivors)
  178.                 {
  179.                     if (survivor == fighter)
  180.                     {
  181.                         Console.WriteLine(fighter.Name +" снова выжил!");
  182.                         return true;
  183.                     }
  184.                 }
  185.                 _survivors.Add(fighter);
  186.                 return true;
  187.             }
  188.             return false;
  189.         }
  190.  
  191.         private bool IsGameOver()
  192.         {
  193.             if(IsFighterDie(_figthers[1], _figthers[0]))
  194.             {
  195.                 return true;
  196.             }
  197.             else if (IsFighterDie(_figthers[0], _figthers[1]))
  198.             {
  199.                 return true;
  200.             }
  201.             else if (IsFighterDie(_figthers[1], _figthers[0]) && IsFighterDie(_figthers[0], _figthers[1]))
  202.             {
  203.                 Console.WriteLine("Оба бойца умерли!");
  204.                 return true;
  205.             }
  206.             return false;
  207.         }
  208.  
  209.         private void ClearFightersList()
  210.         {
  211.             Console.WriteLine("Освобождаем Арену...");
  212.             _figthers.Clear();
  213.         }
  214.     }
  215.  
  216.     abstract class Fighter
  217.     {
  218.         public bool IsAvoid { get; protected set; }
  219.         public bool IsPoisonAttack { get; protected set; }
  220.         public int ReloadAbillityCounter { get; protected set; }
  221.         public int CurrentHealth  { get; protected set; }
  222.         public int MaxHealth { get; protected set; }
  223.         public int CurrentDamage { get; protected set; }
  224.         public int MaxDamage { get; protected set; }
  225.         public int CurrentArmor { get; protected set; }
  226.         public int MaxArmor { get; protected set; }
  227.         public string Name { get; protected set; }
  228.  
  229.         public abstract void UseAbility(Fighter enemy);
  230.  
  231.         public void Attack(Fighter enemy)
  232.         {
  233.             if (IsAbilityReady())
  234.             {
  235.                 UseAbility(enemy);
  236.             }
  237.             else
  238.             {
  239.                 enemy.TakeDamage(CurrentDamage);
  240.             }
  241.         }
  242.  
  243.         public void TakeDamage(int damage)
  244.         {
  245.             if (IsAvoid)
  246.             {
  247.                 Console.WriteLine(Name + " увернулся!");
  248.                 IsAvoid = false;
  249.                 return;
  250.             }
  251.             else if (IsPoisonAttack)
  252.             {
  253.                 Console.WriteLine("Ядовитая атака проходит сквозь броню!");
  254.                 IsPoisonAttack = false;
  255.                 CurrentHealth  -= damage;
  256.                 return;
  257.             }
  258.  
  259.             CurrentHealth  -= damage - (CurrentArmor / 2);
  260.  
  261.             if (CurrentHealth  < 0)
  262.                 CurrentHealth  = 0;
  263.  
  264.             if (CurrentArmor > 0)
  265.             {
  266.                 CurrentArmor -= damage - (CurrentArmor / 10);
  267.                 if (CurrentArmor < 0)
  268.                 {
  269.                     CurrentArmor = 0;
  270.                     Console.WriteLine($"{Name} теряет броню!");
  271.                 }
  272.             }
  273.         }
  274.  
  275.         public bool IsAbilityReady()
  276.         {
  277.             if (ReloadAbillityCounter == 0)
  278.             {
  279.                 Console.WriteLine("Способность готова!");
  280.                 return true;
  281.             }
  282.             else if (ReloadAbillityCounter > 0)
  283.             {
  284.                 Console.WriteLine("Способность перезаряжается! Осталось: " + ReloadAbillityCounter--);
  285.             }
  286.             return false;
  287.         }
  288.  
  289.         public bool IsAlive()
  290.         {
  291.             return CurrentHealth  > 0;
  292.         }
  293.  
  294.         public virtual void ShowStats()
  295.         {
  296.             Console.WriteLine($"{Name}:HP = {CurrentHealth }; DMG = {CurrentDamage}; ARM = {CurrentArmor}");
  297.         }
  298.  
  299.         public void RefreshStats()
  300.         {
  301.             CurrentHealth = MaxHealth;
  302.             CurrentArmor = MaxArmor;
  303.             CurrentDamage = MaxDamage;
  304.         }        
  305.     }
  306.  
  307.     class Warrior : Fighter
  308.     {
  309.         public Warrior(int health, int damage, int armor, string name)
  310.         {
  311.             MaxHealth = health;
  312.             CurrentHealth  = health;
  313.  
  314.             MaxDamage = damage;
  315.             CurrentDamage = damage;
  316.  
  317.             MaxArmor = armor;
  318.             CurrentArmor = armor;
  319.  
  320.             Name = name;
  321.         }
  322.  
  323.         public override void UseAbility(Fighter enemy)
  324.         {
  325.             Console.WriteLine("Варвар использует Гриб-Берсерка!");
  326.             Random rand = new Random();
  327.  
  328.             CurrentHealth  += rand.Next(5, 26);
  329.             CurrentDamage += rand.Next(5, 11);
  330.             CurrentArmor -= rand.Next(5, 10);
  331.             if (CurrentArmor < 0)
  332.                 CurrentArmor = 0;
  333.  
  334.             ShowStats();
  335.  
  336.             ReloadAbillityCounter = 3;
  337.         }
  338.     }
  339.  
  340.     class Mage : Fighter
  341.     {
  342.         public Mage(int health, int damage, int armor, string name)
  343.         {
  344.             MaxHealth = health;
  345.             CurrentHealth = health;
  346.  
  347.             MaxDamage = damage;
  348.             CurrentDamage = damage;
  349.  
  350.             MaxArmor = armor;
  351.             CurrentArmor = armor;
  352.  
  353.             Name = name;
  354.         }
  355.  
  356.         public override void UseAbility(Fighter enemy)
  357.         {
  358.             Console.WriteLine("Маг кастует огненный шар!");
  359.             ReloadAbillityCounter = 5;
  360.  
  361.             Random rand = new Random();
  362.  
  363.             enemy.TakeDamage(rand.Next(20, 40));
  364.         }
  365.     }
  366.  
  367.     class Archer : Fighter
  368.     {
  369.         public Archer(int health, int damage, int armor, string name)
  370.         {
  371.             MaxHealth = health;
  372.             CurrentHealth = health;
  373.  
  374.             MaxDamage = damage;
  375.             CurrentDamage = damage;
  376.  
  377.             MaxArmor = armor;
  378.             CurrentArmor = armor;
  379.  
  380.             Name = name;
  381.         }
  382.  
  383.         public override void UseAbility(Fighter enemy)
  384.         {
  385.             Console.WriteLine("Лучник стреляет в ответ!");
  386.             ReloadAbillityCounter = 2;
  387.  
  388.             Random rand = new Random();
  389.             enemy.TakeDamage(rand.Next(20, 40));
  390.  
  391.             IsAvoid = true;
  392.         }
  393.     }
  394.  
  395.     class ShieldMan : Fighter
  396.     {
  397.         public ShieldMan(int health, int damage, int armor, string name)
  398.         {
  399.             MaxHealth = health;
  400.             CurrentHealth = health;
  401.  
  402.             MaxDamage = damage;
  403.             CurrentDamage = damage;
  404.  
  405.             MaxArmor = armor;
  406.             CurrentArmor = armor;
  407.  
  408.             Name = name;
  409.         }
  410.         public override void UseAbility(Fighter enemy)
  411.         {
  412.             Console.WriteLine("Рыцарь закрылся щитом!");
  413.             Random rand = new Random();
  414.  
  415.             CurrentArmor += rand.Next(10, 20);
  416.  
  417.             ShowStats();
  418.  
  419.             IsAvoid = true;
  420.             ReloadAbillityCounter = 2;
  421.         }
  422.     }
  423.  
  424.     class Assassin : Fighter
  425.     {
  426.         public Assassin(int health, int damage, int armor, string name)
  427.         {
  428.             MaxHealth = health;
  429.             CurrentHealth = health;
  430.  
  431.             MaxDamage = damage;
  432.             CurrentDamage = damage;
  433.  
  434.             MaxArmor = armor;
  435.             CurrentArmor = armor;
  436.  
  437.             Name = name;
  438.         }
  439.         public override void UseAbility(Fighter enemy)
  440.         {
  441.             Console.WriteLine("Ассассин бросает ядовитые кинжалы!");
  442.             Random rand = new Random();
  443.  
  444.             ReloadAbillityCounter = 1;
  445.  
  446.             enemy.TakeDamage(rand.Next(20, 30));
  447.         }
  448.     }
  449. }
  450.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement