Advertisement
Anonim_999

Fight OOP

Aug 24th, 2021 (edited)
1,384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.70 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. namespace ConsoleApp1
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             Fighter[] fighters = {
  10.                 new Necromancer("Ксардас", 15, 250, 13, 100),
  11.                 new Mag("Милтен", 10, 340, 15, 113),
  12.                 new Knight("Лестр", 20, 250, 10, 200),
  13.                 new Mag("Сатурас", 20, 200, 10, 200),
  14.                 new Necromancer("Диего", 25, 250, 15, 50)
  15.             };
  16.  
  17.             for (int i = 0; i < fighters.Length; i++)
  18.             {
  19.                 Console.Write($"{i + 1}.");
  20.                 fighters[i].ShowStats();
  21.             }
  22.  
  23.             Console.Write("Выберите первого бойца: ");
  24.             string indexFirstFighter = Console.ReadLine();
  25.             Console.Write("Выберите второго бойца: ");
  26.             string indexSecondFighter = Console.ReadLine();
  27.  
  28.             if (CheckInputFighters(fighters, indexFirstFighter, indexSecondFighter))
  29.             {
  30.                 Fighter firstFighter = fighters[Convert.ToInt32(indexFirstFighter) - 1];
  31.                 Fighter secondFighter = fighters[Convert.ToInt32(indexSecondFighter) - 1];
  32.                 firstFighter.ShowStats(true);
  33.                 secondFighter.ShowStats(true);
  34.                 Fight(firstFighter, secondFighter);
  35.             }
  36.         }
  37.  
  38.         public static bool CheckInputFighters(Fighter[] fighters, string indexFirstFighter, string indexSecondFighter)
  39.         {
  40.             int value;
  41.  
  42.             if (indexFirstFighter != indexSecondFighter && int.TryParse(indexFirstFighter, out value) && int.TryParse(indexSecondFighter, out value))
  43.             {
  44.  
  45.                 if (Convert.ToInt32(indexFirstFighter) <= fighters.Length && Convert.ToInt32(indexFirstFighter) >= 1 && Convert.ToInt32(indexSecondFighter) <= fighters.Length && Convert.ToInt32(indexSecondFighter) >= 1)
  46.                 {
  47.                     return true;
  48.                 }
  49.                 else
  50.                 {
  51.                     Console.WriteLine("не правильно выбран герой");
  52.                 }
  53.             }
  54.             else
  55.             {
  56.                 Console.WriteLine("Боец поставлен против себя, или же вы указали не то число при выборе героя");
  57.             }
  58.             return false;
  59.         }
  60.  
  61.         public static void Fight(Fighter firstFighter, Fighter secondFighter)
  62.         {
  63.            
  64.             while (firstFighter.isAlive && secondFighter.isAlive)
  65.             {
  66.                 Console.ReadKey();
  67.                 Console.Clear();
  68.                 firstFighter.ShowStats(true);
  69.                 secondFighter.ShowStats(true);
  70.                 secondFighter.TakeDamage(firstFighter.UseSpecialAttack());
  71.                 Console.ReadKey();
  72.                 Console.WriteLine();
  73.                 firstFighter.TakeDamage(secondFighter.UseSpecialAttack());
  74.             }
  75.  
  76.             Console.Clear();
  77.             firstFighter.ShowStats(true);
  78.             secondFighter.ShowStats(true);
  79.  
  80.             if (firstFighter.HealthWarrior > 0)
  81.             {
  82.                 Console.WriteLine($"Победил боец: {firstFighter.NameWarrior}");
  83.             }
  84.             else if (firstFighter.HealthWarrior <=0 && secondFighter.HealthWarrior <= 0)
  85.             {
  86.                 Console.WriteLine("Ничья");
  87.             }
  88.             else
  89.             {
  90.                 Console.WriteLine($"Победил боец: {secondFighter.NameWarrior}");
  91.             }
  92.         }
  93.     }
  94. }
  95.  
  96. class Fighter
  97. {
  98.     private Random _random;
  99.     protected string Name;
  100.     protected float Damage;
  101.     protected float Health;
  102.     protected int Armor;
  103.     protected int Mana;
  104.     protected float Luck;
  105.     public bool isAlive => Health > 0;
  106.     public float HealthWarrior { get { return Health; } }
  107.  
  108.     public string NameWarrior { get { return Name; } }
  109.  
  110.     public Fighter(string name, int damage, int health, int armor, int mana)
  111.     {
  112.         _random = new Random();
  113.         Name = name;
  114.         Damage = damage;
  115.         Health = health;
  116.         Armor = armor;
  117.         Mana = mana;
  118.         Luck = _random.Next(10, 300) / 100.0f;
  119.     }
  120.  
  121.     public void TakeDamage(float damage)
  122.     {
  123.         if (damage > 0 && damage > Armor)
  124.         {
  125.             Health -= damage - Armor;
  126.         }
  127.     }
  128.  
  129.     public void ShowStats(bool ViewLuck = false)
  130.     {
  131.         if (ViewLuck)
  132.         {
  133.             Console.WriteLine($"Имя: {Name} || Жизнь: {Health} || Броня: {Armor} || Мана: {Mana} || Урон: {Damage} || Удача: {Luck}");
  134.         }
  135.         else
  136.         {
  137.             Console.WriteLine($"Имя: {Name} || Жизнь: {Health} || Броня: {Armor} || Мана: {Mana} || Урон: {Damage} || Удача: ???");
  138.         }
  139.     }
  140.  
  141.     virtual public float UseSpecialAttack()
  142.     {
  143.         return Damage;
  144.     }
  145. }
  146.  
  147. class Necromancer : Fighter
  148. {
  149.     public Necromancer(string name, int damage, int health, int armor, int mana) : base(name, damage, health, armor, mana)
  150.     {
  151.  
  152.     }
  153.  
  154.     override public float UseSpecialAttack()
  155.     {
  156.         int constManaCost = 10;
  157.         float addDamage = 1;
  158.         float addLuck = 0.1f;
  159.         int manaCost = (int)(constManaCost / Luck);
  160.  
  161.         if (manaCost < Mana)
  162.         {
  163.             Luck += addLuck;
  164.             Damage += addDamage * Luck;
  165.             Mana -= manaCost;
  166.             Console.WriteLine($"{Name} навеял тучи, урон возрос на {addDamage * Luck}");
  167.             Luck -= addLuck;
  168.         }
  169.         else
  170.         {
  171.             Console.WriteLine($"{Name} не хватает маны на особую атаку, и он совершил простую атаку");
  172.         }
  173.         return Damage;
  174.     }
  175. }
  176.  
  177. class Knight : Fighter
  178. {
  179.     public Knight(string name, int damage, int health, int armor, int mana) : base(name, damage, health, armor, mana)
  180.     {
  181.  
  182.     }
  183.  
  184.     override public float UseSpecialAttack()
  185.     {
  186.         int constManaCost = 10;
  187.         int addDamage = 1;
  188.         float addHealth = 10;
  189.         int manaСost = (int)(constManaCost / Luck);
  190.  
  191.         if (manaСost < Mana)
  192.         {
  193.             Console.WriteLine($"{Name} Помолился: его атаки стали сильнее, а здоровье больше");
  194.             Mana -= manaСost;
  195.             Damage += addDamage;
  196.             Health += Health / addHealth;
  197.         }
  198.         else
  199.         {
  200.             Console.WriteLine($"У {Name} не хватает маны на особую атаку, и он совершил простую атаку мечом");
  201.         }
  202.         return Damage;
  203.     }
  204. }
  205.  
  206. class Mag : Fighter
  207. {
  208.     public Mag(string name, int damage, int health, int armor, int mana) : base(name, damage, health, armor, mana)
  209.     {
  210.  
  211.     }
  212.  
  213.     override public float UseSpecialAttack()
  214.     {
  215.         int constManaCost = 10;
  216.         int addArmor = 1;
  217.         float FireBallDamage = 10;
  218.         int manaСost = (int)(constManaCost / Luck);
  219.  
  220.         if (Mana > manaСost)
  221.         {
  222.             Console.WriteLine($"{Name} Бросил огненный шар в противника и попытался укрепить свое тело магией");
  223.             Armor += (int)(addArmor * Luck);
  224.             FireBallDamage = FireBallDamage * Luck;
  225.             Mana -= manaСost;
  226.             return FireBallDamage;
  227.         }
  228.         else
  229.         {
  230.             Console.WriteLine($"У {Name} не хватает маны на особую атаку, и он совершил простую атаку посохом");
  231.             return Damage;
  232.         }
  233.     }
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement