Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1151 connectés 

  FORUM HardWare.fr
  Programmation
  Java

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°281548
seabee
Posté le 07-01-2003 à 21:36:04  profilanswer
 

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é!

mood
Publicité
Posté le 07-01-2003 à 21:36:04  profilanswer
 

n°281759
darklord
You're welcome
Posté le 08-01-2003 à 10:15:19  profilanswer
 

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
n°281976
gfive
Posté le 08-01-2003 à 14:30:55  profilanswer
 

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.)

n°281986
--greg--
Posté le 08-01-2003 à 14:45:40  profilanswer
 

c quoi MiniMax :??:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°282153
seabee
Posté le 08-01-2003 à 18:58:23  profilanswer
 

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. }

n°282162
--greg--
Posté le 08-01-2003 à 19:17:48  profilanswer
 

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!

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

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

 

Sujets relatifs
probleme d analyse pour redondanceDe gros problème avec le css : je comprend rien
[C++] Probleme de libération de mémoire--> Probleme pour recupérer une valeur dans une liste ! HELP !!!!! <--
Problème d'ImpressionProbleme de retour d'un servlet vers un jsp
problème étrange lors de la génération de mon code HTMLProbleme de comil avec wxWindows
[java] probleme de popup avec dreamweaverProblème avec la fonction mail()
Plus de sujets relatifs à : [Swing] Problème de raffraichissement d'écran dans un jeu


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR