我有一个必须实现播放器和模式的游戏项目。
Player类有两个子类HumanPlayer
和BotPlayer
,Mode类有两种模式:Easy模式和Hard模式。
这是我的班级图:
人类玩家和机器人将具有“初始化武器”功能。对于简易模式,人类玩家将拥有各种武器,而僵尸玩家只拥有有限数量的武器。因此,如果我像上图那样实现桥接模式,我怎么能在Easy模式下知道哪个抽象(播放器或机器人)实现“初始化武器”功能呢?
答案 0 :(得分:0)
在开始游戏之前将武器传递给玩家。因此,玩家对象不知道它拥有哪种武器,而是知道武器的游戏(或游戏模式)。
有很多方法可以这样做,但作为一个例子:
public abstract class Mode {
public abstract Collection<Weapon> getHumanWeapons();
public abstract CollectionWeapon> getBotWeapons();
}
public class Easy extends Mode{
public Collection<Weapon> getHumanWeapons() {
return Collections.singleton(new NukeBlaster()));
}
public Collection<Weapon> getBotWeapons() {
return Collections.singleton(new Flower()));
}
}
public HumanPlayer(Mode mode) {
this.weapons = mode.getHumanWeapons();
}
public BotPlayer(Mode mode) {
this.weapons = mode.getBotWeapons();
}
或者......让Mode
返回HumanConfiguration
和BotConfiguration
,然后提供武器和行为。这将使Player
类成为一个构造函数,并确保机器人不会秘密窃取人类武器。
public abstract class Mode {
public abstract Configuraton getHumanConfiguration();
public abstract Configuraton getBotConfiguration();
}
public class Configuration {
public Collection<Weapon> getWeapons() { ... }
}
public class Player {
private Collection<Weapon> weapons;
public Player(Configuration configuration) {
this.weapons = configuration.getWeapons();
}
}