Partage
  • Partager sur Facebook
  • Partager sur Twitter

Thread.sleep sur android

faire attendre mon programme...

    10 septembre 2013 à 1:57:01

    Bonjour, je débute tout juste la programmation android, donc ma question est peut être idiote.

    Voilà j'ai donc développer bêtement un jeu de morpion (tic tac toe) sur java, et j'aimerais que s'affrontent 2 ordinateurs en observant leurs mouvements. 

    J'ai donc une classe Morpion, qui contient une méthode deroulerJeu() qui fait jouer tour à tour chacun des joueurs, dans une boucle. A coté de ça j'ai une View qui me dessine ma grille de jeu, et une Activity (qui contient la dites View) et qui se charge d'appeler la méthode deroulerJeu(). Evidemment quand je lance le programme je me retrouve avec la grille déjà fini, l'ordinateur jouant de manière quasi instantanée. J'ai donc essayé de mettre un bon vieux Thread.sleep() de cette façon

    deroulerJeu(){
      while(partiefini()){
         joueurCourant.jouer(this)
         try{ 
            Thread.sleep(3000)
         }catch(Exception e){}
         vue.invalidate(); //redessine la vue (?)
         joueurCourant=(joueurcourant==j1)?j2:j1; //gérer l'alternance
     }

    Malheureusement je crois que l'android n'aime pas trop le sleep, l'écran devient noir systématiquement. C'est seulement une fois l'algorithme terminé que l'affichage de la grille a lieu. 

    J'ai essayé diverses méthodes, notamment avec un Handler,mais sans succés. Merci d'avance. 

    -
    Edité par babaorum92 10 septembre 2013 à 12:55:06

    • Partager sur Facebook
    • Partager sur Twitter
      17 septembre 2013 à 0:00:47

      Il ne faut pas utiliser de Thread.sleep comme cela. 

      Passes plutot par une AsyncTask, voici un exemple : 

      new AsyncTask<Void, Void, Void>() {
      
      			@Override
      			protected Void doInBackground(Void... params) {
      				try {
      					Thread.sleep(3000);
      				} catch (InterruptedException e) {
      					e.printStackTrace();
      				}
      				return null;
      			}
      
      			@Override
      			protected void onPostExecute(Void result) {
      				super.onPostExecute(result);
      
      				vue.invalidate(); //redessine la vue (?)
      			     joueurCourant=(joueurcourant==j1)?j2:j1; //gérer l'alternance
      			}
      		}.execute();

      -
      Edité par genyus 17 septembre 2013 à 0:03:08

      • Partager sur Facebook
      • Partager sur Twitter

      Thread.sleep sur android

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown