Annonce

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


#1 2014-05-03 19:18:01 Augmenter boule en fonction du compteur

Lilith
membre
Date d'inscription: 2014-03-22
Messages: 11

Augmenter boule en fonction du compteur



Bonjours tout le monde, alors voila mon petit problème :
j'ai crée un compteur qui marche très bien

void compteur() {
  compteur = compteur + 0.01;
  fill(255);
  text(compteur, 410,30);

j'aimerai grâce a lui réussir a augmenter le nombre de bal qui apparaît
par exemple lorsque la valeur du compteur affiche 50,00 j'aimerai qu'il rajoute une balle

j'ai declarer au debut que le nombre de balles etait de 2

j'ai donc ecrit dans mon setup :

if (compteur >= 1.0){
  nbreMeteorite = 3;
}

Mon code ne marche apparement pas, si vous pouviez m'eclairer ! Merci beaucoup:D








----------------------------------------------------------------------------






code complet

Clo monClo;


float x = 250;
float y = 350;
float vitesseX; 
float vitesseY;
PImage clo, ovni, ile;
boolean intro;
float b=40 ;
float sens=1;
int initial = 1;
int nbreMeteorite = 2;
Meteorite[] meteorites = new Meteorite[nbreMeteorite];
int vie = 3; 
PFont police;
float compteur = 0;


void setup() {

  
  smooth(); 
  size(500, 750);
  clo = loadImage("clo.gif");
  ovni = loadImage("OVNI.gif");
  ile = loadImage("meteorite.gif");
  monClo = new Clo(250, -175, color(255));
 
  intro = true;
for (int i = 0; i < nbreMeteorite; i++) {
  meteorites[i] = new Meteorite(width/2, 780);
}
if (compteur >= 1.0){
  nbreMeteorite = 3;
}
  
   police = loadFont("BookmanOldStyle-Italic-20.vlw");
  
   
}


void draw() {
  if (intro) { // Intro
    background(0, 0, 30);
    fill(0, 0, 0, 100);
    rect(0, 0, 500, 750);
    fill(250, 250, 200);
    ellipse(random(500), random(750), random(7), random(7));
    noStroke();
    fill(0);

    //tant que intial =1 
    // si y <200 descendre le bonhomme
    // sinon initial = 0
    // si initial =0

      monClo.bouge();
    intro = monClo.testCollision();
    monClo.display();

    if ((b>100)||(b<40)) {
      sens= 0;
    } 

    imageMode(CENTER);
    image(ovni, 250, 45, b*2, b);
    b = b + sens;
    // intro = flase; // Quand l'intro se termine
  } 
  else { // Jeu
    background(0, 0, 30);
    fill(0, 0, 0, 100);
    rect(0, 0, 500, 750);
    fill(250, 250, 200);
    ellipse(random(500), random(750), random(7), random(7));
    smooth();
    noStroke();

    fill(0);
    if (x > 530) {
      x=x-555;
    }
    if (x < -30) {
      x=x +555;
    }
    if (y > 780) {
      y=y-785;
    }
    if (y < -30) {
      y=y +785;
    }
    keyPressed();
    
    imageMode(CENTER);
    image(clo, x, y, 125, 200);

    for (int i = 0; i < nbreMeteorite; i++) {
    meteorites[i].bouge();
    meteorites[i].testCollision();
    meteorites[i].display();

    }
    
     //barre evolution
  fill(255);
  rect(0,0,499,50);
  fill(0);
  rect(3,3,493,44);
  
  // score
  
  textFont(police,15);
  fill(250);
  text("SCORE :", 350, 30);

  vie();
  compteur();
  
  
  }
}


void keyPressed() {
  if (key == CODED) {
    if (keyCode == LEFT)   x  = x - vitesseX;
    if (keyCode == RIGHT)  x = x + vitesseX;
    if (keyCode == UP)     y = y - vitesseY;
    if (keyCode == DOWN)   y = y + vitesseY;

    vitesseX = 3; 
    vitesseY = 3;
  }
}

class Meteorite {
  float w;
  float z;
  float vitesseW; //AJOUT
  float vitesseZ; //AJOUT

  Meteorite (float nouvW, float nouvZ) {
    w          = nouvW;
    z          = nouvZ;
    vitesseW = 2 + random(-1,1); 
    vitesseZ = 2 + random(-1,1);
  }

  void display() {
    image(ile, w, z, 40, 40);
  }

  void bouge() {
    w = w + vitesseW;
    z = z + vitesseZ;
  }

  void testCollision() {
     //Si la balle touche un mur, elle rebondit
    if (w > width-20 || w < 20) {
       vitesseW = vitesseW * -1;
    }
    if (z > 780) {
       vitesseZ = vitesseZ * -1;
    }
    if (z <0) {
      z=z + 780;
    }
  }
  
}


class Clo {
  float x;
  float y;
  float vitesseX; 
  float vitesseY; 
  color couleur;

  Clo (float nouvX, float nouvY, color nouvCouleur) {
    x          = nouvX;
    y          = nouvY;
    couleur    = nouvCouleur;

    vitesseX = 2; 
    vitesseY = 2;
  }

  void display() {
    fill(0);
    image(clo, x, y, 125, 200);
  }

  void bouge() {
    y = y + vitesseY;
  }
  
  boolean testCollision() {
    //Si la balle touche une mur, elle rebondit
    if (y > 350 ) {
      vitesseY = 0;
      return false;
    } else {
      return true;
    }
  }
}

void vie(){
 
  fill(205,0,0);
  ellipse(15,20,19,15);
  fill(205,0,0);
  ellipse(30,20,19,15);
  fill(205,0,0);
  triangle(6, 23, 39, 23, 23, 35);
  
  fill(205,0,0);
  ellipse(53,20,19,15);
  fill(205,0,0);
  ellipse(68,20,19,15);
  fill(205,0,0);
  triangle(44, 23, 77, 23, 60, 35);
  
  fill(205,0,0);
  ellipse(91,20,19,15);
  fill(205,0,0);
  ellipse(106,20,19,15);
  fill(205,0,0);
  triangle(82, 23, 115, 23, 98, 35);
  
}

void compteur() {
  compteur = compteur + 0.01;
  fill(255);
  text(compteur, 410,30);
  
  
}

Hors ligne

 

#2 2014-05-03 20:17:44 Re : Augmenter boule en fonction du compteur

Olivier
N°4
Lieu: Chalon sur la Saône
Date d'inscription: 2009-04-07
Messages: 1471
Site web

Re: Augmenter boule en fonction du compteur



Bonsjours...

Le setup() est conçu pour n'est lu qu'une seule fois...
Si tu y places ton if, il ne sera évalué qu'une seule fois, au lancement du sketch.

Il faut donc que ta condition se trouve dans le draw() pour qu'elle puisse être évaluée avec les valeurs grandissantes du compteur.

Juste pour info :

compteur = compteur + 0.01

et

compteur += 0.01

sont des notations équivalentes.

Bon courage... smile


L'Amour au Peuple !

Hors ligne

 

#3 2014-05-03 20:59:11 Re : Augmenter boule en fonction du compteur

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

Re: Augmenter boule en fonction du compteur



Bonsoir,

Les tableaux ne sont pas adaptés à ce que tu souhaites faire. Normalement ils sont de tailles fixes. Les Arraylist sont idéaux pour ajouter et soustraire des objets.

J'ai adapté ton code pour l'ajout de météorites. J'ai placé la limite à 3 pour que cela aille plus vite pour les tests :

Clo monClo;

float x = 250;
float y = 350;
float vitesseX; 
float vitesseY;
PImage clo, ovni, ile;
boolean intro;
float b=40 ;
float sens=1;
int initial = 1;
int nbreMeteorite = 2;
ArrayList<Meteorite> meteorites;
int vie = 3; 
PFont police;
float compteur = 0;
int limite = 3; // Ou 50 

void setup() {
  smooth(); 
  size(500, 750);
  clo = loadImage("clo.gif");
  ovni = loadImage("OVNI.gif");
  ile = loadImage("meteorite.gif");
  monClo = new Clo(250, -175, color(255));

  intro = true;
  meteorites = new ArrayList<Meteorite>();
  for (int i = 0; i < nbreMeteorite; i++) {
    meteorites.add(new Meteorite(width/2, 780));
  }
  police = loadFont("Verdana-Italic-20.vlw");
}


void draw() {
  if (intro) { // Intro
    background(0, 0, 30);
    fill(0, 0, 0, 100);
    rect(0, 0, 500, 750);
    fill(250, 250, 200);
    ellipse(random(500), random(750), random(7), random(7));
    noStroke();
    fill(0);

    //tant que intial =1 
    // si y <200 descendre le bonhomme
    // sinon initial = 0
    // si initial =0

      monClo.bouge();
    intro = monClo.testCollision();
    monClo.display();

    if ((b>100)||(b<40)) {
      sens= 0;
    } 

    imageMode(CENTER);
    image(ovni, 250, 45, b*2, b);
    b = b + sens;
    // intro = flase; // Quand l'intro se termine
  } 
  else { // Jeu
    background(0, 0, 30);
    fill(0, 0, 0, 100);
    rect(0, 0, 500, 750);
    fill(250, 250, 200);
    ellipse(random(500), random(750), random(7), random(7));
    smooth();
    noStroke();

    fill(0);
    if (x > 530) {
      x=x-555;
    }
    if (x < -30) {
      x=x +555;
    }
    if (y > 780) {
      y=y-785;
    }
    if (y < -30) {
      y=y +785;
    }
    keyPressed();

    imageMode(CENTER);
    image(clo, x, y, 125, 200);

    for (Meteorite m:meteorites) {
      m.bouge();
      m.testCollision();
      m.display();
    }

    //barre evolution
    fill(255);
    rect(0, 0, 499, 50);
    fill(0);
    rect(3, 3, 493, 44);

    // score

    textFont(police, 15);
    fill(250);
    text("SCORE :", 350, 30);

    vie();
    compteur();
    if ((compteur - limite * meteorites.size()) > limite) {
      meteorites.add(new Meteorite(width/2, 780));
      println(meteorites.size());
    }
  }
}


void keyPressed() {
  if (key == CODED) {
    if (keyCode == LEFT)   x  = x - vitesseX;
    if (keyCode == RIGHT)  x = x + vitesseX;
    if (keyCode == UP)     y = y - vitesseY;
    if (keyCode == DOWN)   y = y + vitesseY;

    vitesseX = 3; 
    vitesseY = 3;
  }
}

class Meteorite {
  float w;
  float z;
  float vitesseW; //AJOUT
  float vitesseZ; //AJOUT

  Meteorite (float nouvW, float nouvZ) {
    w          = nouvW;
    z          = nouvZ;
    vitesseW = 2 + random(-1, 1); 
    vitesseZ = 2 + random(-1, 1);
  }

  void display() {
    image(ile, w, z, 40, 40);
  }

  void bouge() {
    w = w + vitesseW;
    z = z + vitesseZ;
  }

  void testCollision() {
    //Si la balle touche un mur, elle rebondit
    if (w > width-20 || w < 20) {
      vitesseW = vitesseW * -1;
    }
    if (z > 780) {
      vitesseZ = vitesseZ * -1;
    }
    if (z <0) {
      z=z + 780;
    }
  }
}


class Clo {
  float x;
  float y;
  float vitesseX; 
  float vitesseY; 
  color couleur;

  Clo (float nouvX, float nouvY, color nouvCouleur) {
    x          = nouvX;
    y          = nouvY;
    couleur    = nouvCouleur;

    vitesseX = 2; 
    vitesseY = 2;
  }

  void display() {
    fill(0);
    image(clo, x, y, 125, 200);
  }

  void bouge() {
    y = y + vitesseY;
  }

  boolean testCollision() {
    //Si la balle touche une mur, elle rebondit
    if (y > 350 ) {
      vitesseY = 0;
      return false;
    } 
    else {
      return true;
    }
  }
}

void vie() {

  fill(205, 0, 0);
  ellipse(15, 20, 19, 15);
  fill(205, 0, 0);
  ellipse(30, 20, 19, 15);
  fill(205, 0, 0);
  triangle(6, 23, 39, 23, 23, 35);

  fill(205, 0, 0);
  ellipse(53, 20, 19, 15);
  fill(205, 0, 0);
  ellipse(68, 20, 19, 15);
  fill(205, 0, 0);
  triangle(44, 23, 77, 23, 60, 35);

  fill(205, 0, 0);
  ellipse(91, 20, 19, 15);
  fill(205, 0, 0);
  ellipse(106, 20, 19, 15);
  fill(205, 0, 0);
  triangle(82, 23, 115, 23, 98, 35);
}

void compteur() {
  compteur = compteur + 0.01;
  fill(255);
  text(compteur, 410, 30);
}

Hors ligne

 

#4 2014-05-04 00:33:24 Re : Augmenter boule en fonction du compteur

Lilith
membre
Date d'inscription: 2014-03-22
Messages: 11

Re: Augmenter boule en fonction du compteur



Merci beaucoup d'avoir modifié mon programme pour qu'il marche mais si vous pouviez m'expliquer comment le code fonctionne car j'aimerais qu'il n'y est qu'une seul balle qui apparaisse et non pas plusieurs à la suite comme dans celui que vous m'avez donné !

principalement cette partie la :

if ((compteur - limite * meteorites.size()) > limite) {
      meteorites.add(new Meteorite(width/2, 780));
      println(meteorites.size());
    }

Merci encore big_smile

Hors ligne

 

#5 2014-05-04 04:28:51 Re : Augmenter boule en fonction du compteur

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

Re: Augmenter boule en fonction du compteur



Si tu souhaites seulement la création d'une météorite supplémentaire :

    if ((compteur  > limite) && (meteorites.size() == 2)) {
      meteorites.add(new Meteorite(width/2, 780));
    }

Mon test du post précédent est semblable à un pouième près à :

    if (compteur / limite > meteorites.size()) {
      meteorites.add(new Meteorite(width/2, 780));
    }

A chaque fois que le compteur est plus grand qu'un multiple de limite une nouvelle météorite est créée.

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024