Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在二维阵列中交换对象_Java - Fatal编程技术网

Java 在二维阵列中交换对象

Java 在二维阵列中交换对象,java,Java,我正在用JavaFX创建一个Pacman克隆,但实际上语言应该一点也不重要,更多的是关于它背后的逻辑,我无法理解 我已经对这个问题做了一些分析,它很好地说明了我所面临的bug 我希望玩家可以吃一种食物(例如,食物从棋盘上删除[],分数增加)。这很有效。但是我也希望鬼魂不能吃这些食物,但是我的画都是基于棋盘上的[][],所以我不能在同一个地方有鬼魂和食物 我不知道该怎么做,我的想法是我可以创建一个holdingObject变量,它“保存”食物对象,然后当幽灵进一步移动时,它会被放回原来的位置 My

我正在用JavaFX创建一个Pacman克隆,但实际上语言应该一点也不重要,更多的是关于它背后的逻辑,我无法理解

我已经对这个问题做了一些分析,它很好地说明了我所面临的bug

我希望玩家可以吃一种食物(例如,食物从棋盘上删除[],分数增加)。这很有效。但是我也希望鬼魂不能吃这些食物,但是我的画都是基于棋盘上的[][],所以我不能在同一个地方有鬼魂和食物

我不知道该怎么做,我的想法是我可以创建一个holdingObject变量,它“保存”食物对象,然后当幽灵进一步移动时,它会被放回原来的位置

My GameView包含以下两个重要字段:

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

,我从中删除了与此无关的方法和if子句。

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

如果不详细研究您的代码,我建议

  • 您可以创建一个
    平铺
    类。
    板可以由这些组成。它可以保存是否可遍历的信息,还可以保存放置在其上的项
  • 你的敌人已经有了一个类(
    Ghost
    )来保持他们的
    位置,所以只要确保你有一个
    敌人的集合,你就可以迭代渲染和游戏逻辑。这样,您就不需要
    来跟踪它们本身
  • (可选)拥有一个
    物品
    (或
    食物
    )类,你可以像对待敌人一样处理它们:它们占据自己的位置,你可以将它们全部集中在一个集合中。同样,瓷砖也不需要再跟踪这些了
为了弄清楚
磁贴
上是否有
幽灵
食物
,您需要迭代所有这些并检查它们的位置。对于这样一个小而简单的关卡,这应该不是问题

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


编辑:在交换了一些评论之后,解决手头的问题就像不把
重影
放入
数组一样简单,因为它们会保持自己的位置。上述内容涵盖的范围更广,希望也适用于其他类似问题的人。

问题到底是什么-视频仅显示了一些块的移动,但您从未描述预期的行为(或调试向您显示的问题是什么)@UnholySheep woops,在中编辑。“我不能在同一个地方有鬼和食物“-我不明白。为什么不呢
Ghost
有一个
位置
成员,因此这些成员不需要放入
数组中。里面到底是什么?食物?然后。。。你该走了?@domdom当然可以!哦,老兄,我只是不需要把鬼魂放在黑板上,而是用布景。如果你愿意的话,在回答中加入同样的内容。我有点这样做了——甚至在你发表评论之前。有点复杂和宽泛,但基本上…:)
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());
}