我正在用Java开发类似Pacman的游戏,而我目前正遇到这些我不喜欢的代码味道。
让我解释一下我的想法:我的游戏是建立在MVC架构上的。在视图模块上,我查找模型上的每个通电并将其添加到要在GUI上绘制的元素列表中。问题是我有3种类型的加电接口使用界面,因此,当我添加加电接口时,我需要检查它们的类型,然后添加对应的视图。让我显示一些代码,这样我可以更清楚:
for (Powerup powerup : level.getPowerups()) {
if (powerup instanceof Invincibility) elements.add(new InvincibilityView(powerup.getPosition()));
if (powerup instanceof Freeze) elements.add(new FreezeView(powerup.getPosition()));
if (powerup instanceof Fright) elements.add(new FrightView(powerup.getPosition()));
}
第二种气味与鬼魂有关,我的游戏具有状态模式,如果状态发生变化,则可能会改变鬼魂的颜色。例如,如果状态为Frightened
,我希望鬼魂为橙色,如果状态为Frozen
,我希望鬼魂为蓝色,等等。
因此,在创建Ghost视图时,我通过参数传递状态,并检查(再次与instanceof
一起)当前处于什么状态。让我显示更多代码:
public void draw(graphics) {
String color = "#FF0000";
if (state instanceof Invincible) color = "#585858";
if (state instanceof Frozen) color = "#00FFFF";
if (state instanceof Frightened) color = "#FF7F50";
// draw ghost
}
我的问题是如何避免在不更改模型模块的情况下使用instanceof
。
保持安全!