Я работаю над простой 2D игрой на Java.Есть 2 робота: они могут двигаться, сражаться и т. Д. Эти классы реализуют один и тот же интерфейс.
Вопросы :
Как создать роботов ввремя выполнения?Я имею в виду, что когда программа запущена, попросите пользователя загрузить классы, после чего используйте их методы (нажмите 1, чтобы получить свои собственные очки защиты ...), как в ролевых играх ... Я пытался делать с Reflection, но это не так.t работать с интерфейсом.
Мой метод отражения:
public void invokeClassMethod(String classBinaryName, String methodName) {
try {
ClassLoader classLoader = this.getClass().getClassLoader();
Class<?> loadClass = classLoader.loadClass(classBinaryName);
System.out.println("Loaded class name: " + loadClass.getName());
Constructor<?> constructor = loadClass.getConstructor();
Object classObject = constructor.newInstance();
Method method = loadClass.getMethod(methodName);
System.out.println("Invoked method name: " + method.getName());
method.invoke(classObject);
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
Это хороший способ получить врага-положение ()?
Интерфейс робота:
public interface Robot {
public String getPosition();
public String getEnemyPosition();
public String getArenaSize();
public int getShield();
}
Класс робота 1:
public class Robot1 implements Robot {
private int xCurrent;
private int yCurrent;
private int shield;
private final int attack = 1;
Robot robot2;
public Robot1() {
}
public Robot1(int x, int y, int shield, Robot robot2) {
this.xCurrent = x;
this.yCurrent = y;
this.shield = shield;
this.robot2 = robot2;
}
@Override
public String getPosition() {
return "x: " + xCurrent + " y: " + yCurrent;
}
@Override
public String getEnemyPosition() {
return robot.getPosition();
}
@Override
public int getShield() {
return shield;
}
}
Кроме того, класс Arena хранит информацию игрового поля, такую как размер арены, печать и т. Д ... Если я хочу работать на этой арене (перемещение объектов робота [1] [1] ---> [3] [2]]) как связать интерфейс робота и Arena друг с другом?
Где хранить свои позиции (в конкретном классе или где-то еще)?Является ли агрегация лучшим способом? Как избежать сильной связи?