Предположим, у нас есть игрок, который управляет символом с именем Player1. Чтобы включить переключение оружия во время работы, у меня есть следующий код:Вложенный шаблон разработки стратегии
public interface IWeapon
{
void Fire();
}
public class Player1Weapon1 : IWeapon
{
...
void Fire()
{
//do actions of Weapon1
}
...
}
public class Player1Weapon2 : IWeapon
{
...
void Fire()
{
//do actions of Weapon2
}
...
}
public class Player1
{
IWeapon weapon;
Player1Weapon1 w1;
Player1Weapon2 w2;
public Player1()
{
w1 = new Player1Weapon1(this);
w2 = new Player1Weapon2(this);
SetWeapon(w1);
}
void Update()
{
if(SWITCH_BTN_HELD)
{
if(weapon.equals(w1)) SetWeapon(w2);
if(weapon.equals(w2)) SetWeapon(w1);
}
if(FIRE_BTN_HELD)
weapon.Fire();
}
void SetWeapon(w)
{
weapon = w;
}
}
Это работает отлично.
Но теперь игрок может выбрать другой символ с именем Player2. Обратите внимание, что Weapon Player2 отличается от Player1. Таким образом, мы можем добавить классы, как это:
public class Player2Weapon1 : IWeapon
{
...
void Fire()
{
//do actions of Weapon1
}
...
}
public class Player2Weapon2 : IWeapon
{
...
void Fire()
{
//do actions of Weapon2
}
...
}
public class Player2
{
IWeapon weapon;
Player2Weapon1 w1;
Player2Weapon2 w2;
public Player2()
{
w1 = new Player2Weapon1(this);
w2 =new Player2Weapon2(this);
SetWeapon(w1);
}
void Update()
{
if(SWITCH_BTN_HELD)
{
if(weapon.equals(w1)) SetWeapon(w2);
if(weapon.equals(w2)) SetWeapon(w1);
}
if(FIRE_BTN_HELD)
weapon.Fire();
}
void SetWeapon(w)
{
weapon=w;
}
}
Он будет работать снова, но это очень плотно, если игрок хочет играть с Player3, я должен addmore классы для проекта.
Мне интересно, как сделать шаблон для стратегии пожирателей, как показано ниже:
interface IPlayer()
{
}
Я не знаю, какие методы будут размещены в Iplayer? Как создать вложенные шаблоны проектирования стратегии?
Я думаю, что ваши игроки не должны даже иметь "PlayerXWeapon", просто IEnumerable из IWeapons. –
Да, не называть предмет после игрока, который будет его использовать. Представьте себе, если ваша игра позволила одному игроку сбросить оружие, а другой игрок поднял его. Это было бы странно. Оружие может существовать независимо от человека, который мог бы его удерживать. – MickyD
@ MickyDuncan, да, но какое решение? –