Askor

Hw33

Nov 20th, 2021 (edited)
719
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.10 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 FightClub
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             FightClub fightClub = new FightClub();
  14.             fightClub.ShowFightersInfo();
  15.             fightClub.StartFight();
  16.          
  17.             Console.ReadKey();
  18.         }
  19.     }
  20.  
  21.     class FightClub
  22.     {
  23.         private List<Fighter> _fighters;
  24.        
  25.         public FightClub()
  26.         {
  27.             _fighters = new List<Fighter>();
  28.             Fighter mage, assassin, warrior, necromant, paladin;
  29.  
  30.             mage = new Mage("Mage", 100, 3, 20, 5);
  31.             assassin = new Assassin("Assassin", 90, 5, 20);
  32.             warrior = new Warrior("Warrior", 120, 1, 20);
  33.             necromant = new Necromant("Necromant", 110, 2, 20);
  34.             paladin = new Paladin("Paladin", 95, 4, 20);
  35.  
  36.             _fighters.Add(mage);
  37.             _fighters.Add(assassin);
  38.             _fighters.Add(warrior);
  39.             _fighters.Add(necromant);
  40.             _fighters.Add(paladin);
  41.         }
  42.  
  43.         public void ShowFightersInfo()
  44.         {
  45.             for (int i = 0; i < _fighters.Count; i++)
  46.             {
  47.                 Console.Write(i + 1 + ".");
  48.                 _fighters[i].ShowStats();
  49.             }
  50.         }
  51.  
  52.         private Fighter ChooseFighters()
  53.         {
  54.             Fighter fighter;
  55.             string userInput;
  56.             int fighterIndex;
  57.             int number;
  58.             bool isNumber;
  59.  
  60.             do
  61.             {
  62.                 do
  63.                 {
  64.                     userInput = Console.ReadLine();
  65.                     isNumber = int.TryParse(userInput, out number);
  66.                 }
  67.                 while (isNumber == false);
  68.  
  69.                 fighterIndex = Convert.ToInt32(userInput) - 1;
  70.             }
  71.             while (fighterIndex < 0 || fighterIndex >= _fighters.Count);
  72.  
  73.             fighter = _fighters[fighterIndex];
  74.  
  75.             fighter.ShowSkillInfo();
  76.  
  77.             return fighter;
  78.         }
  79.  
  80.         public void StartFight()
  81.         {
  82.             Fighter fighter1, fighter2;
  83.  
  84.             Console.WriteLine("\nВыберите первого бойца: ");
  85.             fighter1 = ChooseFighters();
  86.  
  87.  
  88.             Console.WriteLine("\nВыберите второго бойца: ");
  89.             fighter2 = ChooseFighters();
  90.  
  91.             Console.WriteLine("\nБой Начался");
  92.  
  93.             Console.WriteLine("\nБоец №1:");
  94.             fighter1.ShowStats();
  95.  
  96.             Console.WriteLine("Боец №2:");
  97.             fighter2.ShowStats();
  98.  
  99.             Console.WriteLine();
  100.  
  101.             while (fighter1.IsAlive() && fighter2.IsAlive())
  102.             {
  103.                 fighter1.TakeDamage(fighter2.CastSkill());
  104.                 fighter2.TakeDamage(fighter1.CastSkill());
  105.  
  106.                 fighter1.ShowStats();
  107.                 fighter2.ShowStats();
  108.                 Console.WriteLine();
  109.  
  110.  
  111.                 if (fighter1.IsAlive() == false && fighter2.IsAlive() == false)
  112.                 {
  113.                     Console.WriteLine("Ничья");
  114.                 }
  115.                 else if (fighter1.IsAlive() && fighter2.IsAlive() == false)
  116.                 {
  117.                     Console.WriteLine($"Победил - {fighter1.Name}");
  118.                 }
  119.                 else if (fighter1.IsAlive() == false && fighter2.IsAlive())
  120.                 {
  121.                     Console.WriteLine($"Победил - {fighter2.Name}");
  122.                 }
  123.  
  124.                 Console.ReadKey();
  125.             }
  126.         }
  127.     }
  128.  
  129.     class Fighter
  130.     {
  131.         protected int Armor;
  132.         protected int Health;
  133.         protected int Damage;
  134.  
  135.         public string Name { get; protected set; }
  136.  
  137.         public bool IsAlive() => Health > 0;
  138.  
  139.  
  140.         public Fighter(string name, int health, int armor, int damage)
  141.         {
  142.             Name = name;
  143.             Health = health;
  144.             Armor = armor;
  145.             Damage = damage;
  146.         }
  147.  
  148.         public void TakeDamage(int damage)
  149.         {
  150.             Health -= damage - Armor;
  151.         }
  152.  
  153.         public void ShowStats()
  154.         {
  155.             Console.WriteLine($"{Name}, Health - {Health}, Armor - {Armor}, Damage - {Damage}");
  156.         }
  157.  
  158.         public virtual void ShowSkillInfo()
  159.         {
  160.  
  161.         }
  162.  
  163.         public virtual int CastSkill()
  164.         {
  165.             return Damage;
  166.         }
  167.     }
  168.  
  169.     class Mage : Fighter
  170.     {
  171.         private int _maxCharge;
  172.  
  173.         public Mage(string name, int health, int armor, int damage, int charge) : base(name, health, armor, damage)
  174.         {
  175.             _maxCharge = charge;
  176.         }
  177.  
  178.         public override void ShowSkillInfo()
  179.         {
  180.             Console.WriteLine($"Боец {Name} | Способность - после {_maxCharge} ударов заряжает посох и наносит повышенный урон ");
  181.         }
  182.  
  183.         public override int CastSkill()
  184.         {
  185.             int damage = Damage;
  186.             int increaseDamage = 5;
  187.             _maxCharge--;
  188.  
  189.             if(_maxCharge == 0)
  190.             {
  191.                 Console.WriteLine($"{Name} - разрядил оружие({damage * increaseDamage} damage)");
  192.                 _maxCharge = 3;
  193.                 return damage * increaseDamage;
  194.             }
  195.  
  196.             return damage;
  197.         }
  198.     }
  199.  
  200.     class Assassin : Fighter
  201.     {
  202.         private Random kritChance = new Random();
  203.         public Assassin(string name, int health, int armor, int damage) : base(name, health, armor, damage) { }
  204.  
  205.         public override void ShowSkillInfo()
  206.         {
  207.             Console.WriteLine($"Боец - {Name} | Способность - пассивный шанс нанести повышенный урон");
  208.         }
  209.  
  210.         public override int CastSkill()
  211.         {
  212.             int damage;
  213.             int increaseDamgae = 3;
  214.  
  215.             damage = Damage;
  216.  
  217.             if(kritChance.Next(3) == 1)
  218.             {
  219.                 Console.WriteLine($"{Name} - Critical hit({damage * increaseDamgae} damage)");
  220.                 return damage * increaseDamgae;
  221.             }
  222.  
  223.             return damage;
  224.         }
  225.     }
  226.  
  227.     class Warrior : Fighter
  228.     {
  229.         private int _fullHealth;
  230.  
  231.         public Warrior(string name, int health, int armor, int damage) : base(name, health, armor, damage) { _fullHealth = health; }
  232.  
  233.         public override void ShowSkillInfo()
  234.         {
  235.             Console.WriteLine($"Боец - {Name} | Способность - при потере половины здоровья увеличивает броню и урон");
  236.         }
  237.  
  238.         public override int CastSkill()
  239.         {
  240.             int increaseDamage = 5;
  241.             int increaseArmor = 1;
  242.  
  243.             if (Health <= _fullHealth/2)
  244.             {
  245.                 Damage += increaseDamage;
  246.                 Armor += increaseArmor;
  247.                 Console.WriteLine($"{Name} - Damage UP, Armor UP");
  248.             }
  249.  
  250.             return Damage;
  251.         }
  252.     }
  253.  
  254.     class Necromant : Fighter
  255.     {
  256.         public Necromant(string name, int health, int armor, int damage) : base(name, health, armor, damage) { }
  257.  
  258.         public override void ShowSkillInfo()
  259.         {
  260.             Console.WriteLine($"Боец - {Name} | Способность - пассивный вампиризм");
  261.         }
  262.  
  263.         public override int CastSkill()
  264.         {
  265.             int healthStill = Damage / 3;
  266.  
  267.             Health += healthStill;
  268.  
  269.             return Damage;
  270.         }
  271.     }
  272.  
  273.     class Paladin : Fighter
  274.     {
  275.         public Paladin(string name, int health, int armor, int damage) : base(name, health, armor, damage) { }
  276.  
  277.         public override void ShowSkillInfo()
  278.         {
  279.             Console.WriteLine($"Боец - {Name} | Способность - восстанавливать здоровье");
  280.         }
  281.  
  282.         public override int CastSkill()
  283.         {
  284.             int increaseHealth = 10;
  285.  
  286.             Health += increaseHealth;
  287.  
  288.             return Damage;
  289.         }
  290.     }
  291. }
  292.  
Add Comment
Please, Sign In to add comment