int x=30, y=520, dy=0, xb1=310, xb2=530, deplacementXB1, deplacementXB2, yb3=460, yb4=300, deplacementYB3, deplacementYB4;
boolean enSaut = false;
boolean go;
boolean right, left, up, down;
int [] t;
void setup() {
size(1200, 550);
right = left = up = down = false;
deplacementXB1 = deplacementXB2 = deplacementYB3 = deplacementYB4 = 1;
t = new int [width];
for (int i = 0; i < width; i++) {
t[i] = 500;
}
//facultatif : frameRate est la vitesse du jeu en fps (frames per second), par défaut c'est 60 images par seconde
frameRate(60);
}
void draw() {
//décor : ciel bleu et rectangle vert
background(#D6D3FF);
fill(0);//rectangle noir
rect(0, 530, 300, 20);
rect(300, 530, 300, 20);
rect(600, 530, 300, 20);
rect(900, 530, 300, 20);
//initialise le tab des platformes
for (int i = 0; i < width; i++) {
t[i] = 530;
}
// plateformes noires
fill(#000000); // noir
rect(100, 500, 40, 10);
rect(150, 470, 40, 10);
rect(200, 440, 40, 10);
rect(250, 410, 40, 10);
//si la plateforme sort de l'intervalle autorisé alors
// son mouvement change de sens. Donc concrètement :
// si deplacementXB1 était +1 alors deplacementXB1 devient -1
// et si deplacementXB1 était -1 alors deplacementXB1 devient +1
// ... donc dans les 2 cas deplacementXB1 devient -deplacementXB1
if (xb1<310 || xb1+60>445 ) {
deplacementXB1=-deplacementXB1;
}
if (xb2<455 || xb2+60>590) {
deplacementXB2=-deplacementXB2;
}
if (yb3>460 || yb3<300 ) {
deplacementYB3=-deplacementYB3;
}
if (yb4<300 || yb4>460) {
deplacementYB4=-deplacementYB4;
}
xb1=xb1+deplacementXB1;
xb2=xb2+deplacementXB2;
yb3=yb3+deplacementYB3;
yb4=yb4+deplacementYB4;
fill(0);
rect(xb1, 410, 60, 10);
rect(xb2, 410, 60, 10);
fill(255);
rect(620, yb3, 110, 10);
rect(760, yb4, 110, 10);
fill(0);
rect(910, 300, 290, 10);
for (int i = 100; i <140; i++) t[i] = 500; // platforme noire 1
for (int i = 150; i <190; i++) t[i] = 470; // platforme noire 2
for (int i = 200; i <240; i++) t[i] = 440; // platforme noire 3
for (int i = 250; i <290; i++) t[i] = 410; // platforme noire 4
for (int i = xb1; i <xb1+60; i++) t[i] = 410; // platforme blanche 1
for (int i = xb2; i <xb2+60; i++) t[i] = 410; // platforme blanche 2
/*
//pour visualiser le tableau t[]
stroke(255,0,0); strokeWeight(3);
for (int i = 0 ; i <width; i++) point(i, t[i]);
stroke(0); strokeWeight(1);
*/
// si la balle est posée sur une plateforme blanche (qui se déplace)
// alors la balle doit se déplacer avec la plateforme (ou remplacer 410 par t[x])
if (!enSaut && x>xb1 && x<=xb1+60 && y < 410) {
x=x + deplacementXB1;
}
if (!enSaut && x>xb2 && x<=xb2+60 && y < 410) {
x=x + deplacementXB2;
}
if (!enSaut && y<=yb3-10 && x>620 && x<732) {
y=yb3;
}
if (enSaut) {
dy = dy + 1; //on diminue la vitesse
println("avant test : t =", t[x], "| x =", x, "| y = ", y, "| dy = ", dy);
// En phase ascendante de saut (ie dy<0) :
// si le haut de la balle (y-10) est sous le bas d'une plateforme (t[x]+10) et que sa prochaine position (y+dy-10) est au-dessus du bas de plateforme
// alors on rend dy positif (pour arrêter la montée et donc passer en phase descendante de saut)
if (dy<0 && y-10>=t[x]+10 && y+dy-10<t[x]+10) {
println("Boom la tête .. Fin d'ascension !");
//dy = 2; //on lui donne une gravité pour qu'elle redescende
dy = (t[x]+10) - (y-10) +1;
}
// En phase descendante de saut (ie dy>0) :
else if (dy > 0) {
//si le bas de la balle (y+10) est dans la zone noire de la plateforme (ie compris entre t[x] et t[x]+10px)
if ( y+10>=t[x] && y+10 <= t[x]+10 ) {
println("Le saut est fini, on replace la balle sur la plateforme.");
enSaut=false;
dy=0;
y=t[x]-10; //on remet la balle sur la plateforme
} else {
// idem avec le sol : si le bas de la balle (y+10) est en-dessous ou sur le sol (530 px)
if ( y+10>=530 ) {
println("Le saut est fini, on replace la balle sur le SOL.");
enSaut=false;
dy=0;
y=530-10; //on remet la balle sur le sol
}
}
}
}
// si la balle se déplace horizontalement dans l'air (en lévitation)
if (y+10<t[x] && !enSaut) {
println("pas de lévitation, on descend.");
enSaut = true;
dy = 2; //on lui donne une petite gravité pour qu'elle descende
}
y = y + dy;
if (right) {
x = x + 2;
}
if (left ) {
x = x - 2;
}
//Dessin du personnage en (x,y)
fill(#D11AEA); //couleur fushia
ellipse(x, y, 20, 20);
//println("dessin : enSaut",enSaut," | t =",t[x], "| x =", x, "| y = ",y, "| dy = ",dy);
/*
//un point rouge sur le haut de la balle
stroke(255,0,0); strokeWeight(3);
point(x, y-10);
stroke(0); strokeWeight(1);
*/
}
void keyPressed() {
if (key == CODED) {
//Les touches 'flèche' déplacent le personnage vers la droite/gauche
if (keyCode == RIGHT) {
right = true;
}
if (keyCode == LEFT ) {
left = true;
}
} else {
//si on appuie sur la touche 'ESPACE'
//et qu'on n'est pas déjà en saut alors on démarre un saut
if (key == ' ' && !enSaut) {
enSaut = true;
dy = -13; //grosse impulsion
}
}
}
void keyReleased() {
if (keyCode == RIGHT) {
right = false;
}
if (keyCode == LEFT ) {
left = false;
}
}