Hi,
ich baue gerade Snake in Java und ich verstehe einfach nicht wieso es nicht funktioniert^^ Hab nur wenig Ahnung von Java und hab mich über die Nacht ein wenig eingelesen und angefangen.
Das Problem scheint irgendwie das Erweitern des Vektors zu sein...
Die Snake erstelle ich zu beginn mit:
Code
public void createSnake(Integer length, Integer x, Integer y)
{
for (int i = 0; i <= length; i++)
{
if (i == 0)
{
this.snake.addElement(new SnakeObj(x, y, 1));
}
else
{
this.snake.addElement(new SnakeObj(x, y, 0));
}
SnakeObj lastObj = (SnakeObj) snake.lastElement();
lastObj.setVisible(true);
}
}
Alles anzeigen
Das funktioniert auch wunderbar.
und wenn Sie was aufnimmt dann erweitere Ich Sie mit:
Code
private void grow()
{
SnakeObj snakeLast = (SnakeObj) this.snake.lastElement();
System.out.println("[snake_grow] " + snakeLast.posX + " : " + snakeLast.posY);
this.snake.addElement(new SnakeObj(snakeLast.posX, snakeLast.posY, 0));
SnakeObj snakeNew = (SnakeObj) this.snake.lastElement();
snakeNew.setVisible(true);
}
das macht er auch noch, aber wenn es dann in die Funktion zur Bewegung geht:
Code
public void run()
{
System.out.println("[snake_run()] d:" + this.runDirection);
int oldPosX = -1;
int oldPosY = -1;
int newPosX = -1;
int newPosY = -1;
Iterator it = this.snake.iterator();
while (it.hasNext())
{
System.out.println("1");
SnakeObj loopObj = (SnakeObj) it.next();
System.out.println("2");
if (oldPosX == -1)
{
if (runDirection == "north")
{
loopObj.setLocation(loopObj.posX, loopObj.posY - Game.snakeSize);
}
else if (runDirection == "east")
{
loopObj.setLocation(loopObj.posX + Game.snakeSize, loopObj.posY);
}
else if (runDirection == "south")
{
loopObj.setLocation(loopObj.posX, loopObj.posY + Game.snakeSize);
}
else if (runDirection == "west")
{
loopObj.setLocation(loopObj.posX - Game.snakeSize, loopObj.posY);
}
this.searchFood();
}
else
{
newPosX = loopObj.posX;
newPosY = loopObj.posY;
loopObj.setLocation(oldPosX, oldPosY);
}
if (oldPosX == -1)
{
oldPosX = loopObj.posX;
oldPosY = loopObj.posY;
}
else
{
oldPosX = newPosX;
oldPosY = newPosY;
}
}
}
Alles anzeigen
Dann schmiert das Programm zwischen
System.out.println("1");
und
System.out.println("2");
ab mit der Fehlermeldung:
Code
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at Snake.run(Snake.java:55)
at Game.gameStart(Game.java:38)
at Game.<init>(Game.java:26)
at FormMenu.FormMenuGo(FormMenu.java:40)
at Main.StartMenu(Main.java:31)
at Main.main(Main.java:18)
Hoffe das mir jemand helfen kann wie ich hier weiterkomme