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
//