Написать игру. Опишите классы (Мечник), (Лучник), (Маг), каждый из которых является экземпляром базового абстрактного класса - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день, привет всем! Помогите пожалуйста решить задание: Опишите классы "Swordsman" (Мечник), "Archer" (Лучник) и "Mage" (Маг), каждый из которых является экземпляром базового абстрактного класса "Unit" (штука, элемент) в компьютерной игре, и может атаковать, уклоняться от атак и умирать. Эти методы должны быть чистыми виртуальным функциями. В мечника 15 хит-поинтов (жизней), повреждения при атаке 5, шанс уклоняться 60%. Лучник: 12 hp, 4 dmg, 40% dodge Маг: 8 hp, 10 dmg, 30% dodge В main () создайте два массива (враждующие стороны) по три юнита в каждом, причем тип юнита (мечник, лучник или маг) имеет задаваться случайно, при заполнении этих массивов. То есть один раз запустив вашу программу, может создаться три лучники против мечника и двух магов, другой - лучник, мечник и маг против двух мечников и лучника и т.д. Далее в цикле земулюйте бой между ними, пока бойцы одной из сторон все не погибнут. В консоль при этом выводите сообщение кто кого атаковал, или удалась атака, сколько жизни осталось у жертвы или она погибла. Пусть бой происходит постепенно, по нажатии клавиши spacebar (пробела), чтобы мы могли наблюдать его атака за атакой. В конце боя объявите, какая команда победила (первая / вторая, синяя / красная, альянс / орки - как уже ваша фанатзия вам подскажет). Внимание! Реализуйте также возможность, чтобы каждый боец ​​(Воин, Лучник или Маг) выискивал среди врагов соперника своего типа и атаковал его. Скажем, если есть команды: A11 - M21 A12 - S22 S13 - A23 ... То А11 должен выбрать своей целью А23. Если врагов своего типа не найдено, пусть генерируется сообщение об ошибке и бойцы атакуют по старым правилам.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Game
{
    class Program
    {
        static void Main(string[] args)
        {
            Unit arrUnit = new Swordsman();
            arrUnit = new Archer(arrUnit);
 
            Console.WriteLine(arrUnit.getDescription() + "\nAttack = " + arrUnit.setAttack()
                + ". Defence = " + arrUnit.setDefence() + ". Hitpoints = " + arrUnit.setHitpoints());
            Console.WriteLine("\n..::VS::..\n");
            Unit merlin = new Mage();
            Console.WriteLine(merlin.getDescription() + "\nAttack = " + merlin.setAttack()
                + ". Defence = " + merlin.setDefence() + ". Hitpoints = " + merlin.setHitpoints());
        }
    }
 
    public abstract class Unit
    {
        public Swordsman[] SwordsmanArray;
        public string hero = "";
 
        public abstract int setAttack();
        public abstract int setDefence();
        public abstract int setHitpoints();
 
        internal string getDescription()
        {
            return hero;
        }

    }
 
    public class Swordsman : Unit
    {
        public Swordsman()
        {
            hero = "Ranger - critical hit range unit";
        }
 
        override public int setAttack() 
        {
            return 5;
        }
        override public int setDefence()
        {
            return 60;
        }
        override public int setHitpoints()
        {
            return 15;
        }
    }
 
    public class Archer : Unit
    {
        Unit charaster;
 
        public Archer(Unit charaster)
        {
            this.charaster = charaster;
            hero = "Archer - powerful then the bang";
        }
 
        public string getDescription()
        {
            return charaster.getDescription() + ", BowOfGod";
        }
 
        override public int setAttack()
        {
            return 14 + charaster.setAttack();
        }
        override public int setDefence()
        {
            return 40 + charaster.setDefence();
        }
        override public int setHitpoints()
        {
            return 12 + charaster.setHitpoints();
        }
    }
 
    public class Mage : Unit
    {
        public Mage()
        {
            hero = "Mage - powerfull spelcaster";
        }
 
        override public int setAttack()
        {
            return 8;
        }
        override public int setDefence()
        {
            return 30;
        }
        override public int setHitpoints()
        {
            return 10;
        }
    }

}

Решение задачи: «Написать игру. Опишите классы (Мечник), (Лучник), (Маг), каждый из которых является экземпляром базового абстрактного класса»

textual
Листинг программы
using System;
 
namespace ConsoleWars
{
    internal abstract class Unit
    {
        public int HitPoints { get; protected set; }
        public int Damage { get; protected set; }
        public double Evasion { get; protected set; }
        public bool Dead { get; protected set; }
        protected static readonly Random TeamRandom = new Random(); //Статический для того, чтобы на всю команду был один рандом
 
 
        protected abstract bool Evade();
        protected abstract void Die();
        public abstract bool Attacked(int damage);
        public abstract bool Attack(Unit[] enemies, out int i);
    }
 
    internal class Mage : Unit
    {
        private const int HP = 8;
        private const int DMG = 10;
        private const double EVA = 0.3;
        
 
        public Mage()
        {
            HitPoints = HP;
            Damage = DMG;
            Evasion = EVA;
        }
 
 
        public override bool Attack(Unit[] enemies, out int i)
        {
            i = 0;
            if (Dead) return false; //Если умерли, ничего не делаем
            foreach (var other in enemies) //Если есть враг нашего типа, то бьем его
            {
                i++;
                if (other is Mage && !other.Dead)
                    return other.Attacked(Damage);
            }
            do
            {
                i = TeamRandom.Next(enemies.Length);
            } while (!enemies[i].Dead);
            return enemies[i].Attacked(Damage); //Иначе бьем случайного врага
        }
 
        public override bool Attacked(int damage)
        {
            if (Dead || Evade())
                return false; //Если увернулись, то не деремся. Умерший считается всегда уворачивающимся
            HitPoints -= damage;
            if (HitPoints <= 0)
                Die();
            return true;
        }
 
        protected override bool Evade()
        {
            var x = TeamRandom.NextDouble();
            return x < Evasion;
        }
 
        protected override void Die()
        {
            Dead = true;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы