Advertisement
ZhongNi

Gladiator fights (2)

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