Torgach

Arena2.0

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

×