Bonjour tout le monde je suis nouveau sur ce site et pour cause j'ai rencontrer un problème lors de la création de mon projet et je viens donc demander de l'aide à quiconque pourrait m'en fournir.
Le but de mon jeu est simple, quand une balle touche une brique elle change de couleur et disparaît. J'arrive à faire disparaître la première ligne de brique mais à partir de la deuxième il n'y a pas moyen j'ai eu beau chercher je n'ai rien trouver. Pourtant je sais que je suis assez proche du but.
Voici l'endroit qui me pose problème il ne doit pas manquer grand chose à modifier.
if (red (get ((int)(x), (int)(y+7)))==0) {
vitesseY = - vitesseY;
}
if (red (get ((int)(x), (int)(y-7)))==255) {
vitesseY = - vitesseY;
for (int i=0; i<15; i++) {
if (x>52*i && x<52*(i+1)) {
couleurbriques[i][6] = #469FD8;
}}}
Voici mon code complet au cas ou :
int[] rectX=new int[15];
int[] rectY=new int[15];
int i;
int [][]couleurbriques= new int[15][7];
int couleurbrique;
//PImage bleu;
PFont police;
boolean test1 = false;
Balle maBalle;
void setup() {
//paramètres
size(778, 500);
smooth();
noStroke();
couleurbrique = 255;
//bleu = loadImage ("bleu.png");
//police = loadFont ("ArialMT-17.vlw");
//textFont (police,17);
maBalle = new Balle(width/2, height/2, color(0));
//création des briques
for (int i=0;i<15;i=i+1) {
rectX[i]=52*i;
rectY[i]=22*i;
}
for (int i=0 ; i<15 ;i++) {
for (int j=0; j<7; j++) {
couleurbriques[i][j]=255;
}
}
}
void draw() {
background(#469FD8);
fill(#00FFFF);
rect(mouseX, 485, 60, 5);
//int l=0;
//while(l<7){
for (int i=0; i<15; i++) {
for (int j=0; j<7; j++) {
fill(couleurbriques[i][j]);
rect(rectX [i], rectY[j], 50, 20, 2);
}
}
//l++;
//}
maBalle.bouge();
maBalle.rebondir();
maBalle.affiche();
}
//création d'une balle
class Balle {
float x;
float y;
float vitesseX;
float vitesseY;
color couleur;
Balle (float nouvX, float nouvY, color nouvCouleur) {
x = nouvX;
y = nouvY;
couleur = nouvCouleur;
vitesseX = 2 + 1;
vitesseY = 2 + 1;
}
void affiche() {
fill(couleur);
ellipse(x, y, 13, 13);
}
void bouge() {
x = x + vitesseX;
y = y + vitesseY;
}
void rebondir() {
if (x > width-7 || x < 7) {
vitesseX = vitesseX * -1;
}
if ( y < 7) {
vitesseY = vitesseY * -1;
}
//if (red (get ((int)(x),(int)(y)))==255){vitesseY = - vitesseY;}
if (red (get ((int)(x), (int)(y+7)))==0) {
vitesseY = - vitesseY;
}
if (red (get ((int)(x), (int)(y-7)))==255) {
vitesseY = - vitesseY;
for (int i=0; i<15; i++) {
if (x>52*i && x<52*(i+1)) {
couleurbriques[i][6] = #469FD8;
}
}
}
}
}
void fenetre1 () {
//image ( bleu, 0, 0, 778,500);
noStroke ();
fill(0);
rect (100, 100, 100, 100);
rect (100, 150, 100, 100);
fill (0);
text ("JOUER", 100, 100);
}
Merci d'avance.
Hors ligne
Bonsoir, de même je suis nouveau et je rencontre des difficultés dans la mise au point de mon casse brique. j'en suis aux collisions avec les briques et j'avoue ramer. Vus que je n'est pas réussi à appeler la fonction collision, je ne peux donc pas voir si mes conditions pour la collision son juste.
Un peu d'aide serrai la bien venue !
Merci !
code :
// Coordonnées x et y du rectangle
int rectangleX=335;
int rectangleY = 550;
// coordonées de la balle
int bx=400;
int by=535;
// vecteur vitesse de la balle
int vx=3;
int vy=-3;
//image de fond
PImage txt;
int BriqueX;
int BriqueY;
// nombre de briques horizontale et verticale
int X=13;
int Y=11;
Briques[] briques=new Briques [X*Y];
void setup(){ // fenetre avec image
size(800, 600);
txt = loadImage("ciel.jpg");
reset();
}
void reset (){
int num=0;
for(int i=0; i<X; i++){
for(int j=0; j<Y; j++){
briques[num] = new Briques(40+55*i, 40+25*j);
num++;
}
}
}
void draw(){
background(txt);
fill(255,255,255);
rect(rectangleX,rectangleY,130,20);
bougerRectangle();
for (int i= 0; i<X*Y; i++){
stroke(100, 100, 100);
rect(briques[i].getX(),briques[i].getY(),50,20);
//appliquer a brique i la collision
}
for(int i= 0; i<X*Y; i++){
// détruire brique
}
noStroke();
fill(255,0,0);
ellipse(bx,by,20,20); // ma balle
bougerBalle();
reset();
}
void bougerRectangle(){
if(keyPressed){ // Si une touche est appuyée
if(key == CODED){ // Si c'est une touche "spéciale" (= ni une lettre ni un chiffre)
if(keyCode == UP){ // Si c'est la flèche du haut
rectangleY = rectangleY + 0; // On diminue la coordonnée y du centre du triangle
}
else if(keyCode == DOWN){
rectangleY = rectangleY - 0;
}
else if(keyCode == LEFT){
if(rectangleX>=0)
rectangleX = rectangleX - 7;
}
else if(keyCode == RIGHT){
if(rectangleX<=670)
rectangleX = rectangleX + 7;
}
}
}
}
void bougerBalle(){
by=by+vy;
if(by<=10){
vy=-vy;
}
if(by+12==rectangleY && bx-10>rectangleX && bx+10<rectangleX+130){ // collision balle plate-forme
vy=-vy;
}
bx=bx+vx;
if(bx>=790){
vx=-vx;
}
if(bx<=15){
vx=-vx;
}
// fair en sorte que suivant la collision avec la plate forme la balle prennne une trajectoire particulière
}
class Briques{
int x;
int y;
Briques(int _x, int _y){
x=_x;
y=_y;
}
int getX(){return x;}
int getY(){return y;}
void collisionBalleBriques(){
if(bx+10>x && bx-10<x+50 && by+10>y && by-10<y+20){ //rencontre brique
if (bx-10<x){ //zone gauche
if(vy>0){ //par en haut
if(vx>0){ //par la gauche
if(bx>x){ //plus vers le haut de la brique
vy=-vy;
by=by-10;
}
if(bx<x){ //plus vers le coté gauche de la brique
vx=-vx;
bx=bx-10;
}
if(bx==x){ //sur le coin surpérieur gauche de la brique
vx=-vx;
vy=-vy;
bx=bx-10;
by=by-10;
}
}
else{ //par la droite
vy=-vy;
by=by-10;
}
}
else if(vy<0){ //par en bas
if(vx>0){ //par la gauche
if(bx>x){ //plus vers le bas de la brique
vy=abs(vy);
by=by+10;
}
if(bx<x){ //plus vers le coté gauche de la brique
vx=-vx;
bx=bx-10;
}
if(bx==x){ //sur le coin inferieur gauche de la brique
vx=-vx;
vy=abs(vy);
bx=bx-10;
by=by+10;
}
}
else{ //par la droite
vy=abs(vy);
by=by+10;
}
if(bx+10>x+50){ //zone droite
if(vy>0){ //par en haut
if(vx<0){ //par la droite
if(bx<x+50){ //plus vers le haut de la brique
vy=-vy;
by=by-10;
}
if(bx>x+50){ //plus vers le cote droit de la brique
vy=abs(vy);
bx=bx+10;
}
if(bx==x){ //sur le coin supérieur droit de la brique
vx=abs(vx);
vy=-vy;
bx=bx+10;
by=by-10;
}
}
else{ //par la gauche
vy=-vy;
by=by-10;
}
}
if(vy<0){ //par en bas
if(vx<0){ //par la droite
if(bx<x+50){ //plus vers le bas de la brique
vy=abs(vy);
by=by+10;
}
if(bx>x+50){ //plus vers le cote droit de la brique
vx=abs(vx);
bx=bx+10;
}
if(bx==x+50){ //sur le coin de la brique
vx=abs(vx);
vy=abs(vy);
bx=bx+10;
by=by+10;
}
}
else{ //par la gauche
vy=abs(vy);
by=by+10;
}
}
}
if(by+10>y+20 && bx+10>x && bx-10<x+50){ //zone basse moins les zones du cote
vy=abs(vy);
by=by+10;
}
if(by-10<y && bx+10>x && bx-10<x+50){ //zone haute moins les zones du cote
vy=-vy;
by=by-10;
}
}
}
}
}
}
Hors ligne
Bonjour,
Effectivement il ne reste pas grand chose à modifier :
if (red (get ((int)(x), (int)(y-7)))==255) { vitesseY = - vitesseY; couleurbriques[(int)x / 52][(int)y / 22 - 1] = #469FD8; }
L'utilisation de la division entière est très pratique pour faire correspondre une position avec les cases s'une grille.
Hors ligne
Pages: 1