Advertisement
viktarb

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

Feb 8th, 2023 (edited)
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.54 KB | Gaming | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4.  
  5. class Program
  6. {
  7.     static void Main(string[] args)
  8.     {
  9.         Arena arena = new Arena();
  10.         arena.StartGame();
  11.     }
  12. }
  13.  
  14. class Arena
  15. {
  16.     public void StartGame()
  17.     {
  18.         Warrior firstWarrior;
  19.         Warrior secondWarrior;
  20.  
  21.         Console.WriteLine("\tДобро пожаловать на арену \"Team Fortress 2\".");
  22.         Console.WriteLine("\nВыберите первого бойца.");
  23.         firstWarrior = SelectWarrior();
  24.  
  25.         Console.WriteLine("\nВыберите второго бойца.");
  26.         secondWarrior = SelectWarrior();
  27.  
  28.         Console.WriteLine("Да начнётся бой!\n");
  29.         System.Threading.Thread.Sleep(1000);
  30.         Fight(firstWarrior, secondWarrior);
  31.     }
  32.  
  33.     private Warrior SelectWarrior()
  34.     {
  35.         bool isSelectedWarrior = false;
  36.         Warrior warrior = null;
  37.         Warrior[] warriors =
  38.             {
  39.                 new Soldier ("Солдат", 200, 50, 2),
  40.                 new HeavyWarrior ("Хейви", 300, 25, 4),
  41.                 new Sniper ("Снайпер", 125, 105, 0),
  42.                 new Demoman ("Демоман", 185, 70, 2),
  43.                 new Scout ("Скаут", 125, 10, 1),
  44.              };
  45.  
  46.         ShowAllWarriors(warriors);
  47.  
  48.         while (isSelectedWarrior == false)
  49.         {
  50.             int.TryParse(Console.ReadLine(), out int userWarriorSellected);
  51.             isSelectedWarrior = userWarriorSellected > 0 && userWarriorSellected <= warriors.Length;
  52.  
  53.             if (isSelectedWarrior)
  54.             {
  55.                 warrior = warriors[userWarriorSellected - 1];
  56.             }
  57.             else
  58.             {
  59.                 Console.Write("\aТакого бойца в списке нет, или нужно вводить число. Попробуйте еще раз: ");
  60.             }
  61.         }
  62.  
  63.         return warrior;
  64.     }
  65.  
  66.     private void ShowAllWarriors(Warrior[] warriors)
  67.     {
  68.         int counter = 1;
  69.         Console.WriteLine("\n  Список персонажей:");
  70.  
  71.         foreach (Warrior warrior in warriors)
  72.         {
  73.             Console.Write(counter + " ");
  74.             warrior.ShowStats();
  75.             counter++;
  76.         }
  77.     }
  78.  
  79.     private bool TryPickingWinner(Warrior firstWarrior, Warrior secondWarrior)
  80.     {
  81.         if (secondWarrior.Health <= 0 && firstWarrior.Health > 0)
  82.         {
  83.             Console.WriteLine($"\nПобедил {firstWarrior.Name}! Поздравляем победителя!");
  84.  
  85.             return true;
  86.         }
  87.         else if (firstWarrior.Health <= 0 && secondWarrior.Health > 0)
  88.         {
  89.             Console.WriteLine($"\nПобедил {secondWarrior.Name}! Поздравляем победителя!");
  90.  
  91.             return true;
  92.         }
  93.         else if (firstWarrior.Health <= 0 && secondWarrior.Health <= 0)
  94.         {
  95.             Console.WriteLine("Погибли оба бойца. Победителей нет.");
  96.  
  97.             return true;
  98.         }
  99.  
  100.         return false;
  101.     }
  102.  
  103.     private void Fight(Warrior firstWarrior, Warrior secondWarrior)
  104.     {
  105.         bool isEndFight = false;
  106.  
  107.         while (isEndFight == false)
  108.         {
  109.             firstWarrior.Attack(secondWarrior);
  110.             secondWarrior.Attack(firstWarrior);
  111.             firstWarrior.ShowCurrentHealth();
  112.             secondWarrior.ShowCurrentHealth();
  113.  
  114.             System.Threading.Thread.Sleep(500);
  115.             Console.WriteLine();
  116.             isEndFight = TryPickingWinner(firstWarrior, secondWarrior);
  117.         }
  118.     }
  119. }
  120.  
  121. abstract class Warrior
  122. {
  123.     protected int Damage;
  124.     private int _defence;
  125.     private Random _random = new Random();
  126.  
  127.     public Warrior(string name, int health, int damage, int defence)
  128.     {
  129.         Name = name;
  130.         Health = health;
  131.         Damage = damage;
  132.         _defence = defence;
  133.     }
  134.  
  135.     public string Name { get; protected set; }
  136.     public int Health { get; protected set; }
  137.  
  138.     public virtual void TakeDamage(int damage)
  139.     {
  140.         if ((damage - _defence) > 0)
  141.             Health -= damage - _defence;
  142.     }
  143.  
  144.     public virtual void Attack(Warrior warrior)
  145.     {
  146.         warrior.TakeDamage(Damage);
  147.     }
  148.  
  149.     public void ShowCurrentHealth()
  150.     {
  151.         Console.WriteLine($"{Name} здоровье: {Health}");
  152.     }
  153.  
  154.     public void ShowStats()
  155.     {
  156.         Console.WriteLine($"{Name}: Здоровье - {Health}, Урон - {Damage}, Броня - {_defence}");
  157.     }
  158.  
  159.     protected bool CanToUseSkill(int deltaChanceSuccess = 0)
  160.     {
  161.         int minimumValue = 0;
  162.         int maximumValue = 101;
  163.         int defaultChanceSuccess = 20;
  164.  
  165.         return _random.Next(minimumValue, maximumValue) <= defaultChanceSuccess + deltaChanceSuccess;
  166.     }
  167. }
  168.  
  169. class Soldier : Warrior
  170. {
  171.     public Soldier(string name, int health, int damage, int defence) : base(name, health, damage, defence) { }
  172.  
  173.     public override void Attack(Warrior warrior)
  174.     {
  175.         float multiplyingFactor = 2.5F;
  176.         int deltaChanceSuccess = 10;
  177.         int takeDamageFromYourShots = 50;
  178.  
  179.         if (CanToUseSkill(deltaChanceSuccess))
  180.         {
  181.             warrior.TakeDamage(Convert.ToInt32(Damage * multiplyingFactor));
  182.             Health -= takeDamageFromYourShots;
  183.         }
  184.         else
  185.         {
  186.             base.Attack(warrior);
  187.         }
  188.     }
  189. }
  190.  
  191. class HeavyWarrior : Warrior
  192. {
  193.     public HeavyWarrior(string name, int health, int damage, int defence) : base(name, health, damage, defence) { }
  194.  
  195.     public override void Attack(Warrior warrior)
  196.     {
  197.         int defaultChanceSuccess = -10;
  198.         int recoveryHealth = 50;
  199.  
  200.         if (CanToUseSkill(defaultChanceSuccess))
  201.             Health += recoveryHealth;
  202.  
  203.         base.Attack(warrior);
  204.     }
  205. }
  206.  
  207. class Sniper : Warrior
  208. {
  209.     public Sniper(string name, int health, int damage, int defence) : base(name, health, damage, defence) { }
  210.  
  211.     public override void Attack(Warrior warrior)
  212.     {
  213.         float multiplyingFactor = 1.8F;
  214.         int deltaChanceSuccess = 5;
  215.  
  216.         if (CanToUseSkill(deltaChanceSuccess))
  217.             warrior.TakeDamage(Convert.ToInt32(Damage * multiplyingFactor));
  218.         else
  219.             base.Attack(warrior);
  220.     }
  221. }
  222.  
  223. class Demoman : Warrior
  224. {
  225.     private int _gunReloading;
  226.     public Demoman(string name, int health, int damage, int defence, int _gunReloading = 0) : base(name, health, damage, defence) { }
  227.  
  228.     public override void Attack(Warrior warrior)
  229.     {
  230.         int deltaChanceSuccess = 30;
  231.         int coldownGunReloadingInTurns = 3;
  232.  
  233.         if (_gunReloading > 0)
  234.             _gunReloading--;
  235.  
  236.         if (CanToUseSkill(deltaChanceSuccess) && _gunReloading == 0)
  237.         {
  238.             warrior.TakeDamage(Damage);
  239.             warrior.TakeDamage(Damage);
  240.  
  241.             _gunReloading = coldownGunReloadingInTurns;
  242.         }
  243.         else
  244.         {
  245.             Console.WriteLine(Name + " не смог выстрелить, кроме того осталось еще " + _gunReloading + " ходов перезарядки.");
  246.         }
  247.     }
  248. }
  249.  
  250. class Scout : Warrior
  251. {
  252.     public Scout(string name, int health, int damage, int defence) : base(name, health, damage, defence) { }
  253.  
  254.     public override void TakeDamage(int damage)
  255.     {
  256.         int deltaChanceSuccess = 50;
  257.  
  258.         if (CanToUseSkill(deltaChanceSuccess))
  259.         {
  260.             Console.WriteLine(Name + " увернулся от удара.");
  261.         }
  262.         else
  263.         {
  264.             base.TakeDamage(damage);
  265.         }
  266.     }
  267. }
Tags: ijunior
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement