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];
}
}
}