gpt4 book ai didi

java - 允许单位使用设计模式在 Java 中攻击地面、空中或两者的能力的接口(interface)

转载 作者:行者123 更新时间:2023-11-29 08:59:46 26 4
gpt4 key购买 nike

我正在制作一个具有抽象 Fighter 类的文字游戏。在 Fighter 中,我有一个名为 protected boolean isGround 的变量。然后我有 2 个扩展 Fighter 的抽象类,称为 AirFighter 和 GroundFighter,它们基本上将 isGround 设置为 True 或 False,具体取决于它们是否是地面单位。

然后我想设置游戏,以便在我的战斗阶段游戏检查玩家 1 的速度是否比玩家 2 快,然后根据谁更快来执行 p1.attack(p2),然后打印出来那场战斗的统计数据,比如每个玩家的剩余生命值或类似的东西。

我想要一些 airFighters 攻击空中,或者攻击空中和地面的方法,我想要一些 groundFighters 只攻击地面,或者地面和空中。在保持松散耦合的情况下,我将如何着手做这件事?它适用于设计模式的类(class),这让我很沮丧。有没有设计模式可以帮助我解决这个问题?

想想星际争霸游戏,这基本上就是我的游戏所模仿的,某些单位(例如海军陆战队)可以攻击地面和空中,一些空中单位只能攻击空中,有些则可以两者兼顾。我希望能够在没有一些讨厌的 if else 检查语句的情况下做到这一点。

最佳答案

一个简单的方法是在基础 Fighter 中有一个方法可以用来检查 Fighter 是否可以攻击另一个:

public abstract class Fighter {
public abstract boolean isGround ();
public abstract boolean canAttack (Fighter target);
}

然后子类可以覆盖 canAttack 并做出适当的决定。例如:

public class SurfaceToAirLauncher extends Fighter {
@Override public boolean isGround () {
// missile launcher is on the ground
return true;
}
@Override public boolean canAttack (Fighter target) {
// we can only attack air targets
return (target != null && !target.isGround());
}
}

public class Dragon extends Fighter {
@Override public boolean isGround () {
// dragons are in the air
return false;
}
@Override public boolean canAttack (Fighter target) {
// dragons can attack every target.
return (target != null);
}
}

public class Knight extends Fighter {
@Override public boolean isGround () {
// knights are on the ground
return true;
}
@Override public boolean canAttack (Fighter target) {
// knights can only attack dragons
return (target != null && target instanceof Dragon);
}
}

如果您知道 target 永远不会是 null,您可以删除对 null 的检查。为了完整起见,我将其包括在内。

关于java - 允许单位使用设计模式在 Java 中攻击地面、空中或两者的能力的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18200459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com