Timer random
Fermé
lightfire
-
Modifié le 3 août 2018 à 22:53
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 5 août 2018 à 18:47
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 5 août 2018 à 18:47
A voir également:
- Timer random
- Shutdown timer - Télécharger - Personnalisation
- Multi timer - Télécharger - Bureautique
- Vlc timer - Forum Montage et acquisition vidéo
- Batch random ✓ - Forum Autoit / batch
- Rom pokemon random fr - Forum Jeux vidéo
4 réponses
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
3 août 2018 à 23:22
3 août 2018 à 23:22
Bonjour,
La solution simple, c'est de faire un Thread.sleep pour attendre aléatoirement une durée.
Remarque : dans cette configuration je ne suis pas convaincu qu'un TimerTask soit vraiment pertinent, un simple Thread avec une boucle for ferait parfaitement l'affaire.
La solution simple, c'est de faire un Thread.sleep pour attendre aléatoirement une durée.
Remarque : dans cette configuration je ne suis pas convaincu qu'un TimerTask soit vraiment pertinent, un simple Thread avec une boucle for ferait parfaitement l'affaire.
public class Test { private static void task() { long min = 1, max = 5; for (int round = 0; round < 10; round++) { long randomNumber = (long) (Math.random() * (max - min)) + min; System.out.println(randomNumber); f.play(); try { Thread.sleep(randomNumber * 1000); } catch (InterruptedException e) { } } } public static void main(String[] args) { new Thread(Test::task).start(); } }
luckydu43
Messages postés
4204
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
11 avril 2025
1 036
3 août 2018 à 21:36
3 août 2018 à 21:36
Bonsoir !
Avez-vous essayé en remplaçant le
par un
?
Avez-vous essayé en remplaçant le
round--;
par un
round++;
?
Bonsoir,
pas testé mais les round tournent correctement. je l'ai pas dit dans la description le round est une variable correspondant au nombre de signal sonor que l'on veut.
Le souci vient vraiment du timer. le temps ne se met pas à jour àprès un bip
exemple : random entre 1 et 10
il génère le premier bip après 2s, tous les autres seront à 2 s et non pas par exemple : 2,5,8,4
pas testé mais les round tournent correctement. je l'ai pas dit dans la description le round est une variable correspondant au nombre de signal sonor que l'on veut.
Le souci vient vraiment du timer. le temps ne se met pas à jour àprès un bip
exemple : random entre 1 et 10
il génère le premier bip après 2s, tous les autres seront à 2 s et non pas par exemple : 2,5,8,4
luckydu43
Messages postés
4204
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
11 avril 2025
1 036
Modifié le 3 août 2018 à 22:01
Modifié le 3 août 2018 à 22:01
j'aurais besoin d'un poil plus de code, notamment la méthode définie par f.play();
EDIT :
mouais en fait pas besoin que vous éditiez votre premier message, je me suis fait mes indentations perso
Surtout que je lis bien plus facilement le code sous la forme
du coup...
Pouvez-vous écrire vos prochains message en plaçant le code dans une balise code ? ;-)
EDIT :
mouais en fait pas besoin que vous éditiez votre premier message, je me suis fait mes indentations perso
Surtout que je lis bien plus facilement le code sous la forme
private void methode (Object pParametre) { Object vInsererVariable; if (condition) { code; } else { codeBis; } }
du coup...
Pouvez-vous écrire vos prochains message en plaçant le code dans une balise code ? ;-)
Avec plaisir mais... on fait comment ^^
La méthode f.play() est simplement la lecture du fichier sonor qui contient le"bip".
Je sais pas si ça aide mais j'utilise la librairie GDX2D.
En attendant de savoir comment faire la mise en forme voici la méthode complète. Celle-ci est appelée après un appuie sur le bouton start :
La méthode f.play() est simplement la lecture du fichier sonor qui contient le"bip".
Je sais pas si ça aide mais j'utilise la librairie GDX2D.
En attendant de savoir comment faire la mise en forme voici la méthode complète. Celle-ci est appelée après un appuie sur le bouton start :
newGameButton.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { super.clicked(event, x, y); if (newGameButton.isChecked()) { randomNumber = (int)(Math.random() * (max-min)) + min; timer.schedule (new TimerTask() { public void run() { if(round>0){ randomNumber = (int)(Math.random() * (max-min)) + min; f.play(); round--; System.out.println(randomNumber); } else { timer.cancel(); } } },randomNumber*1000,1 ); // , temps avant premier bip, temps entre chaque bip } else { } } }); }
luckydu43
Messages postés
4204
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
11 avril 2025
1 036
3 août 2018 à 22:05
3 août 2018 à 22:05
Il y a un bouton à droite des boutons B, I et S... c'est celui-là :-D
Je mets en forme le code, je le regarde et je vous dis
Je mets en forme le code, je le regarde et je vous dis
luckydu43
Messages postés
4204
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
11 avril 2025
1 036
Modifié le 3 août 2018 à 22:48
Modifié le 3 août 2018 à 22:48
En gros.
Dis-moi si je me suis trompé dans la lecture du code.
J'ai une piste, tout est commenté
Ah et ouais. Comme je l'ai dit j'ai pas la même façon de lire le code :-)
EDIT : les indentations foutent le sbeul, je les ai remplacées par 4 espaces. Gare au copy/paste :-D
EDIT bis : y avait une virgule en trop et des commentaires perdus
Dis-moi si je me suis trompé dans la lecture du code.
J'ai une piste, tout est commenté
this.newGameButton.addListener( new ClickListener() { /** * Surcharge de la méthode clicked de la classe parente : * on l'appelle, ________________________________________ * puis on lance une séquence de sons aléatoire si le bouton * this.newGameButton est coché. */ @Override public void clicked(InputEvent pEvent, float pX, float pY) { // Appelle de la méthode de la classe parente. super.clicked(pEvent, pX, pY); if (this.newGameButton.isChecked()) { // On initialise le rand ici. // Pertinence d'y mettre une valeur random direct ?! vRandomNumber = (int) ( Math.random() * (this.max - this.min) + this.min ); /** TODO : le temps ne se met pas à jour après un bip. * * Exemple : * * random entre 1 et 10 * il génère le premier bip après 2s * tous les autres seront à 2 s et non pas par exemple : 2,5,8,4 * * Points de détail : * this.round : variable correspondant au nombre de signal sonore que l'on veut. * Les round tournent correctement */ // Lancement d'une séquence de bips aléatoire. this.timer.schedule ( new TimerTask() { public void run() { // Si this.round est positif. if(this.round > 0){ // On regénère une valeur aléatoire dans le rand. vRandomNumber = (int) ( Math.random() * (this.max - this.min) + this.min ); // On lance la fonction play. this.f.play(); // On décrémente le round. this.round--; // On affiche le rand. System.out.println(vRandomNumber); } else { // Si this.round est négatif ou nul, on annule tout. this.timer.cancel(); } } }, // temps avant premier bip vRandomNumber * 1000, // | // | // | // | // \|/ // . // MODIF APPORTÉE ICI. // ... 1 auparavant. // Merci d'avoir commenté "temps entre chaque bip" si c'est ça :-D vRandomNumber * 1000 // . // /|\ // | // | // | // | // Après cette ligne, la séquence est exécutée. PAS AVANT. ); } } } );
Ah et ouais. Comme je l'ai dit j'ai pas la même façon de lire le code :-)
EDIT : les indentations foutent le sbeul, je les ai remplacées par 4 espaces. Gare au copy/paste :-D
EDIT bis : y avait une virgule en trop et des commentaires perdus
Hello tout le monde alors c'est tout bon ! avec le thread() ça tourne du tonner de dieu! merci encore !
Une petite dernière, je profite de votre grande bonté ;)
Je travail sur éclipse. Est-ce qu'il y a possibilité d'exporter directement au format application pour android ou il y a un programme pour le faire?
Encore merci!
Une petite dernière, je profite de votre grande bonté ;)
Je travail sur éclipse. Est-ce qu'il y a possibilité d'exporter directement au format application pour android ou il y a un programme pour le faire?
Encore merci!
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
5 août 2018 à 18:47
5 août 2018 à 18:47
Je ne connais pas la programmation Android et encore moins GDX2D. Mais cela doit être expliqué dans la documentation de la bibliothèque.
Cependant je doute qu'un code fait pour un ordinateur fonctionne tel quel sur Android, il faudra faire des manipulations, peut-être même du code en plus, afin de le faire fonctionner.
Remarque : c'est le genre de test qu'il aurait mieux fallu faire avant de faire ton programme, histoire de vérifier que cette bibliothèque correspondait bien à ton besoin, avant d'écrire un code complet...
Cependant je doute qu'un code fait pour un ordinateur fonctionne tel quel sur Android, il faudra faire des manipulations, peut-être même du code en plus, afin de le faire fonctionner.
Remarque : c'est le genre de test qu'il aurait mieux fallu faire avant de faire ton programme, histoire de vérifier que cette bibliothèque correspondait bien à ton besoin, avant d'écrire un code complet...
5 août 2018 à 12:30
j'ai testé cette possibilité. j'ai un souci de compilation : il ne connait pas la ligne 17 de ton code. c'est plutôt étrange.
par contre j'ai une question stratégique. J'ai fais la class Test comme toi, mais la partie que tu as dans le main avec le new Thread(...), moi je dois le mettre dans la fonction qui gère mon "click"?
5 août 2018 à 12:44
Avec quelle version de Java est-ce que tu code ?
Les références de méthodes, comme , ont été introduite avec Java 8 (en 2014).
Si tu codes en Java 7 ou moins, tu peux remplacer cette ligne par ceci (plus long, entre autres inconvénients)
Quant à l'intégration dans ton code, il faut mettre le start() du Thread à la place du schedule() de ton Timer, donc dans le de ta méthode clicked().
Remarque : si tu faisais du Swing il serait plus efficace d'utiliser des SwingWorker (des Thread sécurisés pour Swing).
Il existe peut-être un équivalent dans GDX2D, mais dans un premier temps le Thread devrait suffire.