Error: ArrayIndexOutOfBoundsException: -1

I am trying to code a snake game. This isn’t the finished version, but I am already cluless.
When I try to run it this error appears:

ArrayIndexOutOfBoundsException: -1
Could not run the sketch (Target VM failed to initialize).
For more information, read revisions.txt and Help ? Troubleshooting.

and it marks the like I've written bold.

Help would be appreciated. :heart:

int spielfeldgroesse = 30;
int spielfeldskalierung = 20;
int maximaleSpielerGroesse = 100;
int spielerGroesse;
int positionsGroesse =2;
int leeresFeldGroesse = 5;
int spielerFeldGroesse = 20;
int beuteFeldGroesse = 20;
float maximaleTickzeit = 0.1;
float tickzeit = 0;

int[][] spielfeld;
int[][] spielerPosition;
int[] beutePosition;


String richtung;
String letzteRichtung;


void setup(){
  size(600, 600);
  rectMode(CENTER);
  spielfeld = new int[spielfeldgroesse ][spielfeldgroesse ];
  spielerPosition = new int[maximaleSpielerGroesse][positionsGroesse];
  beutePosition = new int[positionsGroesse];
  
  resetGame();
}

void draw(){
  background(0);
  
  tickzeit = tickzeit + 1/frameRate;
  if(tickzeit > maximaleTickzeit) {
   bewegeSpieler();
   testeSpielerKolision();
   setzteSpielfeldZurueck();
   zeichneSpielfigurenAufSpielfeld();
   tickzeit = 0;
  }
  
  zeichneSpielfeld();
  setzteSpielerEingabe();
  
}

void setzteSpielfeldZurueck(){
  for(int i = 0; i < spielfeldgroesse; i++){
    for(int j = 0; j < spielfeldgroesse; j++){
    spielfeld[i][j] = 0;
  }
    
  }
  
}

void resetGame(){
  setzteZufaelligBeutePosition();
  
  //setzte Spieler
  spielerPosition[0][0] = spielfeldgroesse / 2;
  spielerPosition[0][1] = spielfeldgroesse / 2;
  for(int p = 1; p < maximaleSpielerGroesse; p++) {
    spielerPosition[p][0] = 0;
    spielerPosition[p][0] = 0;    
  }
  spielerGroesse = 1;
  
  richtung = "up";
  letzteRichtung = "up";

}

void bewegeSpieler(){
  int oldPositionx = spielerPosition[0][0];
  int oldPositiony = spielerPosition[0][1];
  
  if(richtung.equals("up")){
    spielerPosition[0][1] = spielerPosition[0][1] - 1;
    letzteRichtung = "up";
  }else if(richtung.equals("left")){
    spielerPosition[0][0] = spielerPosition[0][0] - 1;
    letzteRichtung = "left";
  }else if(richtung.equals("down")){
    spielerPosition[0][1] = spielerPosition[0][1] - 1;
    letzteRichtung = "down";    
  }else if(richtung.equals("right")){
    spielerPosition[0][0] = spielerPosition[0][0] - 1;
    letzteRichtung = "right";    
  }
  
  //schiebe alle anderen Punte nach
  for(int p = 1; p < spielerGroesse; p++) {
    int tempx = spielerPosition[p][0];
    int tempy = spielerPosition[p][1];
    
    spielerPosition[p][0] = oldPositionx;
    spielerPosition[p][1] = oldPositiony;
    
    oldPositionx = tempx;
    oldPositiony = tempy;
  }
  
}

void zeichneSpielfigurenAufSpielfeld(){
  //zeichne Spieler
  for(int p = 0; p < maximaleSpielerGroesse; p++){
    if(spielerPosition[p][0] != 0 && spielerPosition[p][1] != 0){
      **spielfeld[spielerPosition[p][0]][spielerPosition[p][1]] = 1;**
    }
  }
  // setzte Beute
  spielfeld[beutePosition[0]][beutePosition[1]] = 2;
  
}

void zeichneSpielfeld(){
    for(int i = 1; i < spielfeldgroesse; i++){
    for(int j = 1; j < spielfeldgroesse; j++){
      if(spielfeld[i][j] == 0) {
        ellipse(spielfeldskalierung * i, spielfeldskalierung * j, leeresFeldGroesse, leeresFeldGroesse); 
      }
       if(spielfeld[i][j] == 1) {
        ellipse(spielfeldskalierung * i, spielfeldskalierung * j, spielerFeldGroesse, spielerFeldGroesse); 
    
    }
    if(spielfeld[i][j] == 2) {
        rect(spielfeldskalierung * i, spielfeldskalierung * j, beuteFeldGroesse, beuteFeldGroesse); 
    
    }
    
   }
  }  
}

void setzteZufaelligBeutePosition() {
  beutePosition[0] = floor(random(1, spielfeldgroesse));
  beutePosition[1] = floor(random(1, spielfeldgroesse));
  
}

void setzteSpielerEingabe() {
  if(keyPressed){
    if(keyCode == UP && letzteRichtung != "down") {
      richtung = "up";
    }    
    if(keyCode == LEFT && letzteRichtung != "right") {
      richtung = "left";
    }    
    if(keyCode == DOWN && letzteRichtung != "up") {
      richtung = "down";
    }    
    if(keyCode == RIGHT && letzteRichtung != "left") {
      richtung = "right";
    }    
  }
  
}

void testeSpielerKolision() {
  
}
1 Like

Replace != by >=

:wink:

Welcome to the forum!

1 Like

Thank you!
:heart_eyes:

1 Like