0

我正在尝试使用移动方法来移动单位,但我被卡住了。假设我在位置(3,1)有一个单位,我想将它移动到位置(4,1)。如何实现该方法?到目前为止,我有下面的代码。(我有一个代表单位的类,但我希望 moveUnit 在另一个类中(它现在在哪里),它处理这些东西)。谢谢

public boolean moveUnit( Position from, Position to ) {

    return false;
}

关于 Position 方法,它的使用如下所示,其中我有一个使用 JUnit 的带有测试用例的类

@Test
public void shouldBePossibleToMoveUnits() {
    Unit u = game.getUnitAt(new Position(2, 0));

    boolean moved = game.moveUnit(new Position(2, 0), new Position(3, 0));
    assertTrue("It should be possible to move units", moved);
    assertNotNull("There should be a unit at 3, 0", u);
}

- - - - - - - - - - - - - - - - - - -更新 - - - - - - ------------------

我已经编写了这段代码来移动设备,但它不起作用。有人可以看到我做错了什么吗?

Unit unitFrom = ((UnitImpl) getUnitAt(from));

    if(unitFrom == null) { return false; }
    Unit unitTo = ((UnitImpl) getUnitAt(to));

    unitFrom = unitTo;
    unitFrom = null;

设备没有移动到新位置

4

2 回答 2

1

根据您的Unit课程的设置方式,您希望您的方法如下所示:

public boolean moveUnit(Unit unitToMove, Position moveTo) {
    unitToMove.setPosition(moveTo);
    return true;
}

这假设它有一个内部方法来通过一个对象Unit来跟踪它的位置。Position您想要移动Unit,因此您需要将其作为变量之一传递。

如果您希望Game该类在内部获取该单元,并让它在给定位置移动一个单元,请执行以下操作:

public boolean moveUnit(Position unitPosition, Position moveTo) {
    Unit unitToMove = getUnitAt(unitPosition);
    if (unitToMove == null) {
        //If no Unit exists at the given position, return false
        return false;
    }
    unitToMove.setPosition(moveTo);
    return true;
}
于 2013-11-06T19:06:34.507 回答
0

Lets say I have a unit at position(3,1), and I want to move it to position(4,1).

这意味着您希望在 (4,1) 处以该单位结束,而在 (3,1) 处没有单位。

如果该单元跟踪其位置,则更新该指针。如果位置跟踪其单位,则更新这两个指针。

于 2013-11-06T19:29:32.270 回答