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

avec Java Discussion :

Plateau jeu de belote


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Plateau jeu de belote
    Bonjour à tous,

    J'ai fait beaucoup de recherches avant de poster et comme je m'enfonce de plus en plus je prefere vous posez la question. En fait je suis en train de créer un jeu de belote simple en C/S (je sais gros projet pour un débutant). J'ai créé mon plateau de jeu et ce que je voudrais c'est :
    1°) Comment améliorer mon code en gardant le meme résultat? (j'ai essayé plusieurs Layout mais c'est le seul qui convienne)
    2°) Comment puis-je raffraichir mon plateau de jeu en y affichant les données, c'est a dire recupérer les paramètres et les afficher.

    ================
    Voici mon 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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    import javax.swing.*;
    import javax.swing.border.Border;
    import javax.swing.border.LineBorder;
     
    import java.awt.*;
     
    public class PlateauJeu extends JFrame{
     
    	public PlateauJeu(){
     
    		construitJeu();
    	}
    //Construction du plateau de jeu
    	public void construitJeu(){
     
    		JPanel panel = new JPanel();
    		//this.setContentPane(panel);
    		Border border = LineBorder.createBlackLineBorder();
     
    		panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
            panel.setLayout(new GridLayout(5, 10, 5, 5));
            //Construction haut du plateau
            String[] haut = {
                "Gagnant", "", "", "Joueur1", "Joueur2", "Joueur3", "Joueur4", "","","Atout"};
            for (int i = 0; i < haut.length; i++) {
                if (i == 1 || i == 2 || i == 7 || i == 8) 
                    panel.add(new JLabel(haut[i]));
                   	//buttons[i].setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
                else 
                    panel.add(new JButton(haut[i]));
     
            }
            //Construction milieu du plateau
            JLabel gagnant = new JLabel("V");
            gagnant.setBorder(border);
            panel.add(gagnant);
            panel.add(new JLabel(haut[2]));
            panel.add(new JLabel(haut[2]));
            JLabel p1 = new JLabel("P");
            p1.setBorder(border);
            panel.add(p1);
            JLabel p2 = new JLabel("P");
            p2.setBorder(border);
            panel.add(p2);
            JLabel p3 = new JLabel("P");
            p3.setBorder(border);
            panel.add(p3);
            JLabel p4 = new JLabel("P");
            p4.setBorder(border);
            panel.add(p4);
            panel.add(new JLabel(haut[2]));
            panel.add(new JLabel(haut[2]));
            JLabel atout = new JLabel("A");
            atout.setBorder(border);
            panel.add(atout);
            //ligne blanche
            for (int i = 20; i < 30; i++){
            	panel.add(new JLabel(haut[2]));
            }
     
            //bas de la fenetre
            panel.add(new JLabel(haut[2]));
            JLabel j1 = new JLabel("P");
            j1.setBorder(border);
            panel.add(j1);
            JLabel j2 = new JLabel("P");
            j2.setBorder(border);
            panel.add(j2);
            JLabel j3 = new JLabel("P");
            j3.setBorder(border);
            panel.add(j3);
            JLabel j4 = new JLabel("P");
            j4.setBorder(border);
            panel.add(j4);
            JLabel j5 = new JLabel("P");
            j5.setBorder(border);
            panel.add(j5);
            JLabel j6 = new JLabel("P");
            j6.setBorder(border);
            panel.add(j6);
            JLabel j7 = new JLabel("P");
            j7.setBorder(border);
            panel.add(j7);
            JLabel j8 = new JLabel("P");
            j8.setBorder(border);
            panel.add(j8);
            panel.add(new JLabel(haut[2]));
            panel.add(new JLabel(haut[2]));
     
            int j = 1;
            for (int i = 42; i < 50; i++){
            	panel.add(new JButton(""+j));
            	j++;
            }
     
            add(panel);
     
            setSize(900, 400);
        	setTitle("JEU DE BELOTE");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLocationRelativeTo(null);
            setVisible(true);
     
     
    	}
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		PlateauJeu pla = new PlateauJeu();
    	}
    }
    ===========

    Merci d'avance pour vos réponses et désolé de vous ennuyer avec sa.

    Bonne journée,

  2. #2
    Membre actif Avatar de Roy Miro
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 273
    Points : 290
    Points
    290
    Par défaut
    Bonsoir,

    Tu as la méthode repaint() que tu peux appeler sur ton panel pour que ce dernier se redessine.
    Qu'est-ce que tu appelles "paramètres"?

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Salut,
    Merci pour ta réponse. En fait je voudrais que mes Label "recoivent" les données comme les noms des cartes et les afficher
    J'ai cru comprendre qu'on ne peut pas passer de paramètres pour mettre a jour les JLabel dans un constructeur.
    Peux tu m'éclairer?
    Merci

  4. #4
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Regarde du coté des disgn pattern mvc et observer, ca te simplifiera la vie pour ton jeu de plateau ;-)

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Salut,
    Merci pour ta réponse. Maintenant je sais que sa existe. Mais je pense pas etre assez experimenté pour pouvoir implémenter ça.
    Si vous avez d'autres réponses je suis a l'ecoute.

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    tu peux utiliser setText() sur certains composants, dont le JLabel.
    Mais au final tu devras cliquer sur les cartes ? Dans ce cas le plus simple serait peut-être d'utiliser directement des boutons pour les cartes aussi (et plus tard tu pourras mettre des images).

    Sinon, je ne comprends pas bien ton plateau. Par exemple, pour les cartes à quoi servent les boutons en-dessous de 1 à 8 ? (D'ailleurs t'as pas que 5 cartes à la belote ? à force de jouer à la belote de comptoir, je ne m'en souviens plus lol)

    En fait, tu fais directement une interface mais je pense que le mieux serait déjà de penser à tes structures de stockage, par exemple ton tableau ou classe Jeu, Main, etc.

    Au fait que veux-dire "C/S" ?
    Vive les roues en pierre

  7. #7
    Membre actif Avatar de Roy Miro
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 273
    Points : 290
    Points
    290
    Par défaut
    Merci pour ta réponse. Maintenant je sais que sa existe. Mais je pense pas etre assez experimenté pour pouvoir implémenter ça.
    Bonjour,
    Pour commencer avec MVC, tu peux utiliser ce tuto très concret. Je te conseille vivement de prendre le temps pour bien l'étudier. Tu peux laisser de côté la partie parlant des threads pour le moment.

    http://rom.developpez.com/java-listeners/
    ou au choix:
    http://baptiste-wicht.developpez.com...onception/mvc/

    Au final, si tu as suivi ce tuto, tu devrais avoir ta classe PlateauJeu (qui hérite de JFrame) qui implémente en plus une interface BeloteListener:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     interface BeloteListener{
               public void updateLabels(String[] newLabels);
    }
    Dans ta classe PlateauJeu, tu devras avoir une méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // newLabels est un tableau contenant les nouveaux libellés à afficher
    public void updateLabels(String[] newLabels){
    //Mis à jour des champs, des labels ou de tout autre composant de ton Plateau de Jeu. Exemple:
     
      label1.setText(newLabels[0]);
      label2.setText(newLabels[1]);
     
    //etc.
    }
    }
    Les points clés ce sont les méthodes fireXXX et le fait que PlateauJeu doive implémenter l'interface BeloteListener. Dans un premier temps, pour faire simple, tu n'es pas obligé de passer par les objets de types XXXEvent.

    Une telle conception reglera pas mal de soucis potentiels.
    N'hésite pas si tu as des questions.

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Threads
    Bonjour a tous,
    Merci de vos réponses.
    C/S => client serveur. désolé c'est la manie du prof.
    Non le jeu de belote tu as 8 cartes. Les 4 cartes d'en haut sont celles qui sont jouées (que tout le monde verra du coup)
    J'ai avancé un peu sur le jeu mais j'ai une question (vous aviez dit de ne pas hésiter ^^)
    Le client se connecte. Je lance un thread par client pour la distribution des cartes. Ensuite j'attends que le joueur 1 joue, c'est a dire qu'il tape la carte voulue.
    Pour pouvoir gérer la réception de la carte jouée je dois créer un nouveau thread par client?
    Peut on récupérer les clients dans un tableau (avec leur ip) et gérer l'envoi et la réception avec ce tableau? Est ce efficace?

    En fait je voudrais savoir quel joueur joue. Vu que les threads fonctionnent en parralleles, le joueur 2 peut jouer avant le 1 non?

    Ce qui signifie : - un thread pour la distribution des 2 premieres cartes
    - un thread pour la distribution des 3 cartes suivantes
    - envoi de la carte atout
    - un thread pour les cartes restantes
    - attente de la première carte joué du joueur 1 puis joueur 2 etc... (dans un thread?)
    - gestion du vainqueur
    - et boucle

    Cela semble correct?


    Je suis en train de m'embrouiller

    Désolé si mes questions sont abstraites ou betes.

    Merci encore

  9. #9
    Membre actif Avatar de Roy Miro
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 273
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    En réfléchissant tout haut, je dirais un thread côté serveur pour chaque partie.

    Quand un client créé une partie, le serveur instancie le thread. Ce dernier gérera l'avancée de la partie.

    Une partie ayant 4 joueurs, on a donc 4 clients gérés par un thread.
    Un thread sera comportera à cet égard comme un serveur.

    Pour mettre à jour l'affichage, le client devra "s'enregistrer" auprès du serveur. Comprendre, le thread devra avoir une référence de ton client pour invoquer sa méthode "update" en vue de la màj de l'affichage. D'où l'intérêt du modèle MVC (posts ci-dessus).

    Qu'as-tu déjà développé?

    Quelles sont les exigences fonctionnelles? Joueur 1 créé une partie puis attend que 2, 3 et 4 se connecte à cette partie? Ou la partie est créée une fois qu'on a les 4 joueurs?

    Quant à la gestion des joueurs avec des adresses ip, peut-être que d'autres pourront répondre mieux que moi.

    Bon courage

  10. #10
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par Doun's Voir le message
    En fait je suis en train de créer un jeu de belote simple en C/S (je sais gros projet pour un débutant).
    Je ne te le fais pas dire...
    C'est un projet que tu fais pour les cours ? Ton prof t'a-t-il encouragé à faire une Belotte ?
    J'ai développé, il y a deux ans, un jeu de Manille Client/Serveur, sur lequel j'ai ensuite développé le Whist belge et le Rikiki. C'est vraiment difficile ; il y a beaucoup de choses à prendre en compte.

    Voici le rapport sur mon projet. Ca te donnera une idée d'une bonne architecture pour le tien.
    ftp://ftp-developpez.com/sjrd/cours/rapport-ttg.pdf
    Le projet sur SourceForge.net :
    https://sourceforge.net/projects/tricktakinggame/

    L'idée générale, c'est d'avoir un thread par partie sur le serveur pour gérer la partie en elle-même. Plus un thread par client sur le serveur pour gérer la communication avec le client.
    Quand la partie décide que c'est au tour du joueur 1 de jouer, elle utilise la connexion avec le joueur 1 pour lui dire : "Je veux que tu joues". Puis le client lui répond. Ensuite la partie peut continuer, en disant à tout le monde que le joueur 1 a joué un Valet de Pique, puis en demandant au joueur 2 de jouer. Et ainsi de suite.

    C'est le thread de gestion de partie qui gère tout. Les autres ne sont là que pour lui obéir.

    Maintenant, tu peux envisager la chose de manière totalement différente. Si c'est pour ton cours, ce ne sera peut-être pas possible, mais bon. En fait mon projet est complètement modulaire. Ce qui fait qu'il est possible d'écrire un plugin pour la Belote qui fonctionnerait avec toute la gestion réseau et client que j'ai déjà écrite. C'est ainsi que j'ai écrit trois plugins, pour la Manille, le Whist et le Rikiki.

    Donc éventuellement - à moins que ton challenge ne consiste à tout faire tout seul - tu pourrais te focaliser sur l'écrire d'un plugin Belote pour TrickTakingGame. Ca te faciliterait énormément la tâche, mais c'est peut-être moins drôle pour toi

    À toi de voir...
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Salut a tous,
    Merci pour toutes vos interventions. Grace à toutes vos infos et aux tutos j'arrive a avancer d'une manière régulière. Sa me permet aussi d'apprendre de plus en plus ce langage. Comme vous l'avez dit sa permet de prendre en compte pleins de choses donc rien de mieux non?

    En tout cas merci a tous j'hesiterais pas a vous contacter pour mes questions futures

    Nartrouvé (comme dit chez moi a la réunion "=> a la prochaine")

Discussions similaires

  1. jeu de belote + intelligence artificielle
    Par @NW@R dans le forum Intelligence artificielle
    Réponses: 11
    Dernier message: 14/04/2008, 23h14
  2. Plateau de jeu à hexagones, Java ou Flash ? + aide
    Par PopovSquare dans le forum Développement 2D, 3D et Jeux
    Réponses: 16
    Dernier message: 02/03/2007, 23h59
  3. demande d'aide pour faire un plateau de jeu en java
    Par trodurlejava dans le forum Langage
    Réponses: 4
    Dernier message: 09/01/2007, 12h40
  4. [GUI]jeu de plateau
    Par le Daoud dans le forum Interfaces Graphiques en Java
    Réponses: 11
    Dernier message: 31/08/2005, 13h38

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