Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// partage de liens //// une carte des membres//// (apéros) codelab


#1 2017-03-13 19:28:27 Projet ISN CASSE BRIQUE besoin d'aide

Fir3St4r
nouveau membre
Date d'inscription: 2017-03-13
Messages: 1

Projet ISN CASSE BRIQUE besoin d'aide



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

 

#2 2017-05-12 21:18:56 Re : Projet ISN CASSE BRIQUE besoin d'aide

n6
nouveau membre
Date d'inscription: 2017-05-12
Messages: 1

Re: Projet ISN CASSE BRIQUE besoin d'aide



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

 

#3 2017-05-18 21:31:18 Re : Projet ISN CASSE BRIQUE besoin d'aide

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 753

Re: Projet ISN CASSE BRIQUE besoin d'aide



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

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2017