Game with Processing for the novice

hay, i have chosen to do a game wich takes the particularity of the Snake

i have a problem with my code, let exposed my problem:
i woud like doing an “if” for a loop to make sure that as soon as the snake recognizes the color of the wall the game is reset. i put my code under the topics, if anyerson have a solution i will take it.
thank’s

void drawNibbler() {
  for (int i = 0; i < nibblerSize; i++) {
    if (i%3 == 0) {//division euclidienne
      fill(color(0, 255, 0));
    }
    if (i%3 == 1) {
      fill(color(0, 0, 255));
    }
    if (i%3 == 2) {
      fill(color(255, 0, 255));
    }
    //for the snake
    int X = nibblersX[i];
    int Y = nibblersY[i];
    ellipse(X, Y, 25, 25);

    //for the apple
    int Xp = pommesX[i];
    int Yp = pommesY[i];
    ellipse(Xp, Yp, 30, 30);
    fill(0, 255, 0);
  }
}

void Deplacement (int t) {

  delay(120);//time for the move
  // on determine la position du serpent en fonction de la direction
  if (direction == 0) nibblersY[0] -= 30; // haut
  if (direction == 1) nibblersX[0] += 30; // droite
  if (direction == 2) nibblersY[0] += 30; // bas
  if (direction == 3) nibblersX[0] -= 30; // gauche
  for (int j = nibblerSize; j > 0; j--) {

    nibblersX[j] = nibblersX[j-1];
    nibblersY[j] = nibblersY[j-1];
  }

  // exit of the snake
  if ((nibblersX[0]<80)||(nibblersX[0]>920)||(nibblersY[0]<170)||(nibblersY[0]>970)) {

    text("perdu!", width/2, height/2);
    textSize(50);//taille du texte 
    nibblersX[0] = 500; //on repositionne le Nibbler au centre 
    nibblersY[0] = 500;
    nibblerSize = 3;  // on remet le Nibbler a sa taille initiale
    temps = t; // on remet le temps à 0
  }

  // if snake is on the red or of the white, the game is end
  myColors=get(nibblersX[0]+13, nibblersY[0]);//analyser le pixel devant l'ellipse
  if (myColors==color(255, 0, 0) ||myColors==color(255, 255, 255)) {
    println("Obstacle");
    nibblersX[0] = 500; //on repositionne le Nibbler au centre 
    nibblersY[0] = 500;
    nibblerSize = 3;  // on remet le Nibbler à sa taille initiale
    temps = t; // on remet le temps à 0
  }
  /*if (red(myColors)==255) {
   
   nibblersX[0] = 500; //on repositionne le Nibbler au centre 
   nibblersY[0] = 500;
   nibblerSize = 3;  // on remet le Nibbler à sa taille initiale
   temps = t; // on remet le temps à 0
   }
   */

  //if the snake touch an apple, he grows up
  for (int i=2; i>0; i--) {
    int Xp = pommesX[i];
    int Yp = pommesY[i];
    if (nibblersX[i]==Xp & nibblersY[i]==Yp) {
      nibblerSize ++;//une ellispe de plus
      score ++;  // un point de plus
      ellipse(random(Xp), random(Yp), 30, 30);
      fill(0, 255, 0);
    }
  }


  /*int Xp = pommesX[0];
   int Yp = pommesY[0];
   float d =dist(nibblersX[0], nibblersY[0], Xp, Yp);
   if (d<1) {
   nibblerSize=+1;//une ellispe de plus
   score ++;  // un point de plus
   ellipse(random(Xp), random(Yp), 30, 30);
   fill(0, 255, 0);
   }*/


  // score

  fill(0, 0, 255);  
  textAlign(LEFT);
  text("Score : ", width -250, 45);
  text(score, width -50, 45);
  textSize(50);//taille du texte
}








void keyPressed() {

 
  switch(keyCode) {
  case RIGHT:
    if (direction!=3) direction=1;
    break;

  case LEFT:
    if (direction!=1) direction=3;
    break;
  case UP:
    if (direction!=2) direction=0;
    break;
  case DOWN:
    if (direction!=0) direction=2;
    break;
  }
}

cannot run this sketch I get the following error.

Not expecting symbol 0x2013, which is EN DASH.

please post the entire sketch with all arrays and variables so we can run it

1 Like
import controlP5.*;//importation de la bibliothèque

ControlP5 cp5;
Button bouJouer;// importation d'un nouvel objet de type bouton
Button bouConsignes;//importation d'un nouvel objet de type bouton
Button bouAccueil;//importation d'un nouvel objet de type bouton
Button bouQuit;//importation d'un nouvel objet de type bouton

int page = 0 ; // Par défaut, page d'accueil

//création de tableau pour le parcours
color tabCou [] = new color[1000];
int tabAbs [] = new int [1000];
int tabOrd [] = new int [1000];
int k=0;//ajout d'une variable de type entier
int j=0;//ajout d'une variable de type entier


int myColors;
int nibblerSize = 3;  // la taille initial du Nibbler
int pommesSize = 2; //taille de la pomme
int nibblerX = 0;      // position sur l'axe des abscisses de la tete du nibbler
int nibblerY = 0;     // et sur l'axe des ordonnées
//création d'un tableau pour les deplacement et position du Nibbler et de la pomme
int []nibblersX; // Le Nibbler complet abscisse
int []nibblersY; // Le Nibbler complet ordonné
int []pommesX; // La pomme complet abscisse
int []pommesY; // La pomme complet ordonné


int score = 0;//ajout d'une variable de type entier pour la gestion du score
int i=10;//ajout d'une variable de type entier
int temps=150;//ajout d'une variable de type entier pour la gestion du temps
int direction=1;//ajout d'une variable de type entier pour la direction du Nibbler


PImage fondDuMenu;//Déclaratione d'une variable image de fond du menu
PImage fondDuJeux;//Déclaratione d'une variable image de fond du jeu
PImage imgs;//déclaration d'une variable image de fond de bouton
PImage Consignes;//déclaration d'une variable image de fond pour les consignes
PImage Nibler;////déclaration d'une variable de type image 

void setup() {
  size(1000, 1000);//taille de la fenêtre 
  noStroke();//absence de curseur

  // on charge l'image
  fondDuMenu=loadImage("Arcade .png");// Charge l'image dans le programme
  fondDuMenu.resize(width, height); // on retaille l'image 
  fondDuJeux=loadImage("arrièrePlan.png");//Charge l'image dans le programme
  fondDuJeux.resize(width, height); // on retaille l'image 

  imgs=loadImage("couleurVerte.png");// Charge l'image dans le programme
  Consignes=loadImage("Consignes.png");// Charge l'image dans le programme
  Consignes.resize(width, height); // on retaille l'image

  //position du Nibbler au début du jeu, placement au centre:
  nibblerX = 450; 
  nibblerY = 470;
  nibblersX = new int[100];
  nibblersY = new int[100];
  pommesX = new int[10];
  pommesY = new int[10];
  pommesX[0] = 400;
  pommesY[0] = 400;

  for (int i = 0; i < nibblerSize; i++) {
    nibblersY[i] = nibblerY;
  }
  nibblersX[0] = nibblerX;
  for (int i = 1; i < nibblerSize; i++) {
    nibblersX[i] = nibblersX[i-1]-30;
  }

  cp5=new ControlP5(this);//on ajoute un nouvel objet pour poucoir ajouter des boutons 

  bouJouer = cp5.addButton("JOUER")
    .setPosition(300, 400)
    .setSize(400, 50);

  bouConsignes = cp5.addButton("CONSIGNES")
    .setPosition(300, 500)
    .setSize(400, 50);

  bouAccueil = cp5.addButton("Accueil")
    .setPosition(100, 100)
    .setSize(200, 50);
}
void draw() {
  //gestion de la void draw pour chaque pages 

  if (page == 0) {
    pageAccueil() ;
  }

  if (page == 1) { 
    JOUER();

    drawNibbler();
    Deplacement(2);
    keyPressed();
    parcours();
    Quitter();
  }
  if (page == 2) { 
    CONSIGNES();
  }
}

void CONSIGNES() {
  image(Consignes, 0, 0);
  bouJouer.hide();//on cache le bouton "jouer"
  bouConsignes.hide();////on cache le bouton "consignes"
  page = 2;
}

void JOUER() {
  image(fondDuJeux, 0, 0); //alternative au background 
  stroke(153);

  bouJouer.hide();//on cache le bouton "jouer"
  bouConsignes.hide();//on cache le bouton "consignes"
  page = 1;
}

void drawNibbler() {//la couleur du Nibbler se modifie toute seule
  for (int i = 0; i < nibblerSize; i++) {
    if (i%3 == 0) {//division euclidienne
      fill(color(0, 255, 0));
    }
    if (i%3 == 1) {
      fill(color(0, 0, 255));
    }
    if (i%3 == 2) {
      fill(color(255, 0, 255));
    }
    //gestion de l'affichage du Nibbler 
    int X = nibblersX[i];
    int Y = nibblersY[i];
    ellipse(X, Y, 25, 25);

    //gestion de l'affichage de la pomme   
    int Xp = pommesX[i];
    int Yp = pommesY[i];
    ellipse(Xp, Yp, 30, 30);
    fill(0, 255, 0);
  }
}

void Deplacement (int t) {

  delay(120);//temps de déplacement de Nibbler

  // on determine la position du serpent en fonction de la direction
  if (direction == 0) nibblersY[0] -= 30; // haut
  if (direction == 1) nibblersX[0] += 30; // droite
  if (direction == 2) nibblersY[0] += 30; // bas
  if (direction == 3) nibblersX[0] -= 30; // gauche
  for (int j = nibblerSize; j > 0; j--) {

    nibblersX[j] = nibblersX[j-1];
    nibblersY[j] = nibblersY[j-1];
  }

  // si le Nibbler sort du cadre on perd.
  if ((nibblersX[0]<80)||(nibblersX[0]>920)||(nibblersY[0]<170)||(nibblersY[0]>970)) {

    text("perdu!", width/2, height/2);
    textSize(50);//taille du texte 
    nibblersX[0] = 500; //on repositionne le Nibbler au centre 
    nibblersY[0] = 500;
    nibblerSize = 3;  // on remet le Nibbler a sa taille initiale
    temps = t; // on remet le temps à 0
  }

  // Dès que le Nibbler rencontre une couleur rouge ou blanche c'est perdue
  myColors=get(nibblersX[0]+13, nibblersY[0]);//analyser le pixel devant l'ellipse
  if (myColors==color(255, 0, 0) ||myColors==color(255, 255, 255)) {
    println("Obstacle");
    nibblersX[0] = 500; //on repositionne le Nibbler au centre 
    nibblersY[0] = 500;
    nibblerSize = 3;  // on remet le Nibbler à sa taille initiale
    temps = t; // on remet le temps à 0
  }
  /*if (red(myColors)==255) {
   
   nibblersX[0] = 500; //on repositionne le Nibbler au centre 
   nibblersY[0] = 500;
   nibblerSize = 3;  // on remet le Nibbler à sa taille initiale
   temps = t; // on remet le temps à 0
   }
   */

  //si le nibller mange il gagne une ellipse donc grandit 
  for (int i=2; i>0; i--) {
    int Xp = pommesX[i];
    int Yp = pommesY[i];
    if (nibblersX[i]==Xp & nibblersY[i]==Yp) {
      nibblerSize ++;//une ellispe de plus
      score ++;  // un point de plus
      ellipse(random(Xp), random(Yp), 30, 30);
      fill(0, 255, 0);
    }
  }


  /*int Xp = pommesX[0];
   int Yp = pommesY[0];
   float d =dist(nibblersX[0], nibblersY[0], Xp, Yp);
   if (d<1) {
   nibblerSize=+1;//une ellispe de plus
   score ++;  // un point de plus
   ellipse(random(Xp), random(Yp), 30, 30);
   fill(0, 255, 0);
   }*/


  //gestion du score

  fill(0, 0, 255);  
  textAlign(LEFT);
  text("Score : ", width -250, 45);
  text(score, width -50, 45);
  textSize(50);//taille du texte
}








void keyPressed() {

  // choix de la direction en fonction des fleches du clavier,mais on ne peut pas revenir sur soi 
  switch(keyCode) {
  case RIGHT:
    if (direction!=3) direction=1;
    break;

  case LEFT:
    if (direction!=1) direction=3;
    break;
  case UP:
    if (direction!=2) direction=0;
    break;
  case DOWN:
    if (direction!=0) direction=2;
    break;
  }
}
//apparition d'un boutton pour quitter le jeu lorsque l'on appuit sur la lettre q
void Quitter() {
  if (keyPressed) {
    if (key == 'Q' || key == 'q') {//peut importe si c'est en majuscule ou en minuscule
      bouQuit=cp5.addButton("Quit")
        .setPosition(490, 30)
        .setCaptionLabel("Quit")
        .setSize(100, 50)
        .setColorBackground(color(0, 50, 130));
    }
  }
}






void parcours() {
  for (int j=1; j<19; j++) { //boucle carrés rouges ligne haute
    tabCou[j]=color ( 255, 0, 0) ;
    tabAbs[j]=25+j*50;
    fill(tabCou[j]);
    rect(tabAbs[j], 150, 25, 25);
  }

  for (int k=0; k<18; k++) { //boucle carrés blancs ligne haute
    tabCou[k]=color ( 255, 255, 255) ;
    tabAbs[k]=50+k*50;
    fill(tabCou[k]);
    rect(tabAbs[k], 150, 25, 25);
  }


  for (int j=8; j<38; j++) { //boucle carrés blancs ligne gauche
    tabCou[j]=color ( 255, 255, 255) ;
    tabOrd[j]=j*25-25;
    fill(tabCou[j]);
    rect(50, tabOrd[j], 25, 25);
  }

  for (int k=4; k<20; k++) { //boucle carrés rouges ligne gauche
    tabCou[k]=color ( 255, 0, 0) ;
    tabOrd[k]=k*50-25;
    fill(tabCou[k]);
    rect(50, tabOrd[k], 25, 25);
  }

  for (int j=1; j<19; j++) { //boucle carrés rouges ligne basse
    tabCou[j]=color ( 255, 0, 0) ;
    tabAbs[j]=25+j*50;
    fill(tabCou[j]);
    rect(tabAbs[j], 950, 25, 25);
  }

  for (int k=0; k<18; k++) { //boucle carrés blancs ligne basse
    tabCou[k]=color ( 255, 255, 255) ;
    tabAbs[k]=50+k*50;
    fill(tabCou[k]);
    rect(tabAbs[k], 950, 25, 25);
  }

  for (int j= 6; j<38; j++) { //boucle carrés blancs ligne droite
    tabCou[j]=color ( 255, 255, 255) ;
    tabOrd[j]=j*25;
    fill(tabCou[j]);
    rect(925, tabOrd[j], 25, 25);
  }

  for (int k=3; k<19; k++) { //boucle carrés rouges ligne droite
    tabCou[k]=color ( 255, 0, 0) ;
    tabOrd[k]=k*50;
    fill(tabCou[k]);
    rect(925, tabOrd[k], 25, 25);
  }

  //carrés haut gauche

  fill(255, 255, 255);
  rect(150, 250, 25, 25);
  fill(255, 0, 0);
  rect(175, 250, 25, 25);
  fill(255, 255, 255);
  rect(200, 250, 25, 25);

  fill(255, 0, 0);
  rect(200, 275, 25, 25);
  fill(255, 0, 0);
  rect(150, 275, 25, 25);
  fill(255, 255, 255);
  rect(150, 300, 25, 25);
  fill(255, 0, 0);
  rect(175, 300, 25, 25);
  fill(255, 255, 255);
  rect(200, 300, 25, 25);


  //* carrés haut droit
  fill(255, 255, 255);
  rect(775, 250, 25, 25);
  fill(255, 0, 0);
  rect(800, 250, 25, 25);
  fill(255, 255, 255);
  rect(825, 250, 25, 25);
  fill(255, 0, 0);
  rect(775, 275, 25, 25);
  fill(255, 255, 255);
  rect(775, 300, 25, 25);
  fill(255, 0, 0);
  rect(800, 300, 25, 25);
  fill(255, 255, 255);
  rect(825, 300, 25, 25);
  fill(255, 0, 0);
  rect(825, 275, 25, 25);


  //petite ligne haut gauche

  fill(255, 255, 255);
  rect(150, 500, 25, 25);
  fill(255, 0, 0);
  rect(175, 500, 25, 25);
  fill(255, 255, 255);
  rect(200, 500, 25, 25);
  fill(255, 0, 0);
  rect(225, 500, 25, 25);
  fill(255, 255, 255);
  rect(250, 500, 25, 25);
  fill(255, 0, 0);
  rect(275, 500, 25, 25);

  fill(255, 0, 0);
  rect(150, 525, 25, 25);
  fill(255, 255, 255);
  rect(150, 550, 25, 25);
  fill(255, 0, 0);
  rect(150, 575, 25, 25);


  //petite ligne haut droite

  fill(255, 255, 255);
  rect(825, 500, 25, 25);
  fill(255, 0, 0);
  rect(800, 500, 25, 25);
  fill(255, 255, 255);
  rect(775, 500, 25, 25);
  fill(255, 0, 0);
  rect(750, 500, 25, 25);
  fill(255, 255, 255);
  rect(725, 500, 25, 25);
  fill(255, 0, 0);
  rect(700, 500, 25, 25);
  fill(255, 0, 0);
  rect(825, 525, 25, 25);
  fill(255, 255, 255);
  rect(825, 550, 25, 25);
  fill(255, 0, 0);
  rect(825, 575, 25, 25);

  //petite ligne haut milieu

  fill(255, 0, 0);
  rect(500, 175, 25, 25);
  fill(255, 255, 255);
  rect(500, 200, 25, 25);
  fill(255, 0, 0);
  rect(500, 225, 25, 25);
  fill(255, 255, 255);
  rect(500, 250, 25, 25);
  fill(255, 0, 0);
  rect(500, 275, 25, 25);

  for (int j=3; j<16; j++) { //boucle carrés rouges ligne milieu haute
    tabCou[j]=color ( 255, 0, 0) ;
    tabAbs[j]=25+j*50;
    fill(tabCou[j]);
    rect(tabAbs[j], 425, 25, 25);
  }

  for (int k=3; k<16; k++) { //boucle carrés blancs ligne milieu haute
    tabCou[k]=color ( 255, 255, 255) ;
    tabAbs[k]=50+k*50;
    fill(tabCou[k]);
    rect(tabAbs[k], 425, 25, 25);
  }
  for (int j=3; j<16; j++) { //boucle carrés rouges ligne milieu haute
    tabCou[j]=color ( 255, 255, 255) ;
    tabAbs[j]=25+j*50;
    fill(tabCou[j]);
    rect(tabAbs[j], 725, 25, 25);
  }

  for (int k=3; k<16; k++) { //boucle carrés blancs ligne milieu haute
    tabCou[k]=color ( 255, 0, 0) ;
    tabAbs[k]=50+k*50;
    fill(tabCou[k]);
    rect(tabAbs[k], 725, 25, 25);
  }
  for (int j=3; j<16; j++) { //boucle carrés rouges ligne milieu basse
    tabCou[j]=color ( 255, 255, 255) ;
    tabAbs[j]=25+j*50;
    fill(tabCou[j]);
    rect(tabAbs[j], 725, 25, 25);
  }

  for (int k=3; k<16; k++) { //boucle carrés blancs ligne milieu basse
    tabCou[k]=color ( 255, 0, 0) ;
    tabAbs[k]=50+k*50;
    fill(tabCou[k]);
    rect(tabAbs[k], 725, 25, 25);
  }
  //petite ligne verticale bas gauche
  fill(255, 255, 255);
  rect(325, 800, 25, 25);
  fill(255, 0, 0);
  rect(325, 825, 25, 25);
  fill(255, 255, 255);
  rect(325, 850, 25, 25);
  fill(255, 0, 0);
  rect(325, 875, 25, 25);


  //petite ligne verticale bas milieu
  fill(255, 255, 255);
  rect(525, 800, 25, 25);
  fill(255, 0, 0);
  rect(525, 825, 25, 25);
  fill(255, 255, 255);
  rect(525, 850, 25, 25);
  fill(255, 0, 0);
  rect(525, 875, 25, 25);

  //petite ligne verticale bas droite
  fill(255, 255, 255);
  rect(725, 800, 25, 25);
  fill(255, 0, 0);
  rect(725, 825, 25, 25);
  fill(255, 255, 255);
  rect(725, 850, 25, 25);
  fill(255, 0, 0);
  rect(725, 875, 25, 25);


  //petite ligne bas gauche

  fill(255, 0, 0);
  rect(75, 650, 25, 25);
  fill(255, 255, 255);
  rect(100, 650, 25, 25);
  fill(255, 0, 0);
  rect(125, 650, 25, 25);
  fill(255, 255, 255);
  rect(150, 650, 25, 25);
  fill(255, 0, 0);
  rect(175, 650, 25, 25);


  fill(255, 255, 255);
  rect(75, 675, 25, 25);
  fill(255, 0, 0);
  rect(75, 700, 25, 25);
  fill(255, 255, 255);
  rect(75, 725, 25, 25);


  //petite ligne bas droite

  fill(255, 255, 255);
  rect(900, 650, 25, 25);
  fill(255, 0, 0);
  rect(875, 650, 25, 25);
  fill(255, 255, 255);
  rect(850, 650, 25, 25);
  fill(255, 0, 0);
  rect(825, 650, 25, 25);
  fill(255, 255, 255);
  rect(800, 650, 25, 25);

  fill(255, 0, 0);
  rect(900, 675, 25, 25);
  fill(255, 255, 255);
  rect(900, 700, 25, 25);
  fill(255, 0, 0);
  rect(900, 725, 25, 25);
}
void Quit(){
  exit();//fermeture du programme
}

void pageAccueil() {
  image(fondDuMenu, 0, 0);
  bouAccueil.hide();//on cache le bouton "Accueil"
  page = 0;
}

please format your forum code with the </> button in the future – I have demonstrated by editing your previous post.