Two level to my game

both levels use the same state.

The difference is that the new variable level is 1 or 2.

This gives another speed for the walls in the bird class (3 or 6)

  void move() { //bouger
    yPos+=ySpeed;
    for (int i = 0; i<3; i++) {

      if (level==1) 
        p[i].xPos-=3; //!!!!!!!!!!!!!!!!!!!!!
      else if (level==2)
        p[i].xPos-=6; //!!!!!!!!!!!!!!!!!!

    }
  }

Chrisir

Entire Sketch

PImage img;//image boule
PImage ile;//fond

bird b = new bird();//nouvelle partie

pillar[] p = new pillar[3];//batons

int score=0;//score

int state = 0;

int level=1; 

void setup() {
  //
  img = loadImage("boule.png");//boule
  ile = loadImage("Fond.png");//fond
  size(1000, 800);//ecran
  for (int i = 0; i<3; i++) {
    p[i]=new pillar(i);//batons
  }
}

void draw() {
  background(ile); // fond

  if (state==0) {

    // intro 

    if (mousePressed && (mouseButton == LEFT)) { //appuyer sur le bouton
      fill(48);
    } else {
      fill(33);
    }
    stroke(#FFA500);
    strokeWeight(5);
    rect(340, 200, 220, 50);//encadrement
    rect(340, 300, 220, 50);//encadrement
    rect(340, 400, 220, 50);//encadrement

    textSize(35); //taille de l’écriture
    fill(#FFA500); //couleur écriture

    fill(#FF0000); //couleur cadre
    rect(310, 50, 300, 100);//encadrement

    fill(255); //couleur

    text("Flappy Rabbit", 350, 115);//titre debut
    text("niveau1 ", 370, 240);//debut
    text("niveau2", 370, 340);//règle
    text("Règle ", 370, 440);
  } 
  //------
  else if (state==1) {

    // GAME 

    background(ile); // fond
    rect(20, 20, 100, 50);//cadre score
    fill(230);//texte score and level 
    text(score, 30, 58); //texte score
    text("Level "+level, width-130, 58); //texte level

    b.move(); //mouvement de la balle

    b.drawBird(); //vision de balle

    b.drag(); //redessente

    b.checkCollisions(); //collision

    for (int i = 0; i<3; i++) {
      p[i].drawPillar();//batons
      p[i].checkPosition();//batons
    }

    fill(0);//couleur fond encadrement
    textSize(32); //taille de l’écriture
    //
  } 
  //---------------
  else if (state==2) {
    //
    //si perdu
    //
    textSize(32); //taille de l’écriture
    fill(#FF0000 );
    rect(340, 100, 220, 50);//encadrement
    if (mousePressed && (mouseButton == LEFT)) { //appuyer sur le bouton
      fill(48);
    } else {
      fill(0);
    }
    rect(340, 200, 220, 50);//encadrement
    fill(255); //couleur ecriture

    text("Game Over", 350, 140);//fin
    text("Accueil", 390, 235);//score
  } 

  // ------------------------

  else if (state==3) {

    // RULES 

    background(#1601FD);// fond
    textSize(32); //taille de l’écriture

    fill(#21F904); //couleur texte
    text("REGLE DU JEU", 350, 75); 
    fill(0); //couleur
    text("Le but du jeu est de:", 15, 150); 
    fill(#FF0000); //couleur
    text("-passer entre les poteaux sans les toucher ", 15, 225); 
    text("-marquer le plus de points", 15, 300); 
    fill(0); //couleur
    text("Comment jouer?", 15, 375);
    fill(#FF0000); //couleur
    text("-appuyer sur la barre espace pour sauter ", 15, 450); 
    text("-appuyer sur toutes les touches", 15, 525);
    if (mousePressed && (mouseButton == LEFT)) { //appuyer sur le bouton
      fill(48);
    } else {
      fill(0);
    }
    rect(400, 600, 220, 50);//encadrement
    fill(255); //couleur
    text("RETOUR", 440, 640);
  } 
  // ------------------------
}

void reset() { //recomencer
  score=0;
  b.yPos=400;
  b.ySpeed=0;
  for (int i = 0; i<3; i++) {
    p[i].xPos+=550;
    p[i].cashed = false;
  }
}

void mousePressed() {
  //sauter avec la souris

  switch(state) {

  case 0:

    float x1=340; //emplacement cadre  //clique to play / Level 1
    float y1=200;
    float w1=220;
    float h1=50;

    if (mouseX > x1 &&  //selection cadre
      mouseX < x1 + w1 && 
      mouseY > y1 &&
      mouseY < y1 + h1) { 
      level=1; 
      state=1;
      reset();
    } //recomence

    float x2=340; //emplacement cadre  / Level 2
    float y2=300;
    float w2=220;
    float h2=50;

    if (mouseX > x2 &&  //selection cadre
      mouseX < x2 + w2 && 
      mouseY > y2 &&
      mouseY < y2 + h2) { 
      println("3");
      level=2; 
      state=1;
      reset();
    }    

    float x5=340; //emplacement cadre / Rules 
    float y5=400;
    float w5=220;
    float h5=50;

    if (mouseX > x5 &&  //selection cadre
      mouseX < x5 + w5 && 
      mouseY > y5 &&
      mouseY < y5 + h5) {        
      state=3;
      reset();
    }
    break; 

  case 3:
    // Rules 
    float x3=400; //emplacement cadre //retour
    float y3=600;
    float w3=220;
    float h3=50;

    if (mouseX > x3 &&  //selection cadre
      mouseX < x3 + w3 && 
      mouseY > y3 &&
      mouseY < y3 + h3) { 
      state=0;
      reset();
    }
    break; 

  case 2:
    float x4=340; //emplacement cadre // accueil
    float y4=200;
    float w4=220;
    float h4=50;

    if (mouseX > x4 &&  //selection cadre
      mouseX < x4 + w4 && 
      mouseY > y4 &&
      mouseY < y4 + h4) {
      state=0;
      reset();
    }
    break; 
    //
  } // switch
}//func 

void keyPressed() {
  //sauter avec la barre d’espace
  switch(state) {
  case 0:
    //ignore
    break;

  case 1:
    b.jump();
    break;

  case 2:
    reset();
    state=0;
    break;
    //
  case 3:
    state=0;
    reset();
    break;
  } //switch
}

// ============================================================================================
// from now on only classes

class bird {

  float xPos, yPos, ySpeed; //position de la balle

  bird() {
    xPos = 250;//position de la balle au début
    yPos = 400;//position de la balle au début
  }

  void drawBird() { //balle
    stroke(#FFA500);
    noFill();
    strokeWeight(5);
    if (yPos<10)
      yPos=10;
    image(img, b.xPos, b.yPos); // balle
    // ellipse (b.xPos, b.yPos, 5, 5); // balle
  }

  void jump() { //monter
    ySpeed=-10;
  }

  void drag() { //avancer
    ySpeed+=0.4;
  }

  void move() { //bouger
    yPos+=ySpeed;
    for (int i = 0; i<3; i++) {
      if (level==1) 
        p[i].xPos-=3;
      else if (level==2)
        p[i].xPos-=6;
    }
  }

  void checkCollisions() { //collision avec poteau
    if (yPos>800) {
      state=2;
    }
    for (int i = 0; i<3; i++) {
      if ((xPos<p[i].xPos+10&&
        xPos>p[i].xPos-10)&&
        (yPos<p[i].opening-100||yPos>p[i].opening+100)) { //position des poteau
        state=2;
      }
    }
  }
}//class

class pillar {
  //poteau
  float xPos, opening;
  boolean cashed = false;

  pillar(int i) {
    xPos = 100+(i*200);
    opening = random(600)+100;
  }

  void drawPillar() { //poteau
    line(xPos, 0, xPos, opening-100);
    line(xPos, opening+100, xPos, 800);
  }

  void checkPosition() { //position
    if (xPos<0) {
      xPos+=(200*3);
      opening = random(600)+100;
      cashed=false;
    }
    if (xPos<250&&cashed==false) {
      cashed=true;
      score++;
    }
  }
}//class
//
1 Like