Etat du code
Balle maBalle;
void setup() {
smooth();
size(503,503);
noStroke();
cursor(CROSS);
maBalle = new Balle(width/2,height-20);
}
void draw() {
background(#D8C876);
stroke(50);
fill(#817563);
textSize(10);
text("Appuyer sur 'r' pour recommencer",10,10);
maBalle.rebondir();
maBalle.affiche();
maBalle.mousePressed();
maBalle.obstacles();
maBalle.rebObstacles();
maBalle.arrivee();
}
void keyPressed(){
if (key == 'r'){
setup();
}
}
class Balle {
int x;
int y;
int n; //nombre de rebonds
int vitesseX;
int vitesseY;
Balle (int nouvX, int nouvY) {
x= nouvX;
y= nouvY;
n=70;
vitesseX = int(4+random(-2,2));
vitesseY = int(4+random(-2,2));
}
void affiche(){
fill(#03A08C);
ellipse(x, y, 30, 30);
fill(#893F3F);
textSize(12);
text(n,x-6,y+2);
}
void obstacles(){
fill(220);
rect(10,50,150,20);
rect(250,130,70,10);
rect(278,288,90,20);
rect(110,345,83,22);
rect(20,190,60,14);
rect(400,208,70,17);
}
void rebObstacles(){
//voir pour utilisation de popmatrix() et pushmatrix()
//voir si on peut utiliser translate() dans la création des obstacles
//c'est peut être plus efficace pour gérer le rebond sur obstacles
if(red(get(x,y+15))==220){
vitesseX=(vitesseX * -1)+ 1;
vitesseY=(vitesseY/2 * -1)+ 2;
n=n-1;
println(vitesseX,vitesseY);
}
if(red(get(x+15,y))==220){
vitesseX=(vitesseX * -1)+ 1;
vitesseY=(vitesseY/2 * -1)+ 2;
n=n-1;
println(vitesseX,vitesseY);
}
if(red(get(x-15,y))==220){
vitesseX=(vitesseX * -1)+ 1;
vitesseY=(vitesseY/2 * -1) + 2;
n=n-1;
println(vitesseX,vitesseY);
}
if(red(get(x,y-15))==220){
vitesseX=(vitesseX * -1)+ 1;
vitesseY=(vitesseY/2 * -1)+ 2;
n=n-1;
println(vitesseX,vitesseY);
}
}
void mousePressed(){
int pmy = constrain(pmouseY,380,500);
//on met une limite sinon le joueur pourrait mettre directemement la balle dans la zone d'arrivée
//voir si on peut utiliser les vecteurs pour que la souris soit la direction du lancement
if(mouseButton == LEFT){
x = pmouseX;
y = pmy;
}
if(mouseButton == RIGHT){ //le joueur doit cliquer sur le bouton droit afin que la balle se lance
x = x + vitesseX;
y = y + vitesseY;
}
}
void rebondir(){
if(x> width-20 || x< 20) {
vitesseX= vitesseX * -1;
n=n-1;
}
if(y> height-20 || y< 20) {
vitesseY= vitesseY * -1;
n=n-1;
}
}
void arrivee(){
fill(#B41658);
ellipse (460,40,70,70);
fill(#810339);
ellipse (460,40,35,35);
if(n==0){
x=250;
y=250;
fill(#ED4141);
textSize(20);
text("GAME OVER - Appuyer sur 'r' pour recommencer",5,250);
} else if(x> 460 && y< 40){
x=530;
y=0;
fill(#891212);
textSize(64);
text("WINNER !", 150,250);
}
}
}