Heros roboFactor; Voiture[] voiture = new Voiture[3]; Boite[] boite = new Boite[2]; Score score; PImage img; PImage backG; boolean lance; PImage backMenu; float xDecor, xDecorFin; int xBlocage = -200; //Les entités se bloquent à une abscisse de -200, en attendant d'être rappellées. int opacite; void setup () { size (1000, 600); backMenu = loadImage ("titlerobofactor.png"); img = loadImage("RobofactorProv.PNG"); backG = loadImage ("fond.png"); roboFactor = new Heros(1, img); score = new Score(); lance = false; xDecor = 0; initialiserVoiture(voiture); initialiserBoite(boite); } void draw () { if (lance == false) { noLoop(); background (0, 0, 0); image (backMenu, 200, 10); fill(255); text("Appuyez sur o pour démarrer", width/2-75, height/2); } else { background (80, 120, 200); image(backG, xDecor, 0); roboFactor.afficher(); roboFactor.mourir(); //On vérifie si Robofactor est mort, s'il l'est, on le fait tomber hors de l'écran. nouvelleEntite(voiture, boite); //On génère une nouvelle voiture ou une nouvelle boite aux lettres.. roboFactor.deplacerYProgressif(); //Animation du déplacement de Robofactor vers une autre rangée //On déplace et on affiche les voitures et les boites gererBoite(boite); gererVoiture(voiture); //Le décor défile xDecor = defiler(xDecor, xDecorFin); xDecorFin = xDecor + backG.width; gererCollision(voiture, boite); score.afficher(50, 50); } } void keyPressed() { //Cette fonction gere toutes les touches utiles, haut pour aller vers le haut, bas pour aller vers le bas etc... if (keyCode==UP) { roboFactor.deplacerY(-1); //Robofactor va en haut si on appuie sur la flèche du haut } if (keyCode==DOWN) { roboFactor.deplacerY(1); //Robofactor va en bas si on appuie sur la flèche du bas } if (key=='o') { lance = true; initialiserVoiture(voiture); initialiserBoite(boite); score = new Score(); xDecor = 0; roboFactor = new Heros(1, img); loop(); } } void initialiserVoiture(Voiture[] tab) { for (int i = 0 ; i < tab.length ; i++) { tab[i] = new Voiture ((int)random(-1, 3), xBlocage, generer(25, 30)); } } void initialiserBoite(Boite[] tab) { for (int i = 0 ; i < tab.length ; i++) { tab[i] = new Boiteverte((int)random(-1, 3), xBlocage, 12); } } void nouvelleEntite(Voiture tabVoit[], Boite[] tabBoite) { int generation; generation = generer(0, 100); //On génère un nombre aléatoirement entre 0 et 150 (entre -1 et 151 non compris). if (generation==0) { //Si on tombe sur 0, on "remet en jeu" une des trois voitures (il faut qu'elle soit bloquée en dehors de la fenêtre), à une rangée aléatoire for (int i = 0 ; i < tabVoit.length ; i++) { generation = generer(0, 2); if (tabVoit[i].getx()==xBlocage && i==generation) { tabVoit[i] = new Voiture ((int)random(0, 3), width+50, generer(25, 30)); } } } if (generation==1) { //Si on tombe sur 1, on "remet en jeu" une des deux boites (il faut qu'elle soit bloquée), à une rangée aléatoire for (int i = 0 ; i < tabBoite.length ; i++) { generation = generer(0, 1); if (tabBoite[i].getx()==xBlocage && i == generation) { tabBoite[i] = new Boiteverte ((int)random(0, 3), width+50, 12); } } } } void gererBoite(Boite[] tab) { //On affiche et on déplace la boite for (int i = 0 ; i < tab.length ; i++) { tab[i].afficher(); tab[i].deplacerX(); } } void gererVoiture(Voiture[] tab) { //On affiche et on déplace la voiture for (int i = 0 ; i < tab.length ; i++) { tab[i].afficher(); tab[i].deplacerX(); } } void gererCollision(Voiture[] tabVoit, Boite[] tabBoite) { for (int i = 0 ; i < tabVoit.length ; i++) { tabVoit[i].collision(roboFactor); } for (int i = 0 ; i < tabBoite.length ; i++) { tabBoite[i].collision(roboFactor, score); } } int generer(int debut, int fin) { int aleatoire; aleatoire = (int)random(debut, fin+1); return aleatoire; } float defiler(float x, float xfin) { x-=12; if (xfin <= width) { x = 0; } return x; }