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

Interfaces Graphiques en Java Discussion :

Dessiner un plateau 2D en Java


Sujet :

Interfaces Graphiques en Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Dessiner un plateau 2D en Java
    Bonjour tout le monde,

    je dois réaliser un jeu de plateau en 2D et je ne veux pas me lancer dans une programmation à la n'importe quoi, j'aimerais donc savoir comment on implémente en général un plateau. C'est un ensemble de boutons qui interagissent entre eux ? C'est un composant graphique qu'on dessine, auquel on ajoute des listeners ? Si quelqu'un pouvait m'expliquer quel est le fonctionnement général, pas me donner le code, mais juste l'idéologie .

    Merci d'avance

    Bonne journée

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    A première vue et dans le cas général, je dirai qu'il n'y a pas une seule réponse à ta question, qu'il y a beaucoup de type d'implémentation différente, et cela encore plus en fonction du sujet.

    Sinon moi je verrai plutôt une fenêtre (JFrame) qui contient tes menus et autre composants liés à l'interface qui vont te permettre d'interagir avec ton plateau, et le plateau (classe Plateau) en lui-même je le ferai dériver de JPanel. Ainsi, la classe Plateau contiendra toutes les variables d'état (données du jeu en quelque sorte) qui lui permettra de se dessiner comme il le faut via paintComponent(Graphics).
    Le Plateau implémentera très probablement ActionListener et MouseListener (et pourquoi pas MouseMotionListener) et va s'écouter lui même (avec addActionListener(this) dans la classe elle-même par exemple) ce qui va permettre de traiter tous les événements qui arrivent sur le plateau pour faire évoluer la situation du jeu.

    Désolé de répondre un peu en terme de code, mais pour être clair j'aurais eu un peu de mal ! Voila donc une petite idée de base, après c'est dur de mettre en place une structure ou quoi que ce soit sans avoir plus de précisions sur le sujet.

    Bonne chance

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Merci de ta réponse .

    Je viens de tenter un truc qui ressemble à ça . Je voudrais faire interagir mes boutons entre eux, je n'ai pas encore définit ce qu'il se passait quand on cliquait dessus, c'est peut être une idée un peu trop farfelue, je n'en sait rien .

    Voila mon morceau de code .

    Un petit problème aussi que j'ai eu c'est que je n'arrivais pas à fixer la taille de mes cases :s. De plus j'aimerais que certaine case de mon grid aie une taille différente . Enfin, si pouviez me laisser vos commentaires .

    Merci d'avance .

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    import javax.swing.*;
    import java.awt.*;
     
    public class PanelLocal extends JPanel {
     
    	private Icon poule = new ImageIcon("poule3.jpg");
    	private Icon blanc = new ImageIcon("case blanc.jpg");
    	private GridLayout grid;
     
    	// private JPanel gridPanel;
     
    	public PanelLocal() {
    		super();
    		grid = new GridLayout(7, 8);
    		// gridPanel = new JPanel();
    		// //Demande que la taille des cases des Jpanel qui constitueront le
    		// //grid soit de 100 sur 100 qui est la taille des images
    		// gridPanel.setPreferredSize(new Dimension(200,200));
    		// grid.layoutContainer(gridPanel);
    		this.setLayout(grid);
    		nouveauPlateau();
     
    	}
     
    	private void ajouterTroisPoules() {
    		ajouterCasesBlanches(2);
    		for (int i = 0; i < 3; i++) {
    			JButton poule1 = new JButton(poule);
    			this.add(poule1);
    		}
    		ajouterCasesBlanches(2);
     
    	}
     
    	private void ajouterSeptPoules() {
    		for (int i = 0; i < 7; i++) {
    			JButton poule1 = new JButton(poule);
    			this.add(poule1);
    		}
    	}
     
    	public void ajouterCasesBlanches(int x) {
    		for (int i = 0; i < x; i++) {
    			JButton blanc1 = new JButton(blanc);
    			this.add(blanc1);
    		}
    	}
     
    	private void nouveauPlateau() {
    		ajouterTroisPoules();
    		ajouterTroisPoules();
    		ajouterSeptPoules();
    		ajouterCasesBlanches(28);
     
    	}
    }

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Salut,

    Je voie que dans tes méthodes tu fais:
    JButton blanc1 = new JButton(blanc);

    Faisant ainsi, tu ne conserves jamais la référence de ton bouton, et quand tu vas cliquer dessus et que tu vas récupérer l'évènement plus tard, tu ne pourras pas savoir de quel composant il provient.

    Il vaudrait mieux mettre tes boutons en attributs de la classe:
    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
    19
    20
    21
    22
    23
    24
    25
    import javax.swing.*;
    import java.awt.*;
     
    public class PanelLocal extends JPanel {
     
    	private JButton boutons[][];
     
    	...
     
    	public PanelLocal() {
     
    		boutons = new JButton[7][8];
     
    		...
     
    	}
     
    	private void maMethode(int x, int y) {
     
    		boutons[x][y] = new JButton()
    		add(boutons[x][y]);
     
    		... 
    	}
    }
    Un petit problème aussi que j'ai eu c'est que je n'arrivais pas à fixer la taille de mes cases :s. De plus j'aimerais que certaine case de mon grid aie une taille différente
    Il va te falloir utiliser un autre gestionnaire de mise en forme que le GridLayout. Je te conseil le positionnement absolu, certes il faut tout le temps penser en terme de coordonnées mais au moins tu vas pouvoir faire ce que tu veux.

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Il serait préférable de passer par un BufferedImage, et de tout dessiner manuellement, ou y ajouter des images. Les éléments fixes peuvent être construit dans un BufferedImage à part et l'ajouter sur l'image finale. Il y a pleins de tutoriaux sur ce sujet.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Merci bien pour ces conseils, je vais déjà essayer de les appliquer .

    Merci pour l'histoire des références, ça fait longtemps que j'ai plus fait de java et la synthaxe j'ai du mal .

    Je vais essayer de voir ce que c'est ce truc de buffered image car je ne vois pas du tout .

    Sinon tu penses à quel manager ? Pour faire ça de manière efficace ?

    Je dois dire que j'ai un peu du mal à trouver l'information tellement il y'en a .

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Justement, pas de manager. Tu fais un "setLayout( null )". Ensuite, sur chacun des composant ajouté dans ton panel, tu utilises la méthode "setBounds" pour spécifier la position et la taille.

Discussions similaires

  1. Gestion de dessins Autocad/Catia/3dxml sous Java
    Par tenebriox dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 15/02/2012, 17h33
  2. Dessiner des coins arrondis en Java
    Par rwikus09 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 06/01/2011, 22h56
  3. Dessin en ligne collaboratif: Flash ? Java ? Ajax ?
    Par arno03 dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 21/05/2007, 16h11
  4. Dessiner un arbre binaire en java?
    Par zenaare dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 08/01/2007, 16h01

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