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

Agents de placement/Fenêtres Java Discussion :

Jeu du Morpion


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Points : 13
    Points
    13
    Par défaut Jeu du Morpion
    à supprimer

  2. #2
    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
    Pour la barre de menu dans une JFrame, il faut lire la javadoc

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Points : 13
    Points
    13
    Par défaut
    Je vous joint une copie d'écran , j'ai voulu rajouter une image, par exemple placer la barre de menu, le texte 2 lignes en dessous au centre, et en dessous l'image du Morpion.

    Mais tout se chevauche et ma grille ne prend pas en compte ma contrainte qui demande de mettre à des lignes/colonnes spécifiques.

    Merci d'avance
    Images attachées Images attachées  

  4. #4
    Membre habitué
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Points : 138
    Points
    138
    Par défaut
    Essaie avec ce code:
    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
    57
     
    package test;
     
    import java.awt.Container;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
     
     
    public class Morpion {
     
     
    	public static void main(String [] args){
    		JFrame fen=new JFrame("Morpion");
    		JLabel texte=new JLabel("Bienvenue dans le jeu du Morpion !");
    		fen.setBounds(500, 500, 900, 800);
    		Container contenu=fen.getContentPane();
    		contenu.setLayout(new GridBagLayout());
    		GridBagConstraints contrainte=new GridBagConstraints();
    		JMenuBar barre=new JMenuBar();
    		JMenu fichier=new JMenu("Fichier");
    		JMenu about=new JMenu("About");
    		JMenuItem regles=new JMenuItem("Règles du jeu");
    		JMenuItem nouvelle=new JMenuItem("Nouvelle partie");
    		JMenuItem scores=new JMenuItem("Scores");
    		JMenuItem propos=new JMenuItem("A propos de");
     
    		barre.add(fichier);
    		fichier.add(nouvelle);
    		fichier.add(scores);
    		about.add(propos);
    		about.add(regles);
    		barre.add(about);
     
    		fen.setJMenuBar(barre);
     
    		contrainte.weighty=1;
    		contrainte.weightx=1;
    		contrainte.insets=new Insets(20,0,0,0);
    		contrainte.gridheight=GridBagConstraints.REMAINDER;
    		contrainte.gridwidth=GridBagConstraints.REMAINDER;
    		contrainte.anchor=GridBagConstraints.PAGE_START;
     
     
    		contenu.add(texte,contrainte);
     
    		fen.setVisible(true);
    		fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    	}
    }
    Si j'ai bien compris ce que tu veux, ça devrait marchait.

    PS: Si tu utilises un GridBagLayout, sois sur de ce que tu veux afficher avant de commence, sinon à chaque modification tu vas te prendre la tête....

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Points : 13
    Points
    13
    Par défaut
    Merci pour ta réponse, effectivement c'est bien ça que je veux faire, pas facile de s'y retrouver avec ce GridBagLayout, là j'essaie d'ajouter une image en dessous du message de bienvenue, j'y suis pas encore arrivé ^^


    edit : oups, j'avais juste oublié d'enlever le :

    contrainte.gridheight=GridBagConstraints.REMAINDER;

    qui bloquait l'image en dessous, j'essaie de la déplacer maintenant...

    Mais j'ai toujours un grand espace entre la ligne de bienvenue et mon image, du coup, à moins de faire un fen.pack(), il y a de l'espace vide...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Points : 13
    Points
    13
    Par défaut
    En laissant le fen.pack() à la fin ça va bien, mais j'aimerais quand même comprendre pourquoi il me laisse cette espace vide quand je le met pas.

    J'ai finis toutes les petites actions de ma menu bar (règles du jeu, à propos de, scores, saisie des noms de joueurs). Mais maintenant je me demande comment je vais faire pour afficher la fenêtre de jeu, tout en gardant en mémoire la fenêtre d'accueil, je ne sais pas si je me fais bien comprendre

    En fait, je peux afficher la grille de jeu dans une nouvelle fenêtre et laisser la fenêtre d'accueil en attente, ça ça va. Mais je voudrais avoir ma grille de jeu "à la place" de ma fenêtre d'accueil, et que quand je finit ma partie, je puisse revenir sur la fenêtre d'accueil, cette deuxième option est elle réalisable pour un débutant comme moi ?

    Merci encore à tous, ça avance tout doucement

  7. #7
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Soit FAccueil et FJeu( fenetre d'accueil et de jeu )
    pour passer de FAccueil à FJeu : new FJeu(); this.dispose()//this = FAccueil
    pour passer de FJeu à FAccueil : new FAccueil(); this.dispose()//this = FJeu
    (C'est pas le top mais simple à faire)

    Après si tu veux toujours la même fenêtre mais que le contenu change.
    Tu redéfinie contenue de ta JFrame avec setContaintPane(unPanel);

    Ou alors tu utilise un Canvas. Pas trop trop compliquer à utiliser

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Points : 13
    Points
    13
    Par défaut
    Merci, bon pour l'instant je fais ça en deux fenêtre, ça sera aussi bien, mais c'est marrant j'ai essayé de remplacer le contenu de ma première fenêtre quand même pour voir, avec ta méthode (setcontentpane) et j'ai mis dedans un Jpanel vide, ba ça reste inchangé, ça n'écrase rien. Enfin pas grave, c'est un détail.

    Là j'ai crée une grille de Jbutton dans laquelle je vais mettre les images de croix et de rond, le seul problème c'est qu'apparemment il faille des images de la même taille que les JButton car elles ne sont pas redimensionné par rapport au JButton. Et quand on clique sur un bouton, l'image est mise dedans, mais quand je clique sur un autre bouton, il enlève l'image du premier : En gros impossible d'avoir plusieurs boutons avec l'image dedans en même temps. Bizarre, j'essaie de fixer le bouton après avoir mis l'image dedans...


    bon avec setIcon ça fonctionne bien, et je supprime le MouseListener dès qu'un bouton contient une image. J'ai alterné l'image croix et l'image rond.
    Tout fonctionne bien, reste plus qu'à simplifier tout ça parce que là j'ai vraiment ça "à l'arrache", j'ai crée mes boutons un par un, au lieu de faire un tableau tout bête

    Reste plus qu'à faire les comparaisons des combinaisons gagnantes (3 croix, 3 ronds en ligne, colonne, diagonale) et c'est bon

    Après je m'atelerai à un mode contre l'ordi mais là c'est autre chose au niveau de l'IA à réaliser...



    Merci encore à tous, je reviendrais surement demain avec des questions sur des problèmes imprévus, mais en attendant, je vais dormir

    Bonne nuit à tous

    Merci encore à tous

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Points : 13
    Points
    13
    Par défaut
    Bon, bilan de la journée, j'ai réussi à mettre mes boutons dans un tableau, j'ai tout "proprifié"

    Tout marche bien, il y a juste un truc que je voudrais faire, j'ai deux JComboBox (une pour chaque joueur) dans laquelle je vais mettre le symbole choisi (X ou O) . Je voudrais que quand le joueur 1 choisisse la croix (X), la liste de choix du joueur 2 soit limité au rond (O) et inversement.
    J'ai réussi à la faire avec des actionListener sur chaque JcomboBox en supprimant les items voulus.

    Mais je voudrais aller plus loin, par exemple je sélectionne "X" pour le premier joueur, il ne reste plus que "O" pour le choix du deuxième joueur, mais si je veux finalement changer avant de valider, et choisir "O" pour le joueur 1, j'ai un problème, car j'ai déjà supprimé certains items pour le deuxième joueur. J'ai essayé de remettre tous les choix dans les Box au début de chaque Action listener mais ça ne marche pas bien ...

    Merci d'avance

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Points : 13
    Points
    13
    Par défaut
    Voila ce que j'ai pour l'instant, j'ai rajouté un choix "aléatoire" pour les symboles, là ça ne marche pas, ça bugg complètement :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    symbolej1.addActionListener(new ActionListener(){
    					public void actionPerformed(ActionEvent arg0) {
    						symbolej2.removeAllItems();
    						symbolej2.addItem("Croix : X");
    						symbolej2.addItem("Rond : O");
    						symbolej2.addItem("Aléatoire");
    						if(((String)symbolej1.getSelectedItem())=="Croix : X"){
    							symbolej2.removeItemAt(0);
    							symbolej2.removeItemAt(1);
    						}else if(((String)symbolej1.getSelectedItem())=="Rond : O"){
    							symbolej2.removeItemAt(1);
    							symbolej2.removeItemAt(1);
    						}else{
    							symbolej2.removeItemAt(0);
     
    						}
    					}			
    				});
     
    				symbolej2.addActionListener(new ActionListener(){
    					public void actionPerformed(ActionEvent arg0) {
    						symbolej1.removeAllItems();
    						symbolej1.addItem("Croix : X");
    						symbolej1.addItem("Rond : O");
    						symbolej1.addItem("Aléatoire");
    						if(((String)symbolej2.getSelectedItem())=="Croix : X"){
    							symbolej1.removeItemAt(0);
    							symbolej1.removeItemAt(1);
    						}else if(((String)symbolej2.getSelectedItem())=="Rond : O"){
    							symbolej1.removeItemAt(1);
    							symbolej1.removeItemAt(1);
    						}else{
    							symbolej1.removeItemAt(0);
    							symbolej1.removeItemAt(0);
    						}
    					}			
    				});

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Points : 13
    Points
    13
    Par défaut
    J'ai une autre question, j'ai fait mon mode contre l'ordinateur. Mais je voudrais ralentir un peu la réflexion de celui ci au moment où il met son symbole.

    Par exemple :

    bouton.setCroix() : ça c'est moi, je met l'image de la croix dans mon bouton
    bouton.setAleatoire() : ça c'est l'ordinateur qui met un pion.

    dans ma méthode setAléatoire, j'ai mis un Thread.sleep(1000);

    Le problème c'est que je clique pour mettre mon pion, et le thread ralentit MON affichage, et ensuite il met tout de suite le pion de l'ordinateur.

    Comme si dès que je clique sur mon bouton, il n'a même pas le temps de mettre mon image dedans qu'il est coupé dans son action par le Thread qui vient juste après dans le code.

    Il faudrait qu'il finisse d'abord de mettre mon pion, avant de faire la suite.

  12. #12
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Ne jamais faire de Thread.sleep() dans le thread de l'interface graphique.

    Un tuto expliquant le pourquoi du comment de la relation GUI/Threads en Swing/AWT. A lire impérativement.

Discussions similaires

  1. Algorithme d'élagage alpha-beta en java appliqué au jeu du morpion 3*3
    Par sampaiX dans le forum Intelligence artificielle
    Réponses: 4
    Dernier message: 06/05/2010, 13h38
  2. Jeu de morpion
    Par saphire dans le forum Débuter
    Réponses: 4
    Dernier message: 02/11/2008, 00h26
  3. Besoin d'aide jeu du morpion
    Par narcis60floyjo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/02/2008, 15h14
  4. petit bog dans mon jeu de morpion
    Par 123quatre dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 19/06/2006, 11h10
  5. [LG]Un jeu du morpion
    Par yffick dans le forum Langage
    Réponses: 10
    Dernier message: 23/12/2003, 18h52

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