我正在研究Java中的简单2D游戏。有2个机器人:他们可以移动,战斗等。这些类实现相同的界面。
问题:
如何在运行时实例化机器人?我的意思是,当程序运行时,要求用户加载类,之后使用他们的方法(按1得到你自己的盾牌点......)就像角色扮演游戏一样..我试着用反射但是它没有'在界面上工作。
我的反思方法:
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();
}
}
这是获取 enemyPosition ()的好方法吗?
机器人界面:
public interface Robot {
public String getPosition();
public String getEnemyPosition();
public String getArenaSize();
public int getShield();
}
Robot1类:
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] ---&gt; [3] [ 2])如何将Robot界面和Arena相互连接?
在哪里存放他们的职位(在具体课程或其他地方)?聚合是最好的方法吗?如何避免紧耦合?
答案 0 :(得分:0)
public Robot loadByClassName(String classname) {
Class<?> loadClass;
try {
loadClass = Class.forName(classname);
return (Robot) loadClass.getConstructor().newInstance();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
不是真的,也许你可以用x和y属性创建一个类位置
我认为竞技场对象应该容纳竞技场中的物体(你的机器人)
具有关键位置的竞技场中的地图(见2.)和价值机器人将是我的方法