[Aide] Coder "Simon"

Résolu/Fermé
Dorckan Messages postés 11 Date d'inscription vendredi 19 juillet 2013 Statut Membre Dernière intervention 10 mai 2014 - 9 mai 2014 à 17:23
Dorckan Messages postés 11 Date d'inscription vendredi 19 juillet 2013 Statut Membre Dernière intervention 10 mai 2014 - 10 mai 2014 à 19:57
Bonjour à tous,

Je suis débutant en langage Java, et je rencontre des problèmes dans un projet : j'aimerai coder un Simon simplifié (vous savez le jeu avec les couleurs qui apparaissent dans un ordre précis, et où il faut répéter le bon enchainement en appuyant sur les couleurs correspondantes).

J'ai 4 boutons et 1 au milieu, et j'aimerai qu'il s'allume en vert, puis une pause d'à peine une seconde, puis qu'il s'allume dans une autre couleur, puis encore une pause, etc jusqu'à 5 couleurs. Seulement j'ai chercher, mais je ne trouve pas de fonctions fournies de "pause", comme je la voit.

Savez vous comment je devrais m'y prendre ? Merci de vos réponses.
A voir également:

2 réponses

Nhhi Messages postés 332 Date d'inscription lundi 28 avril 2014 Statut Membre Dernière intervention 6 mars 2016 299
9 mai 2014 à 17:40
regarde du coté de Thread.sleep(1000);
ou alors tu peux aussi récupérer le temps de départ dans une variable X
et tu crée une boucle tant que (temps actuel - X <1000) tu tourne en rond et c'est seulement quand 1 seconde s'est écoulé que ta boucle se fini et que tu peux continuer.
1
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
9 mai 2014 à 18:48
Oublions la boucle qui compte le temps, ça va faire ramer le jeu inutilement.
Le Thread.sleep() est bien mieux ;-)

Exemple :

public static void pause(long millisecondes)
{
    try
    {
        Thread.sleep(millisecondes);
    }
    catch (Exception e) // on ne fait rien dans cette exception
    {
    }
}
0
Dorckan Messages postés 11 Date d'inscription vendredi 19 juillet 2013 Statut Membre Dernière intervention 10 mai 2014
Modifié par Dorckan le 10/05/2014 à 17:18
Merci, cette technique a l'air de fonctionner, mais je crois que dans mon code ,'est pas bon : je ne voit aucun changement.

  
int monTableau[] = new int[5];
int i = 0;
  
while(i<5)
{

 pause(1000);
   
 monTableau[i] = (new java.util.Random()).nextInt(4)+1;
 switch (monTableau[i])
 {
  case 1:
   simon.setBackground(Color.yellow);
   break;
  case 2:
   simon.setBackground(Color.red);
   break;
  case 3:
   simon.setBackground(Color.green);
   break;
  case 4:
   simon.setBackground(Color.blue);
   break;
  }
   
  i=i+1;
}


Cette partie du code est sensée attribuer à chaque "case" d'un tableau un nombre (la série de couleur est mémorisée dans ce tableau), qui lui même est associé à une couleur qui va colorer le "bouton" du milieu. Mais quand je run le programme, ca n'affiche le bouton que dans une couleur (sans doute celle de la dernière case du tableau).

Vous savez pourquoi cela ne fonctionne pas ? C'est sans doute une erreur toute bête, je suis débutant en Java :/

EDIT : j'ai trouver l'erreur, je sait que c'est bien la dernière couleur qui est affichée, comment faire pour que la fenêtre s'ouvre au tout début (dès la première couleur), pour que l'utilisateur voit la suite "évoluer" ? :/
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2014 à 17:28
comment faire pour que la fenêtre s'ouvre au tout début (dès la première couleur), pour que l'utilisateur voit la suite "évoluer" ?

C'est une JFrame ? Tu fais
setVisible(true);
une fois tous tes composants en place.

Remarque :

int i = 0;
  
while(i<5)
{
  ...
   
  i=i+1;
}

C'est typiquement une boucle for dont tu as besoin ici !

for (int i=0; i<5; i++)
{
    ...
}
0
Dorckan Messages postés 11 Date d'inscription vendredi 19 juillet 2013 Statut Membre Dernière intervention 10 mai 2014
10 mai 2014 à 17:42
Pour le for, effectivement, ça marche ! :)
Mais j'ai toujours le même problème : en mettant setVisible(true), la fenêtre s'ouvre bien avant l'attribution des couleurs, mais bizarrement elle s'ouvre en transparent (il n'y a que le cadre qui est visible, avec la croix rouge, réduire, etc ...; mais pas les boutons et les éléments définis :o).
C'est bizarre, quelqu'un sait pourquoi ça me fait ça ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2014 à 18:20
Est-ce que tu as définis une taille à ta fenêtre ?

Soit avec
setSize(width, height);
soit avec
pack();
(les deux à mettre avant setVisible pour ne pas afficher le redimensionnement)
0
Dorckan Messages postés 11 Date d'inscription vendredi 19 juillet 2013 Statut Membre Dernière intervention 10 mai 2014
Modifié par Dorckan le 10/05/2014 à 18:35
Ca ne marche pas :/
En plus j'aimerai que la fenêtre garde la taille standard :/

EDIT : En fait ça marche, mais avant que la fenêtre s'affiche (hors le cadre), les couleurs se définissent, et donc la fenêtre ne s'affiche entièrement qu'à la fin de cette détermination des couleurs, et du coup n'affiche que la dernière. :/
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2014 à 18:54
Pour t'aider il va falloir que je vois ton code, je ne peux pas deviner ce qui se passe si je ne peux pas tester...
0