Advertisement
VodVas

Гладиаторские_бои

Nov 22nd, 2023 (edited)
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 15.95 KB | Software | 0 0
  1. using System;
  2. using System.Threading.Channels;
  3. using static System.Net.Mime.MediaTypeNames;
  4.  
  5. namespace Гладиаторские_бои
  6. {
  7.     internal class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             Arena arena = new();
  12.  
  13.             arena.Battle();
  14.         }
  15.     }
  16.  
  17.     abstract class Fighter
  18.     {
  19.         private Random _random = new Random();
  20.  
  21.         public Fighter(int id, int health, string name, int damage, int armor)
  22.         {
  23.             Id = id;
  24.             Health = health;
  25.             Name = name;
  26.             Damage = damage;
  27.             Armor = armor;
  28.         }
  29.  
  30.         public int Id { get; protected set; }
  31.         public string Name { get; protected set; }
  32.         public int Health { get; protected set; }
  33.         public int Damage { get; protected set; }
  34.         public int Armor { get; protected set; }
  35.  
  36.         public virtual void ShowStats()
  37.         {
  38.             Console.WriteLine($"<{Id}> {Name}: \n HitPoint: {Health}  Damage: {Damage}  Armor: {Armor}");
  39.         }
  40.  
  41.         public void Attack(Fighter fighter)
  42.         {
  43.             UseSpecialAttack(fighter);
  44.         }
  45.  
  46.         private void UseSpecialAttack(Fighter fighter)
  47.         {
  48.  
  49.             int switchSkill = Utility.GenerateRandomNumber(0, 3);
  50.  
  51.             if (switchSkill == 0)
  52.             {
  53.                 UseSkill1();
  54.             }
  55.             else if (switchSkill == 1)
  56.             {
  57.                 UseSkill2();
  58.             }
  59.             else
  60.             {
  61.                 TakeDamage(fighter.Damage);
  62.             }
  63.         }
  64.  
  65.         protected abstract void UseSkill1();
  66.  
  67.         protected abstract void UseSkill2();
  68.  
  69.         protected virtual void TakeDamage(int damage)
  70.         {
  71.             Console.ForegroundColor = ConsoleColor.Red;
  72.             Console.WriteLine($"\nНеудача! {Name} получает {damage - Armor} урона");
  73.             Console.ForegroundColor = ConsoleColor.White;
  74.  
  75.             Health -= (damage - Armor);
  76.         }
  77.     }
  78.  
  79.     class CyborgEngineer : Fighter
  80.     {
  81.         private int _energy;
  82.         private int _damageBuff = 5;
  83.         private int _healthBuff = 10;
  84.         private int _energyDecrease = 25;
  85.         private int _maxEnergyLimit = 76;
  86.         private int _minEnergyLimit = 0;
  87.  
  88.         public CyborgEngineer(int id, int health, string name, int energy, int damage, int armor) : base(id, health, name, damage, armor)
  89.         {
  90.             _energy = energy;
  91.         }
  92.  
  93.         protected override void UseSkill1()
  94.         {
  95.             Console.WriteLine($"\n{Name} использует паровые ускорители, Damage +{_damageBuff}");
  96.  
  97.             Damage += _damageBuff;
  98.         }
  99.  
  100.         protected override void UseSkill2()
  101.         {
  102.             Console.WriteLine($"\n{Name} использует реконструкция: Health +{_healthBuff}, Energy -{_energyDecrease}");
  103.  
  104.             if (_energy > _minEnergyLimit && _energy < _maxEnergyLimit)
  105.             {
  106.                 Health += _healthBuff;
  107.                 _energy -= _energyDecrease;
  108.             }
  109.             else
  110.             {
  111.                 Console.WriteLine("\nНехватка энергии");
  112.             }
  113.         }
  114.  
  115.         public override void ShowStats()
  116.         {
  117.             Console.WriteLine($"<{Id}> {Name}: \n HitPoint: {Health}  Damage: {Damage}  Armor: {Armor} Energy: {_energy}");
  118.         }
  119.     }
  120.  
  121.     class ElectromagneticMage : Fighter
  122.     {
  123.         private Random _random = new Random();
  124.  
  125.         private int _mana;
  126.         private int _armorBuff = 1;
  127.         private int _manaDecrease = 10;
  128.         private int _healthBuff = 10;
  129.         private int _criticalChanceLimit = 20;
  130.         private int _manaLimit = 41;
  131.         private int _manaCheckLimit = 0;
  132.         private int _criticalChanceMin = 0;
  133.         private int _criticalChanceMax = 100;
  134.  
  135.         public ElectromagneticMage(int id, int health, string name, int mana, int damage, int armor) : base(id, health, name, damage, armor)
  136.         {
  137.             _mana = mana;
  138.         }
  139.  
  140.         protected override void UseSkill1()
  141.         {
  142.             Console.WriteLine($"\n{Name} использует магнитное поле: Armor +{_armorBuff}, Mana -{_manaDecrease}");
  143.  
  144.             if (_mana > _manaCheckLimit && _mana < _manaLimit)
  145.             {
  146.                 Armor += _armorBuff;
  147.                 _mana -= _manaDecrease;
  148.             }
  149.             else
  150.             {
  151.                 Console.WriteLine("\nНехватка маны");
  152.             }
  153.         }
  154.  
  155.         protected override void UseSkill2()
  156.         {
  157.             Console.Write($"\n{Name} использует электрический щит: ");
  158.  
  159.             int CriticalChance = _random.Next(_criticalChanceMin, _criticalChanceMax);
  160.  
  161.             if (CriticalChance < _criticalChanceLimit && _mana > _manaCheckLimit && _mana < _manaLimit)
  162.             {
  163.                 Console.WriteLine($"...сработал крит шанс! Health +{_healthBuff}, Armor + {_armorBuff}, Mana -{_manaDecrease}");
  164.                 Armor += _armorBuff;
  165.                 Health += _healthBuff;
  166.                 _mana -= _manaDecrease;
  167.             }
  168.             else if (_mana > _manaCheckLimit && _mana < _manaLimit)
  169.             {
  170.                 Console.WriteLine($"Health +{_healthBuff}, Mana -{_manaDecrease}");
  171.                 Health += _healthBuff;
  172.                 _mana -= _manaDecrease;
  173.             }
  174.             else
  175.             {
  176.                 Console.WriteLine("Нехватка маны");
  177.             }
  178.         }
  179.  
  180.         public override void ShowStats()
  181.         {
  182.             Console.WriteLine($"<{Id}> {Name}: \n HitPoint: {Health}  Damage: {Damage}  Armor: {Armor} Mana: {_mana}");
  183.         }
  184.     }
  185.  
  186.     class SteamNinja : Fighter
  187.     {
  188.         private int _damageBuff = 10;
  189.         private int _healthDecrease = 10;
  190.         private int _healthLimit = 40;
  191.  
  192.         public SteamNinja(int id, int health, string name, int damage, int armor) : base(id, health, name, damage, armor) { }
  193.  
  194.         protected override void UseSkill1()
  195.         {
  196.             Console.WriteLine($"\n{Name} использует заточка катаны: Damage +{_damageBuff}");
  197.  
  198.             Damage += _damageBuff;
  199.         }
  200.  
  201.         protected override void UseSkill2()
  202.         {
  203.             if (Health >= _healthLimit)
  204.             {
  205.                 Console.WriteLine($"\n{Name} использует харакири: Health -{_healthDecrease}, Damage +{_damageBuff}");
  206.  
  207.                 Health -= _healthDecrease;
  208.                 Damage += _damageBuff;
  209.             }
  210.             else
  211.             {
  212.                 UseSkill1();
  213.             }
  214.         }
  215.  
  216.         protected override void TakeDamage(int damage)
  217.         {
  218.             Random random = new Random();
  219.  
  220.             int tryUseAbility = Utility.GenerateRandomNumber(0, 2);
  221.  
  222.             if (tryUseAbility == 0)
  223.             {
  224.                 Console.WriteLine($"\n{Name} скрывается в паровом облаке и избегает урона");
  225.             }
  226.             else
  227.             {
  228.                 base.TakeDamage(damage);
  229.             }
  230.         }
  231.     }
  232.  
  233.     class MechanicalAlchemist : Fighter
  234.     {
  235.         private int _healthBuff = 10;
  236.         private int _armorBuff = 1;
  237.  
  238.         public MechanicalAlchemist(int id, int health, string name, int damage, int armor) : base(id, health, name, damage, armor)
  239.         {
  240.         }
  241.  
  242.         protected override void UseSkill1()
  243.         {
  244.             Console.WriteLine($"\n{Name} использует эликсир здоровья: Health +{_healthBuff}");
  245.  
  246.             Health += _healthBuff;
  247.         }
  248.  
  249.         protected override void UseSkill2()
  250.         {
  251.             Console.WriteLine($"\n{Name} использует эликсир брони: Armor +{_armorBuff}");
  252.  
  253.             Armor += _armorBuff;
  254.         }
  255.  
  256.         public override void ShowStats()
  257.         {
  258.             Console.WriteLine($"<{Id}> {Name}: \n HitPoint: {Health}  Damage: {Damage}  Armor: {Armor}");
  259.         }
  260.     }
  261.  
  262.     class HydraulicConjurer : Fighter
  263.     {
  264.         private Random _random = new Random();
  265.  
  266.         private int _armorBuff = 1;
  267.  
  268.         public HydraulicConjurer(int id, int health, string name, int damage, int armor) : base(id, health, name, damage, armor) { }
  269.  
  270.         protected override void UseSkill1()
  271.         {
  272.             Console.WriteLine($"\n{Name} укрепляет гидравлическую броню Armor +{_armorBuff}");
  273.  
  274.             Armor += _armorBuff;
  275.         }
  276.  
  277.         protected override void UseSkill2()
  278.         {
  279.             UseSkill1();
  280.             UseSkill1();
  281.         }
  282.  
  283.         protected override void TakeDamage(int damage)
  284.         {
  285.             int armorModifier = 2;
  286.             int tryCreateIllusion = Utility.GenerateRandomNumber(0, 2);
  287.  
  288.             if (tryCreateIllusion == 0)
  289.             {
  290.                 Console.WriteLine($"\n{Name} создает иллюзию и получает только половину урона");
  291.  
  292.                 Health -= damage / armorModifier;
  293.  
  294.                 Console.WriteLine($"\n{Name} получает {damage / armorModifier} урона");
  295.             }
  296.             else
  297.             {
  298.                 base.TakeDamage(damage);
  299.             }
  300.         }
  301.  
  302.         public override void ShowStats()
  303.         {
  304.             Console.WriteLine($"<{Id}> {Name}: \n HitPoint: {Health}  Damage: {Damage}  Armor: {Armor}");
  305.         }
  306.     }
  307.  
  308.     class Arena
  309.     {
  310.         private Fighter _fighter1;
  311.         private Fighter _fighter2;
  312.  
  313.         private List<Fighter> _fighters = new List<Fighter>();
  314.  
  315.         public Arena()
  316.         {
  317.             FillFightersList();
  318.         }
  319.  
  320.         public void Battle()
  321.         {
  322.             ShowAllFightersStats();
  323.  
  324.             TryCreateFighters();
  325.  
  326.             Fight();
  327.             ShowResult();
  328.  
  329.         }
  330.  
  331.         private void FillFightersList()
  332.         {
  333.             _fighters.Add(new CyborgEngineer(1, 100, "CyborgEngineer", 75, 15, 10));
  334.             _fighters.Add(new SteamNinja(2, 120, "SteamNinja", 20, 5));
  335.             _fighters.Add(new ElectromagneticMage(3, 100, "ElectromagneticMage", 40, 25, 10));
  336.             _fighters.Add(new MechanicalAlchemist(4, 100, "MechanicalAlchemist", 5, 20));
  337.             _fighters.Add(new HydraulicConjurer(5, 100, "HydraulicConjurer", 15, 10));
  338.         }
  339.  
  340.         private void TryCreateFighters()
  341.         {
  342.             Console.WriteLine("\nБоец 1");
  343.  
  344.             _fighter1 = ChooseFighter();
  345.  
  346.             Console.WriteLine("\nБоец 2");
  347.  
  348.             _fighter2 = ChooseFighter();
  349.  
  350.             if (_fighter1 == null || _fighter2 == null)
  351.             {
  352.                 Console.ForegroundColor = ConsoleColor.Red;
  353.                 Console.WriteLine("Ошибка выбора бойцов");
  354.                 Console.ForegroundColor = ConsoleColor.White;
  355.  
  356.                 _fighters.Clear();
  357.  
  358.                 FillFightersList();
  359.                 TryCreateFighters();
  360.             }
  361.         }
  362.  
  363.         private void Fight()
  364.         {
  365.             int turnNumber = 1;
  366.  
  367.             while (_fighter1.Health > 0 && _fighter2.Health > 0)
  368.             {
  369.                 Console.ForegroundColor = ConsoleColor.DarkYellow;
  370.                 Console.WriteLine($"\nХод номер {turnNumber++}");
  371.                 Console.ForegroundColor = ConsoleColor.White;
  372.  
  373.                 _fighter1.ShowStats();
  374.                 _fighter2.ShowStats();
  375.  
  376.                 if (_fighter1.Health > 0)
  377.                 {
  378.                     _fighter1.Attack(_fighter2);
  379.                 }
  380.  
  381.                 if (_fighter2.Health > 0)
  382.                 {
  383.                     _fighter2.Attack(_fighter1);
  384.                 }
  385.  
  386.                 Thread.Sleep(500);
  387.             }
  388.         }
  389.  
  390.         private void ShowAllFightersStats()
  391.         {
  392.             Console.WriteLine("\nВ мире, где технологии паровых машин и механических устройств слились с боевыми искусствами\n" +
  393.                 "проходит турнир, собравший лучших бойцов со всего мира. Пять уникальных персонажей решили\n" +
  394.                 "принять участие и доказать свое превосходство\n");
  395.             Console.WriteLine("Паровой Киборг-инженер - обладает способность к самовосстановлению, использует паровые ускорители\n\n" +
  396.                 "Электромагнетический Маг - способен манипулировать электричеством и магнитными полями\n\n" +
  397.                 "Ниндзя-ассасин - скрывается в паровых облаках. Слабо защищен, но имеет большой урон, который может разгонять\n\n" +
  398.                 "Механический алхимик - способен создавать элексиры для усиления\n\n" +
  399.                 "Гидравлический фокусник - может создавать иллюзии, носит гидравлическую броню.\n\n");
  400.  
  401.             for (int i = 0; i < _fighters.Count; i++)
  402.             {
  403.                 Console.ForegroundColor = ConsoleColor.DarkYellow;
  404.                 _fighters[i].ShowStats();
  405.                 Console.ForegroundColor = ConsoleColor.White;
  406.             }
  407.         }
  408.  
  409.         private void ShowResult()
  410.         {
  411.             if (_fighter1.Health < 0 && _fighter2.Health < 0)
  412.             {
  413.                 Console.ForegroundColor = ConsoleColor.DarkGreen;
  414.                 Console.WriteLine("\nНичья");
  415.                 Console.ForegroundColor = ConsoleColor.White;
  416.             }
  417.             else if (_fighter2.Health <= 0)
  418.             {
  419.                 Console.ForegroundColor = ConsoleColor.DarkGreen;
  420.                 Console.WriteLine($"\n{_fighter1.Name} Победил");
  421.                 Console.ForegroundColor = ConsoleColor.White;
  422.             }
  423.             else
  424.             {
  425.                 Console.ForegroundColor = ConsoleColor.DarkGreen;
  426.                 Console.WriteLine($"\n{_fighter2.Name} Победил");
  427.                 Console.ForegroundColor = ConsoleColor.White;
  428.             }
  429.         }
  430.  
  431.         private Fighter ChooseFighter()
  432.         {
  433.             Fighter selectFighter = null;
  434.  
  435.             Console.ForegroundColor = ConsoleColor.DarkGreen;
  436.             Console.WriteLine("Выбери героя по ID:");
  437.             Console.ForegroundColor = ConsoleColor.White;
  438.  
  439.             while (selectFighter == null)
  440.             {
  441.                 int userInput = Utility.ReturnInputNumber();
  442.  
  443.                 foreach (var fighter in _fighters)
  444.                 {
  445.                     if (userInput == fighter.Id)
  446.                     {
  447.                         selectFighter = fighter;
  448.  
  449.                         Console.ForegroundColor = ConsoleColor.Blue;
  450.                         Console.WriteLine($"Выбран {fighter.Name}");
  451.                         Console.ForegroundColor = ConsoleColor.White;
  452.  
  453.                         _fighters.Remove(fighter);
  454.  
  455.                         break;
  456.                     }
  457.                 }
  458.             }
  459.  
  460.             return selectFighter;
  461.         }
  462.     }
  463.  
  464.     class Utility
  465.     {
  466.         private static Random _random = new Random();
  467.  
  468.         public static int GenerateRandomNumber(int min, int max)
  469.         {
  470.             int randomNumber = _random.Next(min, max);
  471.  
  472.             return randomNumber;
  473.         }
  474.  
  475.         public static int ReturnInputNumber()
  476.         {
  477.             int number;
  478.  
  479.             while (int.TryParse(Console.ReadLine(), out number) == false)
  480.             {
  481.                 Console.WriteLine("Введено не число, попробуйте еще раз: ");
  482.             }
  483.  
  484.             return number;
  485.         }
  486.     }
  487. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement