Annonce

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


#1 2015-02-22 22:37:43 texte/nombre aléatoire

grsblfx
nouveau membre
Date d'inscription: 2014-12-10
Messages: 7

texte/nombre aléatoire



Bonjour, je tente en vain de créer deux petits programmes, qui pourraient paraître simples à l'énoncé, mais n'étant qu'un simple débutant, certaines subtilités que je ne saisis pas me donnent du fil à retordre.
Pour le premier programme, la fenêtre s'ouvrirait et afficherait un nombre entier pris au hasard entre 1 et 1000,
à chaque fois qu'on appuierait sur une touche du clavier, le nombre changerait.
En piochant à droite à gauche, j'ai réussi à faire un programme "dé", comme il n'y a que six possibilités c'est pas compliqué :

Code (langage) :

String[] base = {
 "1","2","3","4","5","6"};
 PFont police;
void setup() {
  size(600,600);
  background(0);
}
  void draw() {
    if (keyPressed) {
      background(0);
  police = loadFont("OratorStd-48.vlw");
  textFont(police, 42);
  textAlign(CENTER);
  float alea=random(0,base.length);
  int labase=int(alea);
  String reponse=base[labase];
  text(reponse, width/2, 100);
 
  
}
  }

mais là je veux un chiffre entre 1 et 1000, je suis donc obligé de trouver une autre manière d'obtenir un nombre aléatoire sans avoir à les référencer un par un ("1","2","3","4"...). J'ai essayé différents trucs comme remplacer cette base de nombre par random(1,1000); mais bien entendu ça ne marche pas, je suppose donc qu'il doit y avoir un truc tout con pour faire ça.

Pour ce qui serait du second programme, il s'agirait de la même chose, mais avec des mots au hasard, ayant pour base de donnée les mots du dictionnaire. Encore une fois même chose, je ne vais pas prendre chaque mot de la liste un par un pour y mettre deux guillemets de chaque côté suivis d'une virgule, il faudrait que je puisse intégrer directement toute la liste de mes mots en copier-coller. y a-t-il donc un moyen de faire ça ?

enfin dernière question, peut-on créer un programme avec processing qui s'auto-supprime à l'ouverture ?

voilà voilà, merci d'avance pour vos éventuelles réponses !

Hors ligne

 

#2 2015-02-23 05:57:09 Re : texte/nombre aléatoire

Nicolas Lhommet
membre
Date d'inscription: 2014-01-18
Messages: 194

Re: texte/nombre aléatoire



Salut, tu as aussi le droit d'afficher des nombres sans être obligé de les transformer préalablement en chaînes de caractères :

void setup() {
  size(300, 300);
  background(0);
}
void draw() {
  if (keyPressed) {
    background(0);
    textSize(width/3);
    textAlign(CENTER, CENTER);
    int alea=int(random(1, 1000));
    text(alea, width/2, height/2);
  }
}

Par contre la méthode que tu as employée est la bonne pour effectuer un tirage au sort dans un tableau de chaînes de caractères (nommé "base" dans ton exemple), et si tu veux en créer un à partir d'un fichier texte type dictionnaire (avec un mot par ligne), pour ça il y a la méthode loadStrings() : https://processing.org/reference/loadStrings_.html . D'ailleurs, si tu débutes en programmation, tu devrais commencer par t'attarder sur un maximum d'exemples de la documentation...

Un programme qui s'auto-supprime, c'est un peu tordu neutral... tu es un fan des vieux "Mission Impossible", c'est ça ?? hmm Un programme en cours d'exécution ne peut normalement pas s'effacer du disque lui-même... mais Processing peut supprimer un sketch, vu que le fichier qui contient ce dernier est "libéré" une fois chargé en mémoire (c'est probablement une autre histoire pour un sketch exporté comme application...).
Il se trouve dans un dossier dont le "chemin" s'obtient grâce à la variable globale "sketchPath" (et pour un sketch copié/collé et non sauvegardé, un dossier temporaire est créé). Après, on peut l'effacer comme on ferait pour n'importe quel dossier, sachant que pour pouvoir effacer un dossier, on doit d'abord supprimer chaque fichier qu'il contient.

Pour les plus courageux, voici donc un sketch qui s'"auto-efface" du disque big_smile :
(yikes évidemment, à vos risques et périls, je décline toute responsabilité blah blah...)

Dernière modification par Nicolas Lhommet (2015-02-23 14:34:10)

Hors ligne

 

#3 2015-02-23 18:03:39 Re : texte/nombre aléatoire

grsblfx
nouveau membre
Date d'inscription: 2014-12-10
Messages: 7

Re: texte/nombre aléatoire



Merci beaucoup pour ton aide ! j'ai effectivement encore pas mal de progrès à faire pour saisir les int strings etc... je vais potasser tout ça.
Pour ce qui est du programme qui s'auto supprime c'est pour un projet aux beaux-arts, l'idée serait de questionner l'éphémère et l'obsolète de la machine par l'action absurde de chercher à produire une structure qui de par sa propre nature cherche à s'autodétruire. c'est un peu le serpent qui se mord la queue quoi. Donc du coup merci à toi d'avoir activement participé à mon projet !

Hors ligne

 

#4 2015-03-04 23:35:18 Re : texte/nombre aléatoire

grsblfx
nouveau membre
Date d'inscription: 2014-12-10
Messages: 7

Re: texte/nombre aléatoire



Du coup j'ai essayé la méthode loadstring et je suis parvenu à faire sortir les mots d'une liste partant d'un fichier .txt de façon aléatoire, cependant je ne parviens pas à "actualiser" le mot affiché lorsque j'appuie sur une touche, et en retournant sur mon code j'ai un message d'erreur dans la console qui me dit que le fichier .txt que j'utilise est manquant ou inaccessible, or il vient pourtant de m'afficher un mot tiré de ce fameux fichier .txt, alors je me suis demandé si ce n'était pas la quantité de mots contenue dedans qui posait problème mais après avoir remplacé la longue liste par une courte liste le problème reste le même, je ne comprends pas d'où peut venir le problème, j'ai creusé sur le net mais impossible d'en trouver plus sur les loadstrings et comment les utiliser en random.

voilà ce que j'ai fait, pas tellement différent du premier en fait :

String[] words = loadStrings("blabla.txt");
PFont police;

void setup() {
  size(600,600);
  background(0);
  String[] words = loadStrings("blabla.txt");
police = loadFont("OratorStd-48.vlw");
  textFont(police, 42);
  textAlign(CENTER,CENTER);
  float alea=random(0,words.length);
  int thewords=int(alea);
  String reponse=words[thewords];
  text(reponse, width/2, height/2);
}
void draw() {
 if (keyPressed) {
 
  police = loadFont("OratorStd-48.vlw");
  textFont(police, 42);
  textAlign(CENTER,CENTER);
  float alea=random(0,words.length);
  int thewords=int(alea);
 String reponse=words[thewords];
  text(reponse, width/2, height/2);
 }
}

auriez-vous une idée de la raison pour laquelle ce code ne fonctionne pas ?

Hors ligne

 

#5 2015-03-05 08:10:16 Re : texte/nombre aléatoire

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

Re: texte/nombre aléatoire



Bonjour,

Il faut bien comprendre la notion de variables globales et de variables locales.
Toutes les variables déclarées avant la méthode setup() sont globales. Si dans des méthodes tu déclares une variables du même nom qu'une variable globale Processing considère cette variable comme une nouvelle variable locale.
Voici ton code fonctionnel

String[] words;
PFont police;
String reponse;

void setup() {
  size(600, 600);
  words = loadStrings("blabla.txt");
  police = loadFont("ArialMT-48.vlw");
  textFont(police, 42);
  textAlign(CENTER, CENTER);
  reponse = words[int(random(0, words.length))];
}

void draw() {
  background(0);
  text(reponse, width/2, height/2);
}

void keyPressed() {
  reponse = words[int(random(0, words.length))];
}

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024