[Aide] Coder "Simon"

Résolu
Dorckan Messages postés 11 Statut Membre -  
Dorckan Messages postés 11 Statut Membre -
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 384 Statut Membre 300
 
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 19031 Statut Modérateur 3 020
 
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 Statut Membre
 
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 19031 Statut Modérateur 3 020
 
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 Statut Membre
 
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 19031 Statut Modérateur 3 020
 
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 Statut Membre
 
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 19031 Statut Modérateur 3 020
 
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