IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Décomposition d'un mouvement sur un plateau de jeu


Sujet :

AWT/Swing Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    juin 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : juin 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Décomposition d'un mouvement sur un plateau de jeu
    Bonsoir,

    Dans le cadre d'un projet en université, je dois réaliser un jeu en Java. Le programme est quasiment fini et ne fonctionne pas trop mal. Cependant, j'aimerai améliorer une partie de l'affichage.

    Voici en gros comment il fonctionne:
    Il y a un plateau de jeu, de 6 cases sur 6 représenté par un Jlabel avec une image mise en fond, et deux pions eux aussi représenté dans des Jlabel avec une image de fond. L'affichage est correct, les pions se déplacent sur le plateau avec la méthode setBounds.

    Mon souci d'optimisation est la décomposition du mouvement de déplacement. Les pions ne se déplacent que de case en case mais, ils peuvent le faire dans l'une des 4 directions. Pour chaque tour de jeu, un pion peut avoir le droit de se déplacer de plusieurs cases. (Tous les déplacements sont calculés par l'ordinateur). Ce que j'essaye de faire c'est pour chaque déplacement lors d'un tour est d'afficher les différentes positions.

    J'ai déjà essayé de mettre un Thread.sleep(); mais il ne m'affiche que la dernière position à chaque fois.

    Je voudrais savoir si cette décomposition est possible.

    Bonne soirée

    J'ajoute le principe d'affichage que j'utilise:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
        public void deplacerPion(int note ){
     
           // nbMouvements est calculé
     
            for(int i = 1; i < nbMouvements; ++i){
                // Ici est calculé le déplacement pour chaque pas du mouvement
     
                int x //calcul des coordonnées des colones
                int y //calcul des coordonnées des lignes
     
                pion.setBounds(x, y,90,40);
     
            }
     
        }

  2. #2
    Membre confirmé Avatar de ngpub
    Profil pro
    Inscrit en
    mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 449
    Points : 505
    Points
    505
    Par défaut
    Peut-être avec quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public void deplacerPion(int note ){
    	new Thread(new Runnable() {
    		public void run() {
    			// nbMouvements est calculé
    			try {
    			for(int i = 1; i < nbMouvements; ++i){
    				// Ici est calculé le déplacement pour chaque pas du mouvement
    				int x //calcul des coordonnées des colones
    				int y //calcul des coordonnées des lignes
    				pion.setBounds(x, y,90,40);
     
    				repaint();
    				Thread.sleep(500);
    			}
    			} catch(InterruptedException ex) { }
    		}
    	}).start();
    }

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    juin 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : juin 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour la réponse je vais regarder comment mettre ça demain matin.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    août 2005
    Messages
    6 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2005
    Messages : 6 800
    Points : 22 763
    Points
    22 763
    Billets dans le blog
    50
    Par défaut
    pas de sleep() dans l'EDT !
    Utilise plutot un Timer swing.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    juin 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : juin 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,

    J'ai essayé les deux solutions, je n'y suis pas encore arrivé. Je vais mettre ça de coté en attendant, mais si je trouve un moyen d'y arriver par la suite je tiendrai au courant.

    Bonne soirée

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    juin 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : juin 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Voila j'ai résolu mon problème en m'inspirant de ce post.

    Dans un premier temps j'ai créé une classe Thread qui va contenir les méthodes d'affichage.

    Puis pour déplacer un label, il faut utiliser les méthodes
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    public void paint(Graphics g)

    Comme mon plateau est représenté par un Jlabel et que mes pions aussi, il faut faire cette méthode pour le plateau et le pion.

    En gros ça donne ça:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    //Cacul du nombre de mouvements
    int nbMouvements;
                for (int i = 1; i < nbMouvements; ++i) {
                    try {
     
     
                        //calcul des coordonnées 
                        int x = colone * 100 + 10;
                        int y = ligne * 100 + 5;
     
    // On attend un peu pour faciliter la lecture
                        this.wait(800);
    // On change les coordonnées du pion
     
                        this.controleur.getPionEnCours().setBounds(x, y, 90, 40);
     
    // et on peint
    this.controleur.getPionEnCours().paint(this.controleur.getPionEnCours().getGraphics());
                        this.controleur.getPlateauDeJeu().paint(this.controleur.getPlateauDeJeu().getGraphics());
                    } catch (InterruptedException ex) {
                        Logger.getLogger(ThreadDeplacement.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }

    Merci pour les pistes.

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    août 2005
    Messages
    6 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2005
    Messages : 6 800
    Points : 22 763
    Points
    22 763
    Billets dans le blog
    50
    Par défaut
    il faut manipuler les composants Swing dans l'EDT !
    Utilise plutot un Timer swing. (bis)

    Alors non seulement la reponse a la question mentionnee dans ce message n'est pas correcte (ils suffisait de declarer la variable final pour pouvoir l'utiliser dans la classe anonyme) mais en plus il utilise une autre Thread pour manipuler un composant Swing et c'est MAL. Il eut suffit qu'il utilise SwingUtilities.invokeLater() pour resoudre ce probleme.
    Je ne sais pas comment tu recuperes ton Graphics mais si this.controleur.getPlateauDeJeu() est un JComponent, il NE FAUT PAS peindre dessus en utilisant getGraphics() !
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. mouvement sur la pile
    Par sagestion dans le forum Linux
    Réponses: 1
    Dernier message: 10/05/2008, 16h55
  2. mouvement sur movieclip dynamique
    Par BigBarbare dans le forum Flash
    Réponses: 1
    Dernier message: 09/12/2007, 15h07
  3. Mouvement sur une surface de bezier
    Par TheJoe dans le forum OpenGL
    Réponses: 4
    Dernier message: 23/08/2007, 01h23
  4. suivre un objet en mouvement sur image
    Par jlf dans le forum Traitement du signal
    Réponses: 24
    Dernier message: 09/05/2005, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo