Torgach

Arena3.0

Apr 18th, 2021
756
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.  
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×