我想做的是在一个snakepart列表为空时结束游戏。 此方法从列表中删除一个对象:
public void diet() {
parts.remove(parts.get(parts.size()-1));
}
此方法应该检查我的蛇形列表是否为空?
public boolean checkStarved() {
int len = parts.size();
SnakePart head = parts.get(0);
for(int i = 1; i < len; i++) {
SnakePart part = parts.get(i);
if(parts.isEmpty())
return true;
}
return false;
}
虽然它没有。 我在更新类期间返回World类中的布尔值,如下所示:
if(snake.checkStarved()){
gameOver = true;
}
snakepart类看起来像这样:
public class SnakePart {
public int x, y;
public SnakePart(int x, int y) {
this.x = x;
this.y = y;
}
}
这是基本的Snake类:
public Snake() {
direction = UP;
parts.add(new SnakePart(5, 6));
parts.add(new SnakePart(5, 7));
parts.add(new SnakePart(5, 8));
}
@Override
public void pause() {
if(state == GameState.Running)
state = GameState.Paused;
if(world.gameOver) {
Settings.addScore(world.score);
Settings.save(game.getFileIO());
}
}
07-08 20:39:50.341: E/AndroidRuntime(2957): FATAL EXCEPTION: Thread-4575
07-08 20:39:50.341:E / AndroidRuntime(2957):进程:com.badlogic.androidgames.mrnom,PID:2957 07-08 20:39:50.341:E / AndroidRuntime(2957):java.lang.IndexOutOfBoundsException:索引0无效,大小为0 07-08 20:39:50.341:E / AndroidRuntime(2957):at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 07-08 20:39:50.341:E / AndroidRuntime(2957):at java.util.ArrayList.get(ArrayList.java:308) 07-08 20:39:50.341:E / AndroidRuntime(2957):at com.badlogic.androidgames.mrnom.GameScreen.drawWorld(GameScreen.java:147) 07-08 20:39:50.341:E / AndroidRuntime(2957):at com.badlogic.androidgames.mrnom.GameScreen.present(GameScreen.java:131) 07-08 20:39:50.341:E / AndroidRuntime(2957):at com.badlogic.androidgames.framework.impl.AndroidFastRenderView.run(AndroidFastRenderView.java:40) 07-08 20:39:50.341:E / AndroidRuntime(2957):at java.lang.Thread.run(Thread.java:841)
答案 0 :(得分:0)
变化:
public boolean checkStarved() {
int len = parts.size();
SnakePart head = parts.get(0);
for(int i = 1; i < len; i++) {
SnakePart part = parts.get(i);
if(parts.isEmpty())
return true;
}
return false;
}
到
public boolean checkStarved() {
return parts.isEmpty();
}
另外
parts.remove(parts.get(parts.size()-1));
可以缩减为
parts.remove(parts.size()-1);
答案 1 :(得分:0)
您是否尝试检查parts.isEmpty()或part.isEmpty()?我在for循环中注意到你得到了一部分然后从不使用变量。