嗨,我是一名学生,在我的课堂上,我们正在编写一个蛇游戏,现在的问题学家认为,有时候吃掉苹果的游戏会冻结,我们发现这可能是由两个苹果产卵引起的处于同一位置,但我们不知道如何避免这种情况。苹果是在数组列表中生成的,所以我认为我们需要在数组列表中定位元素,以说不允许Programm在此处生成它们,并且需要寻找新的位置,直到找到一个没有现有苹果的苹果。
我在Internet上搜索了是否可以解决我的问题,但我认为这有点具体,或者我走的路错误,有些人会发现我找不到的。
如果您需要更多详细信息,请给我留言。我很高兴能帮助您:D。
private void createApples(int max) {
int loop = 0;
int appleX;
int appleY;
Element apple;
boolean exists;
int index;
for (loop = 0; loop < max; loop++) {
exists = false;
do {
appleX =
new Random().nextInt(bounds.width / SNAKE_SIZE) *
SNAKE_SIZE + SNAKE_SIZE / 2;
appleY =
new Random().nextInt(bounds.height / SNAKE_SIZE) *
SNAKE_SIZE + SNAKE_SIZE / 2;
index = 0;
while (index < apples.size() && !exists) {
exists = apples.get(index).equal(appleX, appleY);
index++;
}
if (!exists)
exists = player.contains(appleX, appleY);
exists = player2.contains(appleX, appleY);
}
while (exists);
apple = new Element(appleX, appleY, SNAKE_SIZE, Color.white, bounds);
apples.add(apple);
}
}
答案 0 :(得分:2)
无需详细阅读代码:
if (!exists)
exists = player.contains(appleX, appleY);
exists = player2.contains(appleX, appleY);
没有花括号,您只是将条件应用于此处的第一行。这是您的计算机将看到的:
if (!exists){
exists = player.contains(appleX, appleY);
}
exists = player2.contains(appleX, appleY);
这意味着,无论您已经为exists
计算了什么,它都会被player2
的正确值覆盖。
但是只要player1
或player2
都是真实的,您的存在就应该真实。
您可以改用以下内容:
exists |= player.contains(appleX, appleY);
exists |= player2.contains(appleX, appleY);
(简写为)
if (!exists)
exists = player.contains(appleX, appleY);
if (!exists)
exists = player2.contains(appleX, appleY);
您可以添加信息,apples
是什么(类型)以及如何实现equals / hashcode
上的Element
方法吗?
while (index < apples.size() && !exists) {
exists = apples.get(index).equal(appleX, appleY);
index++;
}
(我想您是自欺欺人的,因为您也称其为equal
而不是equals
)