[Swing] Problème de raffraichissement d'écran dans un jeu

Problème de raffraichissement d'écran dans un jeu [Swing] - Java - Programmation

Marsh Posté le 07-01-2003 à 21:36:04    

Bonjour!
 
J'ai codé un puissance 4 avec une IA en MiniMax (normal, quoi)
Ca marche bien, le type dans la boite soufflante me fait périr ma race, c'est plutôt cool, mais il me reste juste un problème, et j'ai honte parce que c'est surement tout con, je n'arrive pas à raffraichir l'écran AVANT que l'IA réflechisse.
Je connais pas grand chose aux threads, mais je suppose que c'est la seule voie permettant de laisser du temps au repaint de mon JPanel...
Quelqu'un peut m'aider?
 
PS:Si le problème a été posté 40 fois ou que je vous faire perdre votre temps, défoulez-vous sur moi, je l'aurais bien mérité... ^___@ Désolé!

Reply

Marsh Posté le 07-01-2003 à 21:36:04   

Reply

Marsh Posté le 08-01-2003 à 10:15:19    

probablement que ton IA prends tout le CPU et bloque dès lors le rafraichissement de l'écran. Ca a l'air d'un problème classique: mauvaise séparation de l'UI et du code business qui est derrière.
 
Est ce que tu utilises un appel asynchrone pour lancer l'IA?


Message édité par darklord le 08-01-2003 à 10:15:30

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-01-2003 à 14:30:55    

A priori, ton IA, je la ferais réfléchir dans sa propre thread...
 
En gros, un truc simplet, hein :  
 

Code :
  1. public class Reflechisseur implements Runnable {
  2. private Thread thread;
  3. private ClasseIA ia;
  4. public Reflechisseur(ClasseIA ia) {
  5.    this.ia = ia;
  6. }
  7. public void reflechit() {
  8.    thread = new Thread(this);
  9.    thread.start();
  10. }
  11. public void run() {
  12.    ia.faitTonBouzon();
  13. }

 
 
et tu appelles Reflechisseur.reflechit() au bon moment, ça devrait suffire...Ou même, tu peux rendre Runnable ta classe qui gère l'IA, en fait, ce serait plus simple (mais moins propre à mon sens, ce en quoi je me gourre peut être, mais il me semble que l'IA n'a pas à gérer de thread : elle réfléchit, elle s'occupe pas de savoir dans quel environnement d'exécution elle le fait, mais bon.)

Reply

Marsh Posté le 08-01-2003 à 14:45:40    

c quoi MiniMax :??:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 08-01-2003 à 18:58:23    

Ouin, c'est vrai que l'ihm et l'ia sont sur le même thread, mais je pensais que le repaint était indépendant et qu'il pourrais faire son boulot si je calmais l'ia.
Mais je vais essayer la solution de gfive, il ne devrais plus avoir de problème pour répartir les cycles de CPU.
 
Pour --Greg-- Minimax (ou Negamax)

Code :
  1. private int NegaMax (int alpha, int beta)
  2. {
  3.     if (profondeur==0) {return evaluationSimple();}
  4.     int best = -INFINI;
  5.     rechercheCoupsSuivants();
  6. int i = 0;
  7.     while((moves[profondeur][i].ligne!=-1)&&(best < beta)){
  8.         if (best > alpha){alpha = best;}
  9.        
  10.         // Construction de l'environnement d'appel de la récursion.
  11.        
  12.         effectuerMouvement(moves[profondeur][i]);
  13.        
  14.         int gg = chercherSuite(joueur, moves[profondeur][i].ligne, moves[profondeur][i].colonne);
  15.         if((gg>=pointsparligne*3)&&(profondeur==PROFONDEURMAX)){
  16.          deplacements[profondeur].ligne = moves[profondeur][i].ligne;
  17.          deplacements[profondeur].colonne = moves[profondeur][i].colonne;
  18.          revenirSurMouvement(moves[profondeur][i]);
  19.          return INFINI;
  20.         }
  21.        
  22.  profondeur--;
  23.  joueurSuivant();
  24.        
  25.         int value = -NegaMax(-beta, -alpha);
  26.  // Restauration de l'environnement.
  27.         joueurSuivant();
  28.         profondeur++;
  29.         revenirSurMouvement(moves[profondeur][i]);
  30.        
  31.         if (value > best){best = value; deplacements[profondeur] = moves[profondeur][i];}
  32.         i++;
  33.     }
  34.     return best;
  35. }


 
En gros c'est un algo qui permet à ta boite soufflante de jouer contre toi à des jeux deux joueurs. C'est cool quand on a pas de vrais amis, quoi.
 
Attend, j'ai un algo plus propre que mon code :
 

Code :
  1. int NegaMax(pos, depth, alpha, beta)
  2. {
  3.     if (depth == 0) return Evaluate(pos);
  4.     best = -INFINITY;
  5.     succ = Successors(pos);
  6.     while (not Empty(succ) && best < beta)
  7.     {
  8.         pos = RemoveOne(succ);
  9.         if (best > alpha) alpha = best;
  10.         value = -Negamax(pos, depth-1, -beta, -alpha);
  11.         if (value > best) best = value;
  12.     }
  13.     return best;
  14. }

Reply

Marsh Posté le 08-01-2003 à 19:17:48    

Seabee a écrit :


En gros c'est un algo qui permet à ta boite soufflante de jouer contre toi à des jeux deux joueurs. C'est cool quand on a pas de vrais amis, quoi.
 

[:rofl]
non euh à part ça j'ai pas compris grand chose mais bon...
c'est un algo spécifique au puissance 4 ou quoi? (j'ai pas vraiment mis les neurones en marche en lisant...)
et sinon c'est mal les noms de méthode qui commencent par une majuscule  [:snoozy]


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed