Hello everyone, it’s me, again!
Since my last posts yesterday, I learned that I couldn’t use Class, Object and ArrayList so I had to redo everything.
I used an array for my “for loop” that draws my bricks. For the collision, I did the same way I did for the paddle as @BeastCoder suggested. It is functioning but I have got some problems with the collision detection.
Sometimes, the ball will hit a brick and it is the one next to it that will disappear and not the one that got hit.
Sometimes, the ball will hit a brick’ side and it won’t disappear at all.
Here is my code :
//Briques
int[] blocks = new int[50];
int bh = 30; //Hauteur
int bw = 100; //Largeur
//Variables de ma balle
float xBalle = 650; //Position x
float yBalle = 400; //Position y
float xSpeed = 3; //Vitesse
float ySpeed = 3; //Vitesse
//Variables du paddle
int xPaddle = 600; //Position x
int yPaddle = 650; //Position y
int Paddle = 100;
void setup(){
int i;
size(1200, 800); //Taille de la fenêtre - les dimensions de la fenêtre ont été changées pour mieux s'adapter à celles de mon écran
//Array pour les briques
for (i=0; i<50; i++) {
blocks[i] = 1;
}
}
void draw(){
int i; //Boucle
int bx; //Briques x
int by; //Briques y
background (0);
//Je fais bouger ma balle
xBalle = xBalle + xSpeed; //Ajout de vitesse à ma xBalle
if (xBalle > width || xBalle < 0){ //Ma balle ne sort pas de l'écran par les côtés
xSpeed = xSpeed * -1; //Inverse vitesse
}
yBalle = yBalle + ySpeed; //Ajout de vitesse à ma yBalle
if (yBalle > height || yBalle < 0){ //Ma balle ne sort pas de l'écran par le haut et le bas
ySpeed = ySpeed * -1; //Inverse vitesse
}
//Je dessine ma balle
fill(255);
stroke(255);
ellipse (xBalle,yBalle,20,20); //Si diamètre 40, rayon 20
//Je fais bouger mon paddle - keyPressed
if (keyPressed){
if(keyCode == RIGHT){ //bouton DROIT
//Déplacement du paddle à droite
xPaddle = xPaddle + 10;
} else if (keyCode == LEFT){ //bouton GAUCHE
//Déplacement du paddle à gauche
xPaddle = xPaddle - 10;
}
}
//Le paddle ne sort pas de l'écran par les côtés
if (xPaddle > width)
xPaddle = width;
if (xPaddle < 0)
xPaddle = 0;
//Je dessine mon paddle
fill(255);
stroke(255);
rectMode(CENTER);
rect(xPaddle,yPaddle,200,10);
//Ma balle rebondit sur le paddle
if ((xPaddle - Paddle) < xBalle && (xPaddle + Paddle) > xBalle &&
(yPaddle - 10) < yBalle && (yPaddle) > yBalle) {
// Si la balle rebondit sur le paddle, inverse la vitesse
ySpeed = - ySpeed;
}
//Je dessine mes briques - boucle for
for (i=0; i<50; i++) {
bx = i%10*110+10;
by = 40*(i/10)+10;
// Les briques apparaissent et sont dessinées si blocks[i]==1, elles disparaissent si blocks[i]==0
if (blocks[i]==1) {
// Draw the block
fill(255);
stroke(0);
rect(bx+100, by+10, bw, bh);
}
//Détection collision entre ma balle et les briques
//Haut-bas des briques
if(xBalle > (bx+10) && xBalle < (bx+90) &&
yBalle > by && yBalle<(by+30) && blocks[i]==1){ //OK
blocks[i]=0; //Disparition
ySpeed = - ySpeed;
}
//Détection collision entre ma balle et côté
if (((xBalle > (bx-5) && xBalle < bx) || (xBalle > (bx+100) && xBalle < (bx+105))) &&
yBalle > by && yBalle < (by+30) && blocks[i]==1) { //OK
blocks[i]=0; //Disparition
xSpeed = - xSpeed;
}
//Détection suite
if (((xBalle > (bx-5) && xBalle < (bx+10)) || (xBalle > (bx+100) && xBalle < (bx+90))) &&
yBalle > by && yBalle <(by+30) && blocks[i]==1) { //OK
blocks[i]=0; //Disparition
xSpeed = - xSpeed;
ySpeed = - ySpeed;
}
}
}
I think that the disfunctioning comes from here :
//Détection collision entre ma balle et les briques
//Haut-bas des briques
if(xBalle > (bx+10) && xBalle < (bx+90) &&
yBalle > by && yBalle<(by+30) && blocks[i]==1){ //OK
blocks[i]=0; //Disparition
ySpeed = - ySpeed;
}
//Détection collision entre ma balle et côté
if (((xBalle > (bx-5) && xBalle < bx) || (xBalle > (bx+100) && xBalle < (bx+105))) &&
yBalle > by && yBalle < (by+30) && blocks[i]==1) { //OK
blocks[i]=0; //Disparition
xSpeed = - xSpeed;
}
//Détection suite
if (((xBalle > (bx-5) && xBalle < (bx+10)) || (xBalle > (bx+100) && xBalle < (bx+90))) &&
yBalle > by && yBalle <(by+30) && blocks[i]==1) { //OK
blocks[i]=0; //Disparition
xSpeed = - xSpeed;
ySpeed = - ySpeed;
}
}
But I am not sure about it. What do you guys think?
Thanks again!