Как я могу убедиться, что методы стрельбы и перезагрузки для каждого оружия - те, которые используются?Т.е. как сохранить выбранное оружие как переменную, чтобы я мог запустить что-то вроде currentWeapon.Shoot
, что гарантирует, что это оружие выбрано в настоящее время, вместо метода pistol.Shoot()
?
Inваш оператор switch назначает оружие, которое вы создали, переменной, представляющей любое оружие.Эта переменная должна относиться к типу вашего интерфейса.
Итак, шаг 1, создайте интерфейс для всего вашего оружия (оружия).Все они работают одинаково, но дифференцируются при увольнении.Это полиморфизм , который доступен вам через интерфейс или абстрактный класс .
interface IWeapon
{
void Shoot();
void Reload();
bool HasAmmo { get; }
void MakeClickSound();
}
Затем различные классы (реализациядо вас):
class BasicPistol : IWeapon { ... }
class Glock18: IWeapon { ... }
class GiganticLaserBlaster: IWeapon { ... }
Затем в коде "action" объявите переменную, которая относится к типу вашего интерфейса.Это выбранное оружие.
IWeapon chosenWeapon;
Назначьте эту переменную в вашем выражении switch
(хотя фабрика была бы лучше здесь, как говорят некоторые другие ответы).
switch (choice)
{
case 1:
chosenWeapon = new Glock18() ;
break;
case 2:
chosenWeapon = new GiganticLaserBlaster() ;
break;
...
default:
chosenWeapon = new BasicPistol();
break
}
Тогда делай что хочешь со своим оружием.Вы знаете, что это правильный метод, потому что у вас есть правильное оружие.
while (true)
{
ConsoleKeyInfo input = Console.ReadKey(true);
if (char.IsWhiteSpace(input.KeyChar))
{
if (chosenWeapon.HasAmmo)
chosenWeapon.Shoot();
else
chosenWeapon.MakeClickSound();
}
else if (input.KeyChar == 'r')
chosenWeapon.Reload();
}