Jeu de cartes: besoin de conseils

Fermé
Xenthys Messages postés 31 Date d'inscription dimanche 30 décembre 2012 Statut Membre Dernière intervention 2 mars 2013 - Modifié par Xenthys le 23/02/2013 à 12:38
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 24 févr. 2013 à 13:43
Bonjour,

Je dois pour un projet créer un jeu de cartes mais j'ai de plus en plus de problèmes qui s'accumulent et je me demande si tout n'est pas lié à ma façon de voir les choses.
Je dois créer un jeu de cartes et je suis passé par une interface graphique très simple avec uniquement des boutons. Sur ces boutons, il y a des images des cartes.

Je souhaiterais savoir comment faire à ce niveau là: j'ai dissocié bouton et image d'un côté, et carte de l'autre, ce qui fait que lorsque j'échange deux images (entre la main d'un joueur et le tapis) pour simuler le fait que ce joueur joue, les cartes elles ne bougent pas pour le programme. Or j'ai absolument besoin du numéro de ces cartes pour pouvoir savoir qui remporte le jeu et en échangeant les images, je ne sais pas comment faire pour avoir les caractéristiques de la carte qui a été jouée.

Je suis un peu désespéré étant donné que j'ai déjà écrit pas mal de lignes de code, et je me rends compte qu'il faudrait peut-être tout réécrire en utilisant un SButton que j'inventerais et qui aurait un JButton, une image et une carte pour pouvoir avoir accès à tout d'un seul coup. Mais dans ce cas-là, je devrais réécrire également absolument toutes les méthodes dont j'ai besoin et qui ne fonctionnent qu'avec JButton (getActionCommand(), setIcon() ...), sans compter reprendre tout ce que j'ai déjà fait et ça fait vraiment beaucoup beaucoup beaucoup de méthodes à écrire et beaucoup de code à reprendre. Comment faire: avez-vous des conseils à me donner? Puis-je garder mes JButtons et récupérer le numéro et la famille de mes cartes quand même?

Merci d'avance!
A voir également:

1 réponse

choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
24 févr. 2013 à 11:07
bonjour

Ton problème ne se situe peut être pas au niveau du code mais au niveau de l'étude du programme. Tout le principe de la programmation orientée objet.

tu dois pouvoir, avant d'écrire une seule ligne de code, savoir quels objets, avec quels attributs, avec quels responsabilités (méthodes)..

Qui d'autre que l'objet "Carte" est capable de donner ses attributs (valeur, famille). Il faut penser "Vie réelle" et convertir en POO.

Dans la vie réelle, les cartes font partie d'un paquet, chaque paquet contient plusieurs types defamilles (Coeur, Carreau, ...), chaque famille contient plusieurs cartes (As, Roi, Dame, ....) et connait forcément sa couleur (Rouge, noir)..

Exemple pour l'objet carte.

Attributs.

private String valeurCarte;

Il est logique que chaque carte connaisse sa valeur, sa famille...

Ces valeurs pourront être récupérées ou modifiées par le principe des "getter" et "setter".

Donc pour récupérer sa valeur:

public String getValeurCarte(){

return this.valeurCarte;

}

Chaque famille connait sa couleur et son type, si chaque carte connait sa famille et que chaque carte puisse connaître les attributs de sa famille (getter)


Les images comme tu dis, ne sont que les représentations graphiques des valeurs de tes cartes. Axe toi sur les attributs et utilise les pour changer l'image mais tout tes calculs seront basés sur les valeurs connues par l'objet carte.

Dans un jeu de carte..

Il y a un objet "Partie" qui contient un paquet.
Une partie est certainement divisée en plusieurs manches.
Une manche est constituée de plusieurs mains en fonction du nombre de joueurs.
Chaque main est constituée d'un certain nombre de Cartes (utilisées donc une seule fois normalement).

donc chaque manche rapporte des points à chaque joueur.
chaque partie comptabilise les points de chaque manche pour chaque joueur..

Voilà donc quelques pistes afin que tu puisses revoir la structure de ton programme.

Je te rappelle que l'interface graphique n'est que la "consécration" de ton programme, ce n'est pas le moteur.

cordialement


0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
24 févr. 2013 à 11:33
Remarque: on avait déjà parlé de comment faire les cartes avec Xenthys, c'était ici :
https://forums.commentcamarche.net/forum/affich-27050938-creation-d-une-classe-liste-et-surcharge-de-get
0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
24 févr. 2013 à 11:36
on ne peut pas se rappeler de tout...
mais bien vu..
0
Xenthys Messages postés 31 Date d'inscription dimanche 30 décembre 2012 Statut Membre Dernière intervention 2 mars 2013 1
24 févr. 2013 à 13:34
Tu as tout à fait raison KX mais je pensais qu'il s'agissait de deux problèmes tout à fait dissociés. L'un lié à l'interface graphique que vous m'avez expliqué dans ce post, l'autre au jeu en lui-même avec les règles. En tout cas, merci pour vos conseils encore une fois ;-).
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
24 févr. 2013 à 13:43
Normalement oui, les problèmes sont dissociés. D'ailleurs choubaka l'a rappelé, « l'interface graphique n'est que la "consécration" de ton programme, ce n'est pas le moteur. »
Mais il faut quand même faire le lien entre les deux.

Je m'étais trompé de discussion en te répondant hier, mais c'est bien ici que ça va :
Je ne suis pas convaincu que tes boutons soient la meilleure manière de procéder pour représenter des cartes. Il vaudrait mieux faire une petite classe qui étends Component et gérer directement l'affichage avec paint (exemple ici) ainsi que les évènements souris (clic, drag and drop...) pour interagir avec la carte.

Je rajouterai que chacun de ces Component devrait normalement être initialisé avec une référence sur l'objet Carte à laquelle il correspond en interne, c'est le genre de choses que tu ne peux pas faire en utilisant des JButton.
0