Advertisement
IGRODELOFF

Task45

Jul 26th, 2022 (edited)
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 13.02 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 Task45
  8. {
  9.     internal class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             string welcomeRing =
  14.                 "Добро пожаловать на ринг роботов!";
  15.             string menu =
  16.                 "Start - выбрать бойцов и начать поединок." +
  17.                 "Exit -- уйти";
  18.  
  19.             bool isExit = false;
  20.  
  21.             Console.WriteLine(welcomeRing);
  22.  
  23.             while (isExit == false)
  24.             {
  25.                 Ring ring = new Ring();
  26.  
  27.                 Console.WriteLine(menu);
  28.                 string userInput = Console.ReadLine();
  29.  
  30.                 switch (userInput)
  31.                 {
  32.                     case "Start":
  33.                         ring.Work();
  34.                         break;
  35.                     case "Exit":
  36.                         isExit = true;
  37.                         break;
  38.                     default:
  39.                         break;
  40.                 }
  41.             }
  42.         }
  43.     }
  44.  
  45.     class Ring
  46.     {
  47.         private List<Robot> _robotsWarriors = new List<Robot>();
  48.  
  49.         public Ring()
  50.         {
  51.             _robotsWarriors.Add(new Ingenier("Инженер", "ремонт", "востанавливает 50 ед.здоровья", 200, 30, 60));
  52.             _robotsWarriors.Add(new Miner("Шахтёр", "перегрев", "увеличивает показатели брони и урона на 1 раунд", 250, 45, 50));
  53.             _robotsWarriors.Add(new Сop("Коп", "электрошок", "увеличивает на 10 процентов урон в течении 3 раундов", 200, 30, 45));
  54.             _robotsWarriors.Add(new Defender("Защитник", "щит", "Создаёт щит, снижая урон на 35% и повышая защиту на 55%", 400, 25, 100));
  55.             _robotsWarriors.Add(new Destroyer("Разрушитель", "второе дыхание", "Повышает урон на 50%, снижая броню на 50%", 150, 50, 60));
  56.         }
  57.        
  58.         public void Work()
  59.         {
  60.             string requestChoiceRobots =
  61.                 "Выбери двух роботов бойцов: ";
  62.             string requestFirstChoiceRobot =
  63.                 "Выбери первого: ";
  64.             string requestSecondtChoiceRobot =
  65.                 "Выбери второго: ";
  66.  
  67.             bool isActive = true;
  68.  
  69.             while (isActive)
  70.             {
  71.                 Robot firstRobot;
  72.                 Robot secondRobot;
  73.  
  74.                 ShowInfo();
  75.  
  76.                 Console.WriteLine(requestChoiceRobots);
  77.                 Console.WriteLine(requestFirstChoiceRobot);
  78.  
  79.                 Choose(out firstRobot);
  80.  
  81.                 Console.WriteLine(requestSecondtChoiceRobot);
  82.  
  83.                 Choose(out secondRobot);
  84.  
  85.                 Fight(firstRobot, secondRobot);
  86.  
  87.                 isActive = false;
  88.             }
  89.         }
  90.  
  91.         private void ShowInfo()
  92.         {
  93.             string listRobots =
  94.                 "Список доступных роботов: ";
  95.  
  96.             Console.WriteLine(listRobots);
  97.             for (int i = 0; i < _robotsWarriors.Count; i++)
  98.             {
  99.                 _robotsWarriors[i].ShowCharacteristicsRobot();
  100.             }
  101.  
  102.             Console.WriteLine();
  103.         }
  104.  
  105.         private void Choose(out Robot robot)
  106.         {
  107.             robot = null;
  108.  
  109.             string requestNameRobot =
  110.                 "Введите имя робота, которого хотите выбрать: ";
  111.             string errorFindRobot =
  112.                 "Такого робота нет в списке. Попробуй ещё раз.";
  113.             string robotSelected =
  114.                 "Робот выбран.";
  115.  
  116.             bool robotFound = false;
  117.  
  118.             while (robotFound == false)
  119.             {
  120.                 Robot findRobot;
  121.  
  122.                 Console.Write(requestNameRobot);
  123.                 string userInput = Console.ReadLine();
  124.  
  125.                 robotFound = TryGetRobot(userInput, out findRobot);
  126.  
  127.                 if (robotFound)
  128.                 {
  129.                     robot = findRobot;
  130.                     _robotsWarriors.Remove(robot);
  131.                 }
  132.                 else
  133.                 {
  134.                     Console.WriteLine(errorFindRobot);
  135.                 }
  136.             }
  137.  
  138.             Console.WriteLine(robotSelected);
  139.             robot.ShowCharacteristicsRobot();
  140.             Console.WriteLine();
  141.         }
  142.  
  143.         private bool TryGetRobot(string userInput, out Robot findRobot)
  144.         {
  145.             findRobot = null;
  146.  
  147.             foreach (var warrior in _robotsWarriors)
  148.             {
  149.                 if (userInput == warrior.Name)
  150.                 {
  151.                     findRobot = warrior;
  152.                     return true;
  153.                 }
  154.             }
  155.             return false;
  156.         }
  157.  
  158.         private void Fight(Robot firstRobot, Robot secondRobot)
  159.         {
  160.             string startFight =
  161.                 "Роботы выбраны. Время начинать поединок! ";
  162.             string draw =
  163.                 "Оба робота выведены из строя. Ничья.";
  164.             string defeatedFirstRobot =
  165.                 "Второй робот не подаёт признаков жизни. Первый робот побеждает!";
  166.             string defeatedSecondtRobot =
  167.                 "Первый робот не подаёт признаков жизни. Второй робот побеждает!";
  168.  
  169.             float originalDamageFirstRobot = firstRobot.Damage;
  170.             float originalDamageSecondRobot = secondRobot.Damage;
  171.  
  172.             float originalArmorFirstRobot = firstRobot.Armor;
  173.             float originalArmorSecondRobot = secondRobot.Armor;
  174.  
  175.             while (firstRobot.Health > 0 && secondRobot.Health > 0)
  176.             {
  177.                 Console.WriteLine("\n" + startFight);
  178.  
  179.                 if (firstRobot.Reload == 0)
  180.                 {
  181.                     firstRobot.UseSecondAbility();
  182.                 }
  183.  
  184.                 if (firstRobot.WorkTime > 0)
  185.                 {
  186.                     firstRobot.ReduceWorkTime();
  187.                 }
  188.                 else
  189.                 {
  190.                     firstRobot.RevertOriginalState(firstRobot, originalDamageFirstRobot, originalArmorFirstRobot);
  191.                 }
  192.  
  193.                 if (secondRobot.Reload == 0)
  194.                 {
  195.                     secondRobot.UseSecondAbility();
  196.                 }
  197.  
  198.                 if (secondRobot.WorkTime > 0)
  199.                 {
  200.                     secondRobot.ReduceWorkTime();
  201.                 }
  202.                 else
  203.                 {
  204.                     secondRobot.RevertOriginalState(secondRobot, originalDamageSecondRobot, originalArmorSecondRobot);
  205.                 }
  206.  
  207.                 firstRobot.TakeDamage(secondRobot.Damage);
  208.                 secondRobot.TakeDamage(firstRobot.Damage);
  209.  
  210.                 firstRobot.ShowCharacteristicsRobot();
  211.                 secondRobot.ShowCharacteristicsRobot();
  212.  
  213.                 firstRobot.SkipStep();
  214.                 secondRobot.SkipStep();
  215.  
  216.                 if (firstRobot.Health <= 0 && secondRobot.Health <= 0)
  217.                 {
  218.                     Console.WriteLine(draw);
  219.                 }
  220.                 else if (firstRobot.Health <= 0)
  221.                 {
  222.                     Console.WriteLine(defeatedFirstRobot);
  223.                 }
  224.                 else
  225.                 {
  226.                     Console.WriteLine(defeatedSecondtRobot);
  227.                 }
  228.             }
  229.         }
  230.     }
  231.  
  232.     class Robot
  233.     {
  234.         public string Name { get; protected set; }
  235.         public string NameSecondAbility { get; protected set; }
  236.         public string DescriptionAbility { get; protected set; }
  237.         public float Health { get; protected set; }
  238.         public float Damage { get; protected set; }
  239.         public float Armor { get; protected set; }
  240.         public int Reload { get; protected set; }
  241.         public int WorkTime { get; protected set; }
  242.  
  243.         public Robot(string name, string nameSecondAbility,string descriptionAbility, int health, int damage, int armor)
  244.         {
  245.             Name = name;
  246.             Health = health;
  247.             Damage = damage;
  248.             Armor = armor;
  249.             NameSecondAbility = nameSecondAbility;
  250.             DescriptionAbility = descriptionAbility;
  251.         }
  252.  
  253.         public void ShowCharacteristicsRobot()
  254.         {
  255.             Console.WriteLine(
  256.                 $"Название ----------- {Name}\n" +
  257.                 $"Запас здоровья ----- {Health} ед.\n" +
  258.                 $"Наносимый урон ----- {Damage} ед.\n" +
  259.                 $"Запас брони -------- {Armor} ед. \n" +
  260.                 $"Вторая способность - {NameSecondAbility} - описание - {DescriptionAbility}\n" +
  261.                 $"=============================================");
  262.         }
  263.  
  264.         public void TakeDamage(float damage)
  265.         {
  266.             if (Armor <= 100)
  267.             {
  268.                 Health -= damage * (100 - Armor) / 100;
  269.             }
  270.         }
  271.  
  272.         public void RevertOriginalState(Robot robot, float originalDamage, float originalArmor)
  273.         {
  274.             robot.Damage = originalDamage;
  275.             robot.Armor = originalArmor;
  276.         }
  277.  
  278.         public void SkipStep()
  279.         {
  280.             Reload--;
  281.         }
  282.        
  283.         public void ReduceWorkTime()
  284.         {
  285.             WorkTime--;
  286.         }
  287.  
  288.         public virtual void UseSecondAbility() { }
  289.     }
  290.  
  291.     class Ingenier : Robot
  292.     {
  293.         public Ingenier(string name, string nameSecondAbility, string descriptionAbility, int health, int damage, int armor) : base(name, nameSecondAbility, descriptionAbility, health, damage, armor) { }
  294.  
  295.         public override void UseSecondAbility()
  296.         {
  297.             string usesSkill =
  298.                 " - использует умение - ";
  299.  
  300.             Console.WriteLine(Name + usesSkill + NameSecondAbility);
  301.  
  302.             Repair();
  303.         }
  304.  
  305.         private void Repair()
  306.         {
  307.             Health += 50;
  308.             Armor *= 1.25f;
  309.             Reload = 3;
  310.             WorkTime = 0;
  311.         }
  312.     }
  313.  
  314.     class Miner : Robot
  315.     {
  316.         public Miner(string name, string nameSecondAbility, string descriptionAbility, int health, int damage, int armor) : base(name, nameSecondAbility, descriptionAbility, health, damage, armor) { }
  317.  
  318.         public override void UseSecondAbility()
  319.         {
  320.             string usesSkill =
  321.                 " - использует умение - ";
  322.  
  323.             Console.WriteLine(Name + usesSkill + NameSecondAbility);
  324.  
  325.             Overheat();
  326.         }
  327.  
  328.         private void Overheat()
  329.         {
  330.             Damage *= 1.35f;
  331.             Armor *= 1.1f;
  332.             Reload = 4;
  333.             WorkTime = 0;
  334.         }
  335.     }
  336.  
  337.     class Сop : Robot
  338.     {
  339.         public Сop(string name, string nameSecondAbility, string descriptionAbility, int health, int damage, int armor) : base(name, nameSecondAbility, descriptionAbility, health, damage, armor) { }
  340.  
  341.         public override void UseSecondAbility()
  342.         {
  343.             string usesSkill =
  344.                 " - использует умение - ";
  345.  
  346.             Console.WriteLine(Name + usesSkill + NameSecondAbility);
  347.  
  348.  
  349.             ElectricShock();
  350.         }
  351.  
  352.         private void ElectricShock()
  353.         {
  354.             Damage *= 1.1f;
  355.             Reload = 5;
  356.             WorkTime = 3;
  357.         }
  358.     }
  359.  
  360.     class Defender : Robot
  361.     {
  362.         public Defender(string name, string nameSecondAbility, string descriptionAbility, int health, int damage, int armor) : base(name, nameSecondAbility, descriptionAbility, health, damage, armor) { }
  363.  
  364.         public override void UseSecondAbility()
  365.         {
  366.             string usesSkill =
  367.                 " - использует умение - ";
  368.  
  369.             Console.WriteLine(Name + usesSkill + NameSecondAbility);
  370.  
  371.  
  372.             Barrier();
  373.         }
  374.  
  375.         private void Barrier()
  376.         {
  377.             Damage *= 0.65f;
  378.             Armor *= 1.55f;
  379.             Reload = 6;
  380.             WorkTime = 2;
  381.         }
  382.     }
  383.  
  384.     class Destroyer : Robot
  385.     {
  386.         public Destroyer(string name, string nameSecondAbility, string descriptionAbility, int health, int damage, int armor) : base(name, nameSecondAbility, descriptionAbility, health, damage, armor) { }
  387.  
  388.         public override void UseSecondAbility()
  389.         {
  390.             string usesSkill =
  391.                 " - использует умение - ";
  392.  
  393.             Console.WriteLine(Name + usesSkill + NameSecondAbility);
  394.  
  395.             AdditionalPower();
  396.         }
  397.  
  398.         private void AdditionalPower()
  399.         {
  400.             Damage *= 1.5f;
  401.             Armor *= 0.5f;
  402.             Reload = 6;
  403.             WorkTime = 2;
  404.         }
  405.     }
  406. }
  407.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement