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