我在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,我从中删除了方法,以及哪些条款对此无关紧要。
答案 0 :(得分:0)
如果我理解正确,您根本不知道应该用什么数据结构来代表您的游戏板,包括玩家,敌人和物品(食物)。
如果不详细调查您的代码,我建议......
Tile
课程。 board
可以由那些组成。它可以保存关于它是否可以遍历的信息,可以还保存放在它上面的项目。Ghost
的班级(position
),所以请确保你有一个enemies
的集合,你可以迭代渲染和游戏逻辑。这样,您就不需要board
来跟踪这些内容。Item
(或Food
)类,你可以像敌人一样处理:他们保持自己的位置并将所有这些保留在一个集合中。同样,Tiles不再需要跟踪这些了。</ li>
为了确定Ghost
上是否有Food
或Tile
,您需要迭代所有这些并检查其位置。对于这么小而简单的游戏,这应该没问题。
当然,还有其他解决方案,最终只有你能知道哪一个适合你的项目。
编辑:事实证明,在交换了一些评论之后,解决手头的问题就像而不是将Ghost
放入board
数组,因为它们确实占据了自己的位置。以上涵盖的内容更为笼统和广泛,并且有望应用于具有类似问题的其他人。