Advertisement
Torgach

Arena2.0

Apr 12th, 2021
676
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 14.20 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<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.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement