在2d阵列中交换对象

时间:2017-03-20 12:34:08

标签: java

我在JavaFX中创建了一个Pacman克隆,但实际上这个语言根本不重要,它更多的是它背后的逻辑,我无法弄清楚。 / p>

我已经解决了问题的video,它很好地说明了我面临的错误。

我希望玩家可以吃一种食物(例如食物从食物中被删除[] []并且分数增加)。这有效。但是我也希望Ghosts 能够吃掉食物,但是我的抽奖都是基于[] [],所以我不能有鬼和食物在同一个地方。

不确定应该怎么做,我的想法是我可以创建一个holdObject变量,其中"持有"然后将食物对象放回到Ghost进一步移动时它来自的地方。

我的GameView有两个重要的领域:

private static GameObject board[][];
private static LinkedHashSet<Moveable> moveableLinkedHashSet;

这两个变量都被其他方法填充,这些工作正常。 以下代码块似乎包含该问题,但它也可能必须在#89行中处理(参见下面的链接)。

private void executeMoveWithPosition(Position positionDest) {

    GameObject ghost = this;

    // TODO: Fix holding object. Currently it's a mess:
    // TODO: Two consecutive foods won't be handled correctly, food gets set to wrong position at the beginning
    // holdingObject gets set to the current position - possibly null, that's ok
    LevelManager.getBoard()[position.getX()][position.getY()] = holdingObject;

    // ghost gets inserted at the new position
    LevelManager.getBoard()[positionDest.getX()][positionDest.getY()] = ghost;

    // holdingObject gets emptied
    holdingObject = null;

    // actually move the ghost
    position.setX(positionDest.getX());
    position.setY(positionDest.getY());
}

Ghost.java,我从中删除了方法,以及哪些条款对此无关紧要。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您根本不知道应该用什么数据结构来代表您的游戏板,包括玩家,敌人和物品(食物)。

如果不详细调查您的代码,我建议......

  • 您创建了一个Tile课程。 board可以由那些组成。它可以保存关于它是否可以遍历的信息,可以还保存放在它上面的项目。
  • 你的敌人已经有一个持有Ghost的班级(position),所以请确保你有一个enemies的集合,你可以迭代渲染和游戏逻辑。这样,您就不需要board来跟踪这些内容。
  • 可选地,拥有一个Item(或Food)类,你可以像敌人一样处理:他们保持自己的位置并将所有这些保留在一个集合中。同样,Tiles不再需要跟踪这些了。<​​/ li>

为了确定Ghost上是否有FoodTile,您需要迭代所有这些并检查其位置。对于这么小而简单的游戏,这应该没问题。

当然,还有其他解决方案,最终只有你能知道哪一个适合你的项目。

编辑:事实证明,在交换了一些评论之后,解决手头的问题就像而不是Ghost放入board数组,因为它们确实占据了自己的位置。以上涵盖的内容更为笼统和广泛,并且有望应用于具有类似问题的其他人。