Annonce

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


Apéro codelab #35 à Rennes, au Jardin Moderne, le 5 mai 2017

#1 2017-02-14 12:33:02 Comptage des points trop rapide

Am4ki
nouveau membre
Date d'inscription: 2017-02-11
Messages: 8

Comptage des points trop rapide



Bonjour à tous big_smile

J'ai crée il y a peu un jeu très simple qui fait apparaître un carré aléatoire, et quand on clique dessus on gagne 1 point. Le problème étant qu'on peux rester appuyé sur le carré pour faire monter les points, je suis sur qu'il me manque une petite ligne dans mon programme hmm

Le programme en question: (Vous pouvez le mettre dans votre processing il fonctionne et c'est beaucoup plus clair)






float posX = random(2);
float posY = random(4);
float couleurRandom = random(254);
int longueur = 152;
int largeur = longueur;
int compteur;


void setup () {
  size (500, 800); //Taille du canavas
  background(0,0,199);
  textAlign(CENTER, CENTER); //Le textAlign simplifie juste le placement des textes
  textFont(createFont("Basic", 25));
}

void draw() {
  background(0,0,199);
  delay(50);
  if (mousePressed && mouseX > posX*longueur && mouseX < (posX*longueur+longueur) && mouseY > posY*largeur && mouseY < (posY*largeur+longueur)) { //posX * longueur = 300 au max (pareil pour posY * largeur)
      fill(255, 120, 10);
      rect(posX*longueur, posY*largeur, longueur, largeur);
         compteur = compteur +1;   
  } else {
      fill(255, 150, 0);
      rect(posX*longueur, posY*largeur, longueur, largeur);
      fill(255,0,0);
      text("CLICK HERE", posX*longueur+longueur/2, posY*largeur-largeur/2+158); //nom, x, y
  }
  fill(0,0,255);
  rect(0,750,500,50);// Carré de base
  fill(0);
  fill(0);
  rect(160,750,0,50); //Délimitation 1
  rect(322,750,0,50);//Délimitation 2
  fill(0);
  text("EXIT", 405, 775);
  text("GAME 1", 80, 775);
  text("GAME 2", 240, 775);
  fill(255,255,0);
  text(compteur, 290, 30);
  text("SCORE:", 220,30);
 
if (mousePressed && mouseX > 322 && mouseX < 500 && mouseY > 750 && mouseY < 800) { //BOUTON EXIT
  exit();
  }
}
void mouseReleased() {
  if (mouseX > posX*longueur && mouseX < (posX*longueur+longueur) && mouseY > posY*longueur && mouseY < (posY*largeur+longueur)) {
    posX = random(2);
    posY = random(4);
 
  }
  if (compteur > 1){ //Supprimer ou modifier
   
}
}




Merci à ceux qui m'aiderons big_smilesmiletongue

Hors ligne

 

#2 2017-02-14 13:35:07 Re : Comptage des points trop rapide

jojolaglaise
membre
Lieu: Basse Normandie
Date d'inscription: 2014-04-20
Messages: 120
Site web

Re: Comptage des points trop rapide



Salute,

Encore en fois, tu y étais presque: il n'y a rien à ajouter du tout, tu as juste mis des instructions au mauvais endroit:

float posX = random(2);
float posY = random(4);
float couleurRandom = random(254);
int longueur = 152;
int largeur = longueur;
int compteur;


void setup () {
  size (500, 800); //Taille du canavas
  background(0, 0, 199);
  textAlign(CENTER, CENTER); //Le textAlign simplifie juste le placement des textes
  textFont(createFont("Basic", 25));
}

void draw() {
  background(0, 0, 199);

  fill(255, 150, 0);
  rect(posX*longueur, posY*largeur, longueur, largeur);
  fill(255, 0, 0);
  text("CLICK HERE", posX*longueur+longueur/2, posY*largeur-largeur/2+158); //nom, x, y
  fill(0, 0, 255);
  rect(0, 750, 500, 50);// Carre de base
  fill(0);
  fill(0);
  rect(160, 750, 0, 50); //Delimitation 1
  rect(322, 750, 0, 50);//Delimitation 2
  fill(0);
  text("EXIT", 405, 775);
  text("GAME 1", 80, 775);
  text("GAME 2", 240, 775);
  fill(255, 255, 0);
  text(compteur, 290, 30);
  text("SCORE:", 220, 30);

  if (mousePressed && mouseX > 322 && mouseX < 500 && mouseY > 750 && mouseY < 800) { //BOUTON EXIT
    exit();
  }
}
void mouseReleased() {
  if (mouseX > posX*longueur && mouseX < (posX*longueur+longueur) && mouseY > posY*longueur && mouseY < (posY*largeur+longueur)) {
    posX = random(2);
    posY = random(4);
    fill(255, 120, 10);
    rect(posX*longueur, posY*largeur, longueur, largeur);
    compteur = compteur +1;
  }
}

Voici l'explication: il fallait mettre la condition dans la fonction void MouseReleased,
Je te laisse déduire les raisons de cela smile n'hésites pas à exposer ici tes intuitions si tu le souhaites.

Dernière modification par jojolaglaise (2017-02-14 13:35:43)

Hors ligne

 

#3 2017-02-14 15:07:41 Re : Comptage des points trop rapide

Am4ki
nouveau membre
Date d'inscription: 2017-02-11
Messages: 8

Re: Comptage des points trop rapide



Si j'ai bien compris à l'endroit ou j'ai mis des IIIIII  les lignes sont associés et le rectangle prend la même valeur de posX et posY? smile tongue



float posX = random(2);
float posY = random(4);
float couleurRandom = random(254);
int longueur = 152;
int largeur = longueur;
int compteur;


void setup () {
  size (500, 800); //Taille du canavas
  background(0, 0, 199);
  textAlign(CENTER, CENTER); //Le textAlign simplifie juste le placement des textes
  textFont(createFont("Basic", 25));
}

void draw() {
  background(0, 0, 199);

  fill(255, 150, 0);
  rect(posX*longueur, posY*largeur, longueur, largeur); IIIIIIIIIIIIIIIIIII
  fill(255, 0, 0);
  text("CLICK HERE", posX*longueur+longueur/2, posY*largeur-largeur/2+158); //nom, x, y
  fill(0, 0, 255);
  rect(0, 750, 500, 50);// Carre de base
  fill(0);
  fill(0);
  rect(160, 750, 0, 50); //Delimitation 1
  rect(322, 750, 0, 50);//Delimitation 2
  fill(0);
  text("EXIT", 405, 775);
  text("GAME 1", 80, 775);
  text("GAME 2", 240, 775);
  fill(255, 255, 0);
  text(compteur, 290, 30);
  text("SCORE:", 220, 30);

  if (mousePressed && mouseX > 322 && mouseX < 500 && mouseY > 750 && mouseY < 800) { //BOUTON EXIT
    exit();
  }
}
void mouseReleased() {
  if (mouseX > posX*longueur && mouseX < (posX*longueur+longueur) && mouseY > posY*longueur && mouseY < (posY*largeur+longueur)) { IIIIIIIIIIIIIIIIIII
    posX = random(2);            IIIIIIIIIIIIIIIIIII
    posY = random(4);            IIIIIIIIIIIIIIIIIII
    compteur = compteur +1;  IIIIIIIIIIIIIIIIIII

Dernière modification par Am4ki (2017-02-14 15:12:54)

Hors ligne

 

#4 2017-02-14 18:28:26 Re : Comptage des points trop rapide

jojolaglaise
membre
Lieu: Basse Normandie
Date d'inscription: 2014-04-20
Messages: 120
Site web

Re: Comptage des points trop rapide



oui, enfin oui oui tout est lié quoi (je n'ai pas regardé de fond en comble ton code). Je crois que je n'ai pas bien compris ta question:
La position du carré est définie avec posX et posY, donc oui, si tu changes les valeurs de posX et posY ça implique que le carré bouge.

Pour détecter UN clic, il est effectivement d'usage d'utiliser la relâche du clic (mouseReleased), qui ne peut pas être maintenu. Si le clic de la souris est relâché, alors, si également notre curseur est sur la surface du carré, alors, toutes les conditions sont remplies pour mettre un point et faire réapparaitre le carré (selon ce que tu as décidé de faire).

Je viens d'apercevoir quelques choses étranges dans le programme que tu as fourni, rien de grave, juste quelques tournures logiques que je trouve peu efficientes:

• Si la largeur et la longueur sont égales, pourquoi ne pas se contenter d'une seule variable comme "l", "cote", "a", "viande" ?
• Les valeurs de positionnement possible aléatoires sont comprises entre [0 et width - viande] pour l'axe des X(si on choisis viande comme nom de variable par exemple) et 0 et height - viande. Pourquoi prendre une valeur de l'intervalle [0; 2[ ou [0; 4] pour ensuite la multiplier par longueur ou la largeur? Ça complexifie le code à moins que tu aies prévu quelque chose? Ensuite,
• pour t'éviter des multiplications apparemment inutiles dans tes conditions et même dans les paramètres du rectangle mobile, tu auras juste à utiliser les variables posX et posY, sans calculs:

posX = random(0, width - viande);
posY = random(0, height - viande);

Hors ligne

 

#5 2017-02-14 20:28:28 Re : Comptage des points trop rapide

Am4ki
nouveau membre
Date d'inscription: 2017-02-11
Messages: 8

Re: Comptage des points trop rapide



J'ai un peu près compris mais pourquoi "viande"? Je débute alors peu être que dans processing ça veut dire quelque chose ou est-ce juste un nom qu'on pourrait remplacer par ce que l'on veux?

Et admettons que posX = random(0, width - viande);
cela ne va t'il pas influencer cette ligne la par exemple? text("CLICK HERE", posX*viande+viande/2, posY*viande-viande/2+149);   (ici en gras)

D'ailleurs merci de donner de ton temps précieux pour m'aider ^^

Dernière modification par Am4ki (2017-02-14 20:40:42)

Hors ligne

 

#6 2017-02-15 10:12:42 Re : Comptage des points trop rapide

jojolaglaise
membre
Lieu: Basse Normandie
Date d'inscription: 2014-04-20
Messages: 120
Site web

Re: Comptage des points trop rapide



ahah pardon c'était une blague, on peut appeler son nom de variable comme on veut "même si il est rudement conseillé de donner des noms explicites". Je disais "viande" juste pour insister sur le fait que tu pourrais utiliser une unique variable, plutot que deux strictement égales. Je ne voulais pas t'induire en erreur avec ce mauvais exemple qui n'a rien de drole en plus (pfi!), restons-en par exemple à "longueur".

Exactement,

citation :

Et admettons que posX = random(0, width - viande);
cela ne va t'il pas influencer cette ligne la par exemple? text("CLICK HERE", posX*viande+viande/2, posY*viande-viande/2+149);   (ici en gras)

Si  posX = random(0, width - longueur);
alors  text("CLICK HERE", posX +longueur/2, posY - longueur/2 + 149);
suffirait.

Cette modification permet d'éviter certaines multiplications inutiles. Mais tel qu'il est ton code est opérationnel... chacun son style après tout, comme dit!

Hors ligne

 

#7 2017-02-15 12:13:30 Re : Comptage des points trop rapide

Am4ki
nouveau membre
Date d'inscription: 2017-02-11
Messages: 8

Re: Comptage des points trop rapide



D'accord merci big_smile

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2017