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

 Java Discussion :

Jeu de plateau


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut Jeu de plateau
    Bonjour,
    je souhaiterais mettre en oeuvre un petit jeu de plateau, du stylo "la bonne paye" ou "Monopoly".
    Cependant je ne sais pas trop par où commencer, je n'ai jamais vraiment codé de "gros" programmes en java, ce serait mon premier.
    J'ai donc commencé par faire quelques diagrammes UML pour me mettre sur la piste, mais je ne sais pas si ça pourrait marcher.
    De plus je ne vois pas trop comment choisir entre une classe abstraite et une interface...

    Voici à quoi j'avais pensé :
    - Interface Plateau
    - Interface Case qui implémente Plateau
    - Tout un tas de classes concrètes qui implémentent Case, comme la Case Départ, ou Prison pour le Monopoly
    - Pour le Monopoly, j'ai fait une classe abstraite Propriété avec 3 classes qui étendent classe abstraite (Terrain, gare, Service Publique).

    Cependant je ne suis pas sûr de moi, car dans mon main je ne pourrais pas faire : Plateau plateau1 = new Plateau(); par exemple, comme Plateau est une interface ?
    Du coup peut être faudrait-il faire une classe plateau, qui contiendrait un arraylist de Case ?

    Bien sûr il faut gérer le joueur aussi, mais chaque chose en son temps
    Pour le moment, pas d'interface graphique, je voudrais déjà tester quelque chose qui marche en mode console.

    Pourriez-vous me donner votre avis, et m'aider s'il vous plait ?

    Merci, et bonne journée !

  2. #2
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Bonjour,
    avec votre description, j'ai envie de dire que Plateau ne devrait pas être une interface, mais plutôt une clase qui implémente Case et une autre interface du genre modelePlateau qui embarquerait les méthodes abstraites acutellements définies dans Plateau.
    Ainsi, il ne resterait plus qu'à définir un constructeur pour la classe Plateau qui demanderait en paramètres le nombre de cases, et une collection de vos classes abstraite Terrain, Gare, etc.. pour "habiller" les cases. Les méthodes implémentées par l'interface modelePlateau auront pour rôle de définit l'action à mener lorsqu'un pion arrive sur la case.
    Enfin, c'est une idée.
    Il y doit y avoir u bon millier d'autre possibilités.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  3. #3
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut.
    Mon opinion, pour ce qu'elle vaut :
    -une classe plateau, avec une Liste de Case. Une liste te permet de maintenir l'odre des cases, d'avoir un index,...
    -une classe Case, qui sais s'il y a un pion dessus, et qui implémente des ReglesCase.
    -des interfaces ReglesCases, qui definissent les actions possibles sur chaque cases.
    Tu fait un constructeur de plateau qui prend la liste en paramètre, des méthodes statiques avec des listes prédéfinies, et tu as tes règles. Reste a faire l'interface graphique.
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

  4. #4
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Il est parti St-42-FCM-57 ?
    Dommage, ça semblait intéressant...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  5. #5
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Excusez-moi, je n'avais pas eu vos réponses.
    Comme je n'avais pas eu de réponses pendant un certain temps, je pensais ne plus en avoir... Du coup j'ai fait quelque chose, mais ce n'est pas exactement pareil que vous.
    J'ai donc une interface case, avec des classes qui viennent l'implémenter. Ensuite j'ai une classe plateau qui est, en fait, une liste de "case".
    Ce n'est peut-être pas la méthode la plus adéquate, mais je ne peux plus changer maintenant. Et puis ça fait ce que je demande...

    Vous pourriez peut-être m'aider, car je bloque sur un point : les cartes. Par exemple, au monopoly, il en existe 2 types : cartes chances et cartes caisse de communauté.

    Moi j'avais pensé à ce type d'architecture :
    - interface Carte
    - Classe abstraite CarteChance qui implémente Carte
    - Classe concrètes qui héritent de CarteChance, comme la carte AllerEnPrison par exemple.

    Seulement, dans mon main, pour piocher une carte, il va falloir que je fasse quelque chose du style "joueur.piocherCarteChance()". Et c'est là que je bloque. Je ne vois pas où déclarer une liste de cartesChance (qui représentera mon tas de cartes chance)...

    Bonne journée à vous, et merci pour l'aide déjà fournie !

  6. #6
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    En fait, il vous faudrait une liste de textes de cartes chances, et une liste de textes de cartes Caisse de communauté si toutefois il s'agissait du Monopoly. De toute manière, vous allez bien devoir stocker les textes de chaque carte quelque part. Soit sous forme d'enregistrements dans une base de données, soit sous forme de simple fichiers textes locaux. Dans la phase d'initialisation du jeu, il suffira de charger aléatoirement tous les textes des cartes chances dans une List<String> et faire de même avec les textes des autre cartes. A l'issu de cette initialisation vous aurez à votre disposition deux listes prêtes à l'emploi que vous pourrez manipuler comme on manipule le tas de carte sur le vrai plateau de jeu. Il suffira pour chaque tirage de supprimer le premier enregistrement de la liste lors de l'utilisation de la carte, et reformer cette liste une fois vide en procédant à nouveau aléatoirement. Ou tout simplement en remettant l'enregistrement en fin de liste selon le choix du mode de jeu sélectionné.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  7. #7
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Ah oui je pense voir le principe. Mais si je fais comme ça, je n'ai pas besoin de créer tout ce que je pensais ? (c'est a dire interface, classes abstraites, et concrètes)

  8. #8
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Bonsoir,
    L'idée me semblait sympa. Cependant, je me permettrai d'ajouter quelque chose qui me semble important.
    Je ne suis pas un professionnel de l'informatique, je ne travaille pas de la même façon. Pour moi, les analyses par méthode Merisel, UML, UML2 ou autre me sont totalement étrangère puisque je travaille seul.
    Hors, je remarque que vous êtes étudiant, donc, peut-être étudiez-vous l'informatique, et je ne voudrai pas vous attirer vers les "mauvaises" habitudes.
    En d'autre termes, ma proposition tient plus d'une solution de code que d'une solution de conception.
    Je ne connais pas la nature de votre projet, s'il se limite à un jeu de plateau précis, ou bien s'il est plus ambitieux et vise une sorte de moteur de jeu de plateau générique qui pourrait avec très peu d'ajouts/modifications être utilisé pour produire toute sorte de jeux ?
    Dans le cas d'un jeu unique, ma proposition peut être intéressante. Dans le cas d'autre jeux, la gestion des cartes peut devenir plus complexe et rendrait vite cette solution caduque. Quoi qu'il en soit, si vous avez déjà créé votre arborescence de classes, ne remettez pas tout en question même si l'idée est bonne. Vous pourrez probablement la reprendre au moment du codage.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  9. #9
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut.

    Perso, je dirais que le mieux est mix des deux :
    - une interface carte qui permet de réutiliser pour un autre jeu
    - une classe concrète CarteChance ( pas besoin d'abstraction je pense : les différentes cartes sont des instances, pas des sous classes)
    - une Factory qui te genere la liste de carte au démarrage.

    Pour la methode de pioche, il semble logique qu'elle soit sur la classe Case. Logiquement, ta case doit connaitre le plateau, et le joueur présent. Sois ils sont déjà enregistrés comme champ, soit tu les passes en paramètres. C'est pour ce genre de cas que je t'avais conseillé une interface RegleCase

    Bon courage.
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

  10. #10
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Tout d'abord merci pour vos réponses.
    J'ai fait un peu comme Cafeinoman me l'a suggéré, car si je n'avais pas fait de classe, je pense que je me serai fait taper sur les doigts
    Du coup j'ai une interface Carte, et des classes concrètes telles que CarteChance qui implémentent Carte.
    J'ai testé, ça marche, donc je ne dois pas être trop mal. En tout cas, merci beaucoup à vous.

    J'ai une question : est-ce que vous vous y connaissez en interface graphique ?
    Car je voudrais savoir s'il était possible de faire la chose suivante :
    gérer tout mon programme par la console, et dans une interface graphique, n'afficher qu'un plateau, avec les pions ?
    C'est-à-dire que toutes les instructions à faire apparaîtraient sur la console, et mon interface graphique ne servirait, au moins dans un premier temps, qu'à afficher la position des différents joueurs via des images de pions.

  11. #11
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    C'est un peu ce que je pensais, vous avez raison, mes suggestions ne sont probablement pas inutiles, mais respecter les standards d'architecture si vous voulez restituer un travail professionnel est de loin la meilleure voie et dans ce cas, votre application deviendra plus facilement évolutive.
    Sinon, pourriez-vous nous préciser dans quel environnement vous travaillez ?
    Windows, Linux, MacOS ?
    Comment developpez-vous, à la main avec notepad, Eclipse, NetBeans, autre ?
    Pour ma part, j'utilise NetBeans. Ces outils sont dits WYSIWYG et permettent de grandement faciliter la création d'interfaces graphique tout en vous apportant un support au développement en gérant la syntaxe, la documentation etc...
    Pour ce qui est de l'utilisation de la fenêtre shell de votre OS comme console de contrôle de votre jeu pourquoi pas. De toute façon, ce qu'il faut bien comprendre, c'est que quel que soit le cas de figure, une application Java est toujours lancée depuis une fenêtre shell, que cela soit fait à la main ou pas. En effet, dans les premières versions de Java, l'exécutable javaw.exe n'existait pas, on lançait directement java.exe. Donc, à cette époque, lancer un programme Java nécessitait l'ouverture d'une fenêtre shell que l'on réalisait généralement par le biais d'un batch DOS, fenêtre que l'on réduisait dans la barre des tâches après lancement de l'application, mais qui restait là. Puis, javaw.exe est arrivé. Il fait exactement la même chose, à une petite différence près, il masque la console, du coup on ne la voit pas. Quoi qu'il en soit, on ne lance jamais un programme Java, on lance une instance de machine virtuelle Java en lui passant en paramètre le nom de notre classe main, ou du jar plus quelques directives.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  12. #12
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Donc je travaille sur MacOs ou sur Pc, ça dépend.
    J'utilise Eclipse également. Mais au début, je compilais à la main en utilisant le terminal ou l'invite de commande, donc je vois un petit peu le principe.
    Merci pour ces renseignements !

    Si j'utilise une interface graphique, il y a une contrainte : utiliser javafx.
    Seulement, je n'ai jamais vraiment codé une interface graphique, hormis un petit programme d'initiation.

    En fait moi ce que je pense faire, c'est très basique : mettre une image de fond de mon plateau, gérer le programme par la console, et déplacer mes pions en fonction des actions du jeu. Donc ça, vous me dîtes que c'est possible ? L'interface graphique n'empêche pas l'interaction avec la console ?

  13. #13
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Non pas du tout, c'est juste que généralement l'utilisateur n'est pas habitué a devoir interagir avec une console lorsqu'il lance une UI (encore plus sous macOS*). Mais pour un développeur ça peut être sympa pour lancer des commandes et "hacker" les phases de jeu pour procéder a des tests. C'est jusqu'il faudra concevoir ça comme un module optionnel désactivable pour le produit fini.

    *Puisque sous macOS la commande java n'est disponible que si tu installes le JDK et que si tu package ton programme en application pour le store tu peux oublier la console.
    Généralement tant sous Windows que sous macOS, l'utilisateur lambda ne s'attend pas trop a voir un console lorsqu'il lance un programme et sa première réaction est toujours de la ferme entrainant ainsi la fermeture du programme.

    Concernant le dessin du plateau, des case, du jeu, etc. , tu va globalement avoir deux manières de faire :
    • Une manière 2D traditionnelle qui s'apparente a ce que tu aurais pu faire en AWT/Swing/Java2D qui consiste a tout dessiner en bitmap avec la classe Canvas. Ici le plateau peut être une image qui est composée dans le Canvas
    • Utiliser des nœuds du SceneGraph, donc avoir une approche plus vectorielle des choses. Ici le dessin du plateau peut être un image placée dans une ImageView ou en tant que skin via CSS.


    Un truc intéressant sur lequel réfléchir c'est l'internationalisation. Il existe autant de plateau de Monopoly qu'il existe de langue, avec entre autres des rues et gares différentes. Mais en fait le plateau reste le même et seuls les labels des cases changent, de manière générale une case donnée est toujours a la même place quelque soit la langue/version utilisée. Même chose pour un Monopoly édition spéciale genre Monopoly Star Wars, ici ce sont les polices, couleur et l'image même du plateau qui vont changer en plus des labels.
    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

  14. #14
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Merci pour cette réponse.
    Du coup il vaut mieux oublier l'idée que j'avais ?
    Car j'ai un peu cherché sur différents tutos, et ça a l'air vraiment difficile de faire une interface graphique de à a z... Et comme je l'ai dit, je voulais juste une interface pour l'affichage des pions, pas spécialement pour interagir avec l'utilisateur.

  15. #15
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Dans tous les cas, tu auras déjà pas mal de boulot à abattre et fort à faire même en se contentant de faire simplement de l'affichage et sans aucun contrôle/composant pour interagir avec le plateau, les pions, les cases ou les cartes avec ni aucune gestion des events graphiques de la souris, touch ou du clavier.
    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

  16. #16
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    J'ai essayé de faire quelque chose, mais je n'arrive pas vraiment, et je ne trouve pas de solution sur internet.
    J'ai donc affiché une image de mon plateau, jusque là ça marche. Ensuite, à côté j'aurais souhaité afficher une console, donc celle-ci serait intégrée à l'interface graphique. Apparemment ce n'est pas possible, mais il faut faire des redirections, seulement je ne comprends pas trop, auriez-vous une idée ?

  17. #17
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Et si tu nous montrais ce que tu as tente de faire, a la fois pour le plateau et pour la console. Parce que bon, il est hors de question que je me lance dans la programmation de ton jeu a ta place
    Par la suite tu créeras des sujets dédiés pour chacun de tes problèmes (apprendre a découper son projet en sous-parties/modules indépendants tant dans le projet que dans sa tête est une bonne pratique).
    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

  18. #18
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Non, je n'avais pas l'intention de déléguer mon travail...
    Autant, pour programmer pour la console, j'arrive à me débrouiller car j'ai des bases, autant pour l'interface graphique c'est le néant, je voudrais juste quelques pistes, une fois que j'aurais assimilé le principe, je pense que ça ira mieux.

    Du coup, depuis hier j'ai tenté diverses choses, mais rien de bien concluant...
    Voici mon dernier essaie :

    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
     
     
    public class FenetrePrincipale {
     
    	private class EvtValider implements EventHandler<ActionEvent> {
     
    		public void handle(ActionEvent event) {
    			//Pour l'instant il n'y a rien encore ici. Ce crois que je devrais y mettre le déroulement de ma partie
    			}
    		}
    	}
     
     
    	private Stage stage;
    	private VBox root;
     
    	public FenetrePrincipale(Stage _stage) throws IOException {
    		stage = _stage;
    		final Label l1 = new Label("Au tour du joueur : "); 
            GridPane.setConstraints(l1, 0, 0); 
            final Label l2 = new Label("NomJoueur"); 
            GridPane.setConstraints(l2, 0, 1); 
    		final Button b1 = new Button("Joueur Suivant"); 
            GridPane.setConstraints(b1, 2, 0); 
            final Button b2 = new Button("Afficher Proprietes"); 
            GridPane.setConstraints(b2, 3, 0); 
            final Button b3 = new Button("Acheter Biens"); 
            GridPane.setConstraints(b3, 2, 1); 
            final Button b4 = new Button("Vendre Biens"); 
            GridPane.setConstraints(b4, 3, 1);
            final Button b5 = new Button("Abandonner"); 
            GridPane.setConstraints(b5, 4, 1);
     
            InputStream is = Files.newInputStream(Paths.get("res/image/Plateau.jpg"));
    		Image img = new Image(is);
    		is.close();
    		ImageView imgView = new ImageView(img);
    		imgView.setFitHeight(700);
    		imgView.setFitWidth(700);
            GridPane.setConstraints(imgView, 0, 2);
     
            root.getChildren().setAll(imgView,b1,b2,b3,b4,b5,l1,l2); 
            final Scene scene = new Scene(root, 1000, 800); 
            root.setGridLinesVisible(true);//grille visibles
            stage.setTitle("Jeu"); 
            stage.setScene(scene); 
            stage.show(); 
     
    	}
    Bon là avec ce code, j'ai mis mon image à gauche, puis quelques boutons à droite. Seulement, je ne sais pas si avec cette méthode, je pourrai placer des pions sur l'image, enfin c'est vraiment flou pour moi...

    Peut-être que d'utiliser java scene builder serait une bonne idée également ?

  19. #19
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Une petite correction car dans ton code tu manipules tout comme si ta racine était une GridPane alors que dans le code c'est une VBox. Et j'ai change la modalite de chargement de l'image de fond pour le rendre plus facile pour mon test mais tu peux remettre comme tu faisais (PS : utilise try-with-resources pour fermer automatiquement le flux)

    Nom : monopoly.jpg
Affichages : 4681
Taille : 68,1 Ko

    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
    public class FenetrePrincipale extends Application {
     
        private class EvtValider implements EventHandler<ActionEvent> {
     
            public void handle(ActionEvent event) {
                //Pour l'instant il n'y a rien encore ici. Ce crois que je devrais y mettre le déroulement de ma partie
            }
        }
     
        private Stage stage;
        private GridPane root;
     
        private Image boardImage;
     
        @Override
        public void init() throws Exception {
            final URL plateauURL = getClass().getResource("Plateau.jpg");
            boardImage = new Image(plateauURL.toExternalForm());
        }
     
        @Override
        public void start(Stage primaryStage) throws Exception {
            stage = primaryStage;
            final Label l1 = new Label("Au tour du joueur : ");
            GridPane.setConstraints(l1, 0, 0);
            final Label l2 = new Label("NomJoueur");
            GridPane.setConstraints(l2, 0, 1);
            final Button b1 = new Button("Joueur Suivant");
            GridPane.setConstraints(b1, 2, 0);
            final Button b2 = new Button("Afficher Proprietes");
            GridPane.setConstraints(b2, 3, 0);
            final Button b3 = new Button("Acheter Biens");
            GridPane.setConstraints(b3, 2, 1);
            final Button b4 = new Button("Vendre Biens");
            GridPane.setConstraints(b4, 3, 1);
            final Button b5 = new Button("Abandonner");
            GridPane.setConstraints(b5, 4, 1);
            ImageView imgView = new ImageView(boardImage);
            imgView.setFitHeight(700);
            imgView.setFitWidth(700);
            GridPane.setConstraints(imgView, 0, 2);
     
            root = new GridPane();
            root.getChildren().setAll(imgView, b1, b2, b3, b4, b5, l1, l2);
            final Scene scene = new Scene(root, 1000, 800);
            root.setGridLinesVisible(true);//grille visibles
            stage.setTitle("Jeu");
            stage.setScene(scene);
            stage.show();
     
        }
     
        public static void main(String[] args) {
            launch(args);
        }
    }
    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

  20. #20
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Pour le placement des pions, cartes, labels etc. Non, tu ne vas pas pouvoir les positionner comme tu veux via un GridPane.

    Prenons un approche vectorielle (pour commencer*) : chaque élément est représenté par un nœud graphique rajouté dans le SceneGraph. Tu dois de créer un nouveau contrôle Plateau ou Board qui hérite de Region ou Pane. C'est ce nœud-la qui sera placé dans le GridPane et ensuite tout se fera dans cette nouvelle classe/ce nouveau contrôle. Tu dois ensuite surcharger sa méthode layoutChildren() pour placer les divers éléments. Certains seront statiques (ne bougerons pas) comme par exemple les noms des rues et les divers trucs écrits sur les cases tandis que d'autres éléments (ex: les pions, les maisons et hôtels, les cartes, l'argent, etc.) peuvent être amenés a apparaitre, disparaitre, se déplacer etc. tu peux donc envisager plusieurs couches/calques ou sous régions dans ce contrôle (ex: la couche statique, la couche dynamique, la couche qui affiche des messages par dessus tout le reste, etc.). Une couche/un calque ça peut être simplement une autre Region ou Pane, enfant du plateau, qui a les mêmes dimensions et qui contient uniquement les éléments de cette couche-la.

    *Si tu trouves après coup que l'approche vectorielle ne te conviens pas pour des raisons de performance, d'utilisation mémoire ou que tu préfères simplement faire un jeu bitmap 2D classique, il faudra alors revoir cette partie qui modélise le plateau et partir sur un Canvas a la place. Le reste de l'interface avec les divers boutons de contrôle peut rester identique dans les deux cas.

    De plus, a priori la manière dont tu modélise le plateau / le jeu n'a que peu de rapport avec ce que tu veux faire pour la console, donc tu peux sans soucis gérer ces deux parties de ton projet de manière séparées.
    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

Discussions similaires

  1. CAYLUS - Jeu de plateau
    Par Blaede dans le forum Projets
    Réponses: 12
    Dernier message: 26/11/2008, 18h24
  2. Projet jeu de plateau, demande d'aide
    Par Fullmetal82 dans le forum Projets
    Réponses: 1
    Dernier message: 24/06/2007, 01h58
  3. [.NET 2.0] Jeu de plateau style démineur
    Par Aspic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 13/02/2007, 13h57
  4. [GUI]jeu de plateau
    Par le Daoud dans le forum Interfaces Graphiques en Java
    Réponses: 11
    Dernier message: 31/08/2005, 14h38

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