Условие задачи:
Классификация бойцов:
Soldier –– стреляет из пистолета (Shoot from gun)
CoolerSoldier –– стреляет из пистолета и кидает гранату (Shoot from gun and throw a grenade)
ManInBlack –– стреляет из бластера (Shoot from blaster)
ManInBlackBoss –– стреляет из бластера и призывает армию инопланетян (Shoot from blaster and call an army of aliens)
Формат ввода
На вход подается одна строка, состоящая из двух слов: обращения к военному и реального звания военного.
Формат вывода
На выход подается строка –– действие военного. Если к военному обратились как к солдату (тип ссылки Soldier), то только CoolerSoldier должен вывести "Shoot from gun and throw a grenade", все остальные же должны вывести "Shoot from gun".
Если к бойцу обратились как к человеку в черном (тип ссылки ManInBlack), то ManInBlack должен вывести "Shoot from blaster", а ManInBlackBoss должен вывести "Shoot from blaster and call an army of aliens".
Примеры:
Soldier CoolerSoldier => Shoot from gun and throw a grenade
Soldier Soldier => Shoot from gun
Soldier ManInBlack => Shoot from gun
Soldier ManInBlackBoss => Shoot from gun
ManInBlack ManInBlack => Shoot from blaster
ManInBlack ManInBlackBoss => Shoot from blaster and call an army of aliens
Обращаю внимание на то, что изменять файл Program.cs запрещено!
Program.cs:
using System;
internal class Program
{
private static void Main(string[] args)
{
string[] info = Console.ReadLine().Split();
switch (info[0])
{
case "Soldier":
var soldier = info[1] switch
{
"Soldier" => new Soldier(),
"CoolerSoldier" => new CoolerSoldier(),
"ManInBlack" => new ManInBlack(),
"ManInBlackBoss" => new ManInBlackBoss(),
_ => throw new NotImplementedException()
};
Console.WriteLine(soldier.Attack());
break;
case "ManInBlack":
var manInBlack = info[1] switch
{
"ManInBlack" => new ManInBlack(),
"ManInBlackBoss" => new ManInBlackBoss(),
_ => throw new NotImplementedException()
};
Console.WriteLine(manInBlack.Attack());
break;
}
}
}
Army.cs (что я попробовал сделать):
internal class Soldier
{
public string Weapon { get; set; } = "gun";
public virtual string Attack() => "Shoot from " + Weapon;
}
internal sealed class CoolerSoldier : Soldier
{
public override string Attack()
=> base.Attack() + " and throw a grenade";
}
internal class ManInBlack : Soldier
{
public override string Attack() => base.Attack();
}
internal sealed class ManInBlackBoss : ManInBlack
{
internal ManInBlackBoss() => Weapon = "blaster";
public override string Attack()
=> base.Attack() + " and call an army of aliens";
}