Error code:: "exit status 1 a function-definition is not allowed here before '{' token"

ich versuche einen code für das spiel Snake zu programmieren und habe jetzt eine weile versucht alle angezeigten bugs zu fixen aber einen kann ich einfach nicht fixen. dieser bug wäre " a function-definition is not allowed here before '{' token ". falls ihr mir helfen könnt wäre das super (ignoreirt bitte dass fast alles mit platzhaltern gemacht ist, hab die hardware noch nicht und muss deshalb so arbeiten).

#include "LedControl.h"

//Schlange als Struktur deffinieren
typedef struct Snake Snake;
struct Snake {
  int head[2]; //x und y achse in der sich der Kopf bewegt
  int Body [40][2]; //Array der x und y achse accounted 
  int leng; // variable fuer die laenge der schlange
  int dir[2]; // die bewegungsrichtung der schlange
};

//Apfel als struktur deffinieren
typedef struct Apple Apple;
struct Apple{
  int xPos; // X Position des Apfels
  int yPos; // Y Position des Apfels
};




//Parameter der LED Matrix (wird deffiniert wenn wir die Matrix haben)
const int platzhalter1=0;
const int platzhalter2=0;
const int platzhalter3=0;
LedControl LedC = LedControl(platzhalter1, platzhalter2, platzhalter3, 1);




//Variablen des Joysticks und Arduino belegung
const int XAchse = A3;
const int YAchse = A4;


//Deffinition Reihen der Matrix
byte pic[8/*Reihenanzahl (Platzhalter)*/] {0,0,0,0,0,0,0,0}; //so viele nullen wie reihen (derzeit alles platzhalter)

//Spawnen der Snake
Snake snake = {{1,5},{{0,5}, {1,5}}, 2, {1,0}};

//Spawnen des Apples (random x und y koordinate innerhalb der border)
Apple apple = {(int)random(0,8),(int)random(0,8)};






void setup() {
  // put your setup code here, to run once:
  //Aktivierung der Snake
  LedC.shutdown(0,false);
  // Helligkeitseinstellungen
  LedC.setIntensity(0,8);
  // Zum clearen des Displays (die 8 steht fuer die boundaries und ist ein platzhalter)
  LedC.clearDisplay(0);

  //Set Joystick Pins as INPUTs
  pinMode(XAchse, INPUT);
  pinMode(YAchse, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  //Input kontrolle
  int XCheck = analogRead(XAchse);
  int YCheck = analogRead(YAchse);

   if(XCheck<100 && snake.dir[1]==0){
    snake.dir[0] = 0;
    snake.dir[1] = -1;
  }else if(XCheck >920 && snake.dir[1]==0){
    snake.dir[0] = 0;
    snake.dir[1] = 1;
  }else if(YCheck<100 && snake.dir[0]==0){
    snake.dir[0] = -1;
    snake.dir[1] = 0;
  }else if(YCheck >920 && snake.dir[0]==0){
    snake.dir[0] = 1;
    snake.dir[1] = 0;
  }


  void reset(){
  for(int j=0;j<8;j++){
    pic[j] = 0;
  }
}

  //Reset die Matrix
  void Update(){
    reset();

//Border Boundaries
  if(newHead[0]==8){
    newHead[0]=0;
  }else if(newHead[0]==-1){
    newHead[0] = 7;
  }else if(newHead[1]==8){
    newHead[1]=0;
  }else if(newHead[1]==-1){
    newHead[1]=7;
  }



  //Check ob die Schlange sich selbst trifft
   for(j=0;j<snake.leng;j++){
    if(snake.body[j][0] == newHead[0] && snake.body[j][1] == newHead[1]){
      //Spiel fuer 1 sekunde stoppen dann resetten
      delay(1000);
      snake = {{1,5},{{0,5}, {1,5}}, 2, {1,0}};//neue Snake generieren
      apple = {(int)random(0,8),(int)random(0,8)};//neuen Apple generieren
      return;
    }
  }



  //Abfrage ob der Apple gegessen wird
  if(newHead[0] == apple.xPos && newHead[1] ==apple.yPos){
    snake.leng = snake.leng+1;
    apple.xPos = (int)random(0,8);
    apple.yPos = (int)random(0,8);
  }else{
    removeFirst();//Array nach links verschieben
  }



  //Erweiterung der Snake
  snake.body[snake.leng-1][0]= newHead[0];
  snake.body[snake.leng-1][1]= newHead[1];
  
  snake.head[0] = newHead[0];
  snake.head[1] = newHead[1];


  //Display Update (Snake und Apple)
  for(j=0;j<snake.leng;j++){
    pic[snake.body[j][0]] |= 128 >> snake.body[j][1];
  }
  pic[apple.xPos] |= 128 >> apple.yPos;
 }


  void removeFirst(){
  for(j=1;j<snake.leng;j++){
    snake.body[j-1][0] = snake.body[j][0];
    snake.body[j-1][1] = snake.body[j][1];
  }
 }
}

Your loop function is missing a closing brace.

Dafür gibt es wohl eine schließende Klammer zuviel, ganz am Ende des Codes.

Da ist einiges falsch, weil nicht ordentlich formatiert. Es fehlten auch ein paar Variablendeklarationen in den Schleifen. Außerdem habe ich noch in der Funktion Update das newHead [2] Array hinzugefügt, weil die Variable zwar verwendet aber nicht deklariert wurde. Ob es so gewüscht/richtig ist, weiß ich nicht. Außerdem in der Strukturdefinition "Body" in Kleinschreibung geändert:

#include "LedControl.h"

//Schlange als Struktur deffinieren
typedef struct Snake Snake;
struct Snake {
  int head[2]; //x und y achse in der sich der Kopf bewegt
  int body [40][2]; //Array der x und y achse accounted
  int leng; // variable fuer die laenge der schlange
  int dir[2]; // die bewegungsrichtung der schlange
};

//Apfel als struktur deffinieren
typedef struct Apple Apple;
struct Apple {
  int xPos; // X Position des Apfels
  int yPos; // Y Position des Apfels
};

//Parameter der LED Matrix (wird deffiniert wenn wir die Matrix haben)
const int platzhalter1 = 0;
const int platzhalter2 = 0;
const int platzhalter3 = 0;
LedControl LedC = LedControl(platzhalter1, platzhalter2, platzhalter3, 1);

//Variablen des Joysticks und Arduino belegung
const int XAchse = A3;
const int YAchse = A4;

//Deffinition Reihen der Matrix
byte pic[8/*Reihenanzahl (Platzhalter)*/] {0, 0, 0, 0, 0, 0, 0, 0}; //so viele nullen wie reihen (derzeit alles platzhalter)

//Spawnen der Snake
Snake snake = {{1, 5}, {{0, 5}, {1, 5}}, 2, {1, 0}};

//Spawnen des Apples (random x und y koordinate innerhalb der border)
Apple apple = {(int)random(0, 8), (int)random(0, 8)};

void setup() {
  // put your setup code here, to run once:
  //Aktivierung der Snake
  LedC.shutdown(0, false);
  // Helligkeitseinstellungen
  LedC.setIntensity(0, 8);
  // Zum clearen des Displays (die 8 steht fuer die boundaries und ist ein platzhalter)
  LedC.clearDisplay(0);

  //Set Joystick Pins as INPUTs
  pinMode(XAchse, INPUT);
  pinMode(YAchse, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  //Input kontrolle
  int XCheck = analogRead(XAchse);
  int YCheck = analogRead(YAchse);

  if (XCheck < 100 && snake.dir[1] == 0) {
    snake.dir[0] = 0;
    snake.dir[1] = -1;
  } else if (XCheck > 920 && snake.dir[1] == 0) {
    snake.dir[0] = 0;
    snake.dir[1] = 1;
  } else if (YCheck < 100 && snake.dir[0] == 0) {
    snake.dir[0] = -1;
    snake.dir[1] = 0;
  } else if (YCheck > 920 && snake.dir[0] == 0) {
    snake.dir[0] = 1;
    snake.dir[1] = 0;
  }
}

void reset() {
  for (int j = 0; j < 8; j++) {
    pic[j] = 0;
  }
}

//Reset die Matrix
void Update() {
  uint8_t newHead[2];
  reset();

  //Border Boundaries
  if (newHead[0] == 8) {
    newHead[0] = 0;
  } else if (newHead[0] == -1) {
    newHead[0] = 7;
  } else if (newHead[1] == 8) {
    newHead[1] = 0;
  } else if (newHead[1] == -1) {
    newHead[1] = 7;
  }

  //Check ob die Schlange sich selbst trifft
  for (uint8_t j = 0; j < snake.leng; j++) {
    if (snake.body[j][0] == newHead[0] && snake.body[j][1] == newHead[1]) {
      //Spiel fuer 1 sekunde stoppen dann resetten
      delay(1000);
      snake = {{1, 5}, {{0, 5}, {1, 5}}, 2, {1, 0}}; //neue Snake generieren
      apple = {(int)random(0, 8), (int)random(0, 8)}; //neuen Apple generieren
      return;
    }
  }



  //Abfrage ob der Apple gegessen wird
  if (newHead[0] == apple.xPos && newHead[1] == apple.yPos) {
    snake.leng = snake.leng + 1;
    apple.xPos = (int)random(0, 8);
    apple.yPos = (int)random(0, 8);
  } else {
    removeFirst();//Array nach links verschieben
  }



  //Erweiterung der Snake
  snake.body[snake.leng - 1][0] = newHead[0];
  snake.body[snake.leng - 1][1] = newHead[1];

  snake.head[0] = newHead[0];
  snake.head[1] = newHead[1];


  //Display Update (Snake und Apple)
  for (uint8_t j = 0; j < snake.leng; j++) {
    pic[snake.body[j][0]] |= 128 >> snake.body[j][1];
  }
  pic[apple.xPos] |= 128 >> apple.yPos;
}


void removeFirst() {
  for (uint8_t j = 1; j < snake.leng; j++) {
    snake.body[j - 1][0] = snake.body[j][0];
    snake.body[j - 1][1] = snake.body[j][1];
  }
}

1 Like

In Zeile 83 fehlt ein } - und am Ende ist eine } zuviel.

Da ist noch mehr faul...

   for (j = 1; j < snake.leng; j++)

gleich 3x... :wink:

Und eine andere fehlt am Ende des loop();
Für mich ist diese Klammer nach unten gerutscht. Sie gehört eigentlich zum loop() in (Zeile 83);

Grüße Uwe

Für mich gilt die Regel:
C/C++ kann keine lokalen Funktionen.

Andere Sprachen können das.

Was manches Mal ganz praktisch ist, wenn man viele Variablen hat, z.B. in PL/SQL

Gruß Tommy

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.