Advertisement
ZhongNi

Gladiator fights

Sep 25th, 2024 (edited)
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.72 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4.  
  5. namespace Classes
  6. {
  7.     internal class Program
  8.     {
  9.         static void Main()
  10.         {
  11.             Arena arena = new Arena();
  12.             arena.Fight();
  13.         }
  14.     }
  15.  
  16.     class Arena
  17.     {
  18.         private List<IFigthing> fighters = new List<IFigthing>();
  19.  
  20.         public void Fight()
  21.         {
  22.             SelectionMenu(fighters);
  23.  
  24.             bool isWarriorAlive = true;
  25.             int turn = 1;
  26.             int firstFighter = 0;
  27.             int secondFighter = 1;
  28.  
  29.             while (isWarriorAlive)
  30.             {
  31.                 Console.WriteLine($"Turn {turn}");
  32.                 turn++;
  33.  
  34.                 fighters[secondFighter].TakeDamage(fighters[firstFighter].Damage(), firstFighter + 1);
  35.                 fighters[firstFighter].TakeDamage(fighters[secondFighter].Damage(), secondFighter + 1);
  36.                 fighters[firstFighter].ShowHealth(firstFighter + 1);
  37.                 fighters[secondFighter].ShowHealth(secondFighter + 1);
  38.  
  39.                 isWarriorAlive = fighters[firstFighter].Health() > 0 && fighters[secondFighter].Health() > 0;
  40.             }
  41.  
  42.             Console.ForegroundColor = ConsoleColor.Green;
  43.  
  44.             if (fighters[firstFighter].Health() == 0 && fighters[secondFighter].Health() == 0)
  45.             {
  46.                 Console.WriteLine($"Draw!");
  47.             }
  48.             else if (fighters[firstFighter].Health() > 0 && fighters[secondFighter].Health() == 0)
  49.             {
  50.                 Console.WriteLine($"Warrior {firstFighter + 1} wins!");
  51.             }
  52.             else if (fighters[firstFighter].Health() == 0 && fighters[secondFighter].Health() > 0)
  53.             {
  54.                 Console.WriteLine($"Warrior {secondFighter + 1} wins!");
  55.             }
  56.  
  57.             Console.ResetColor();
  58.         }
  59.  
  60.         private List<IFigthing> SelectionMenu(List<IFigthing> fighters)
  61.         {
  62.             const int ChooseDoubleDamageWarrior = 1;
  63.             const int ChooseTwiceStrikesWarrior = 2;
  64.             const int ChooseHealingWarrior = 3;
  65.             const int ChooseMageWarrior = 4;
  66.             const int ChooseEvadingWarrior = 5;
  67.  
  68.             int numberOfWarriors = 2;
  69.  
  70.             Console.WriteLine($"" +
  71.                 $"{ChooseDoubleDamageWarrior} - Double Damage Warrior\n" +
  72.                 $"{ChooseTwiceStrikesWarrior} - Twice Strikes Warrior\n" +
  73.                 $"{ChooseHealingWarrior} - Healing Warrior\n" +
  74.                 $"{ChooseMageWarrior} - Mage Warrior\n" +
  75.                 $"{ChooseEvadingWarrior} - Evading Warrior\n" +
  76.                 $"");
  77.  
  78.             for (int i = 0; i < numberOfWarriors; i++)
  79.             {
  80.                 Console.WriteLine($"choose {i + 1} fighter {ChooseDoubleDamageWarrior}-{ChooseEvadingWarrior}");
  81.                 int.TryParse(Console.ReadLine(), out int fighterType);
  82.  
  83.                 Random random = new Random();
  84.  
  85.                 int minHealth = 120;
  86.                 int maxHealth = 160;
  87.                 int health = random.Next(minHealth, maxHealth + 1);
  88.  
  89.                 int minDamage = 18;
  90.                 int maxDamage = 23;
  91.                 int damage = random.Next(minDamage, maxDamage + 1);
  92.  
  93.                 bool hasChosen = true;
  94.  
  95.                 switch (fighterType)
  96.                 {
  97.                     case ChooseDoubleDamageWarrior:
  98.                         fighters.Add(new DoubleDamageWarrior(health, damage));
  99.                         break;
  100.  
  101.                     case ChooseTwiceStrikesWarrior:
  102.                         fighters.Add(new TwiceStrikesWarrior(health, damage));
  103.                         break;
  104.  
  105.                     case ChooseHealingWarrior:
  106.                         fighters.Add(new HealingWarrior(health, damage));
  107.                         break;
  108.  
  109.                     case ChooseMageWarrior:
  110.                         fighters.Add(new MageWarrior(health, damage));
  111.                         break;
  112.  
  113.                     case ChooseEvadingWarrior:
  114.                         fighters.Add(new EvadingWarrior(health, damage));
  115.                         break;
  116.  
  117.                     default:
  118.                         i--;
  119.                         hasChosen = false;
  120.                         break;
  121.                 }
  122.  
  123.                 if (hasChosen)
  124.                 {
  125.                     Console.WriteLine($"Warrior {i + 1} has health - {health}, damage - {damage}");
  126.                 }
  127.             }
  128.  
  129.             return fighters;
  130.         }
  131.     }
  132.  
  133.     interface IFigthing
  134.     {
  135.         int Health();
  136.         int Damage();
  137.         void TakeDamage(int damage, int warriorNumber);
  138.         void ShowHealth(int warriorNumber);
  139.     }
  140.  
  141.     class Fighter
  142.     {
  143.         public int _health;
  144.         protected int _damage;
  145.  
  146.         protected Random _random = new Random();
  147.  
  148.         protected Fighter(int health, int damage)
  149.         {
  150.             _health = health;
  151.             _damage = damage;
  152.         }
  153.  
  154.         public void TakeDamage(int damage, int warriorsNumber)
  155.         {
  156.             Console.WriteLine($"Warrior {warriorsNumber} deals {damage} damage");
  157.             _health = _health > 0 ? _health - damage : 0;
  158.         }
  159.  
  160.         public int Health() => _health;
  161.  
  162.         public int Damage() => _damage;
  163.  
  164.         public void ShowHealth(int warriorsNumber)
  165.         {
  166.             Console.Write($"Warrior {warriorsNumber} has health: ");
  167.             Console.WriteLine(_health = _health > 0 ? _health : 0);
  168.         }
  169.  
  170.         protected void SpecialAttack() { }
  171.  
  172.         protected void PrintGreenMessage(string Message)
  173.         {
  174.             Console.ForegroundColor = ConsoleColor.Green;
  175.             Console.WriteLine(Message);
  176.             Console.ResetColor();
  177.         }
  178.     }
  179.  
  180.     class DoubleDamageWarrior : Fighter, IFigthing
  181.     {
  182.         private int _simpleDamage;
  183.  
  184.         public DoubleDamageWarrior(int health, int damage) : base(health, damage)
  185.         {
  186.             _simpleDamage = _damage;
  187.         }
  188.  
  189.         new public int Damage()
  190.         {
  191.             SpecialAttack();
  192.  
  193.             return _damage;
  194.         }
  195.  
  196.         new private void SpecialAttack()
  197.         {
  198.             int probability = 3;
  199.  
  200.             if (_random.Next(0, 10) < probability)
  201.             {
  202.                 int damageMultiplier = 2;
  203.                 _damage = _simpleDamage * damageMultiplier;
  204.  
  205.                 PrintGreenMessage($"Special Attack damage X{damageMultiplier}");
  206.             }
  207.             else
  208.             {
  209.                 _damage = _simpleDamage;
  210.             }
  211.         }
  212.     }
  213.  
  214.     class TwiceStrikesWarrior : Fighter, IFigthing
  215.     {
  216.         private int _hitCount = 1;
  217.         private int _simpleDamage;
  218.  
  219.         public TwiceStrikesWarrior(int health, int damage) : base(health, damage)
  220.         {
  221.             _simpleDamage = _damage;
  222.         }
  223.  
  224.         new public int Damage()
  225.         {
  226.             SpecialAttack();
  227.  
  228.             return _damage;
  229.         }
  230.  
  231.         new private void SpecialAttack()
  232.         {
  233.             int damageMultiplier = 2;
  234.             int criticalAttackPeriod = 3;
  235.  
  236.             if (_hitCount % criticalAttackPeriod == 0)
  237.             {
  238.                 _damage = _damage * damageMultiplier;
  239.  
  240.                 PrintGreenMessage($"Special Attack damage X{damageMultiplier}");
  241.             }
  242.             else
  243.             {
  244.                 _damage = _simpleDamage;
  245.             }
  246.  
  247.             _hitCount++;
  248.         }
  249.     }
  250.  
  251.     class HealingWarrior : Fighter, IFigthing
  252.     {
  253.         private int _rage;
  254.         private int _normalHealth;
  255.  
  256.         public HealingWarrior(int health, int damage) : base(health, damage)
  257.         {
  258.             _normalHealth = health;
  259.         }
  260.  
  261.         new public int Damage()
  262.         {
  263.             SpecialAttack();
  264.  
  265.             return _damage;
  266.         }
  267.  
  268.         new private void SpecialAttack()
  269.         {
  270.             int rageThreshold = 80;
  271.             int healthRecovery = 30;
  272.             _rage = _normalHealth - _health;
  273.  
  274.             if (_rage > rageThreshold)
  275.             {
  276.                 _health += healthRecovery;
  277.                 _normalHealth = _normalHealth - rageThreshold + healthRecovery;
  278.  
  279.                 PrintGreenMessage($"Special Attack Heal +{healthRecovery}");
  280.             }
  281.         }
  282.     }
  283.  
  284.     class MageWarrior : Fighter, IFigthing
  285.     {
  286.         private int _mana = 45;
  287.         private int _mageDamage = 20;
  288.         private int _spellCosts = 20;
  289.         private int _simpleDamage;
  290.  
  291.         public MageWarrior(int health, int damage) : base(health, damage)
  292.         {
  293.             _simpleDamage = _damage;
  294.         }
  295.  
  296.         new public int Damage()
  297.         {
  298.             SpecialAttack();
  299.  
  300.             return _damage;
  301.         }
  302.  
  303.         new private void SpecialAttack()
  304.         {
  305.             if (_mana > _spellCosts)
  306.             {
  307.                 _mana -= _spellCosts;
  308.                 _damage += _mageDamage;
  309.  
  310.                 PrintGreenMessage("Special Attack Fireball");
  311.             }
  312.             else
  313.             {
  314.                 _damage = _simpleDamage;
  315.             }
  316.         }
  317.     }
  318.  
  319.     class EvadingWarrior : Fighter, IFigthing
  320.     {
  321.         private bool isEvading = false;
  322.         private int _currentHealth;
  323.  
  324.         public EvadingWarrior(int health, int damage) : base(health, damage)
  325.         {
  326.             _currentHealth = _health;
  327.         }
  328.  
  329.         new public int Damage()
  330.         {
  331.             SpecialAttack();
  332.  
  333.             return _damage;
  334.         }
  335.  
  336.         new private void SpecialAttack()
  337.         {
  338.             int probability = 3;
  339.             isEvading = _random.Next(0, 10) < probability;
  340.  
  341.             if (isEvading)
  342.             {
  343.                 _health = _currentHealth;
  344.  
  345.                 PrintGreenMessage("Special Attack Evading");
  346.             }
  347.         }
  348.     }
  349. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement