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