Joueur J1 = new Joueur(String nom, String type, new Score());
info :
type est un String simple pour définir quel joueur est l'humain/Com.
Score est une classe qui crée des objets scores(point, set, Manche).
Question : est il possible de dire que l'obj score crée ici appartient a humain
est ainsi l'utilisé :
J1.score.setPoint();
J2.score.setPoint(); lobjet score est different pour J1 et J2
affiche J1 = 1 à J2 = 0
Ce qui me gène c'est de devoir donné une ref a chaque obj score.
Hello,
Vu l'appel de ton constructeur, c'est le joueur qui porte l'objet Score. Donc, si tu as 2 joueurs, tu auras 2 objet Score distincts...
C'est ce fonctionnement que tu veux?
"comment l'objet score sait qu'il appartient a J1 et pas à J2 ??" L'attribut "score" que tu as mis dans ta classe Joueur est spécifique à chaque objet. Donc J1.score et J2.score sont différents et appartiennent respectivement à J1 et J2.
Mais l'objet "score" ne sait pas s'il appartient à J1 ou J2, et c'est rarement utile qu'il le sache.
en revanche je ne parvient pas a récupérer les valeurs de mon objet score, j ai ma classe main ma classe joueur et ma classe score je vous montre :
main :
public static void main(String[] args) {
Joueur J1 = new Joueur("KX");
System.out.println(J1.score.getPoint());
}
Joueur :
public class Joueur {
// varaible
String name;
// constructeur
public Joueur() {
this.name = "anonyme";
Score score = new Score();
}
// constructeur avec p
public Joueur(String name) {
this.name = name;
Score score = new Score();
}
}
Score :
public class Score {
protected int point;
/// constructeur
public Score() {
this.point = 0;
}
public void setPoint() {
this.point += 1;
}
}
La ce code ne fonctionne pas il doit y avoir un truc que je n'ai pas zapé.
Merci pour votre aide
est décrite comme une variable locale dans le constructeur alors qu'elle devrait être un attribut au même titre que
name
:
public class Joueur
{
public String name;
public Score score;
public Joueur()
{
this.name = "anonyme";
this.score = new Score();
}
public Joueur(String name)
{
this.name = name;
this.score = new Score();
}
}
j'ai une dernière question pour la conception
je m'explique sur le principe :
1) je créer une partie de jeu pour cela je créer un objet partie avec les paramètre (nbr de coup jouer, nbr de joueur, ...)
2) l'objet partie ce construit avec les paramètre et crée les objet
- Joueurs
3) qui eux vont crée les objet
--Score
conclusion pour modifier mon score je fait partie.J1.score.setPoint();
par la suite je souhaite ajouter un écouteur sur score pour actualisé l'affichage des points.
pour le moment ça fonctionne (grâce vous) mais est ce que c'est la bonne solution
je garde le code comme ça ?
ou
il vaut mieux séparer l'objet partie de Joueur et score ?
ou
les rendre tous individuel ?
ou
Faire autrement ???
encore merci pour votre aide
(a l'issus je clôture le poste)
Si on voulait le faire vraiment bien, on n'aurait pas les scores dans la classe Joueur, mais plutôt dans la classe Partie, même si je me doute que tu n'as pas forcément toutes les connaissances pour faire ça bien :
public class Partie
{
private final Map<Joueur,Score> scores;
public void ajouterPoint(Joueur joueur)
{
scores.get(joueur).ajouterPoint();
}
}
L'origine de mon problème c'est de faire un code qui utilise le Pattern MVC
je pose une fois pour toute le problème ou l'idée
Objectif faire un jeu Pierre feuille ciseaux
Les Class et leur contenue :
Class Jeu : contient le main() et lance l'interface.
Class Fenetre : contient le code IHM. Bouton [pierre][feuille][ciseaux]
Class TourDeJeu :
____instancie_____________________
objet Partie(nbr de tour, nbr de Joueur)
____exécute les commandes ________
-afficheCoupJoue(pattern observer)
-comparer les coups()
-ajoutePoint()
-actualiseScore(pattern observer),
-Thread2(testScoreAtteint())
-reInitScore()
-reStartGame())
Class Partie : instancie les Joueur et Score, CoupsJoue (Map?).
Class Joueur : contient le nom et le type(Humain/Com).
Class Score : contient les point, les pointSet.
Class CoupsJoue : contient dernierCoupJoue, coupsHasard.
voila la vision que j'ai pour le moment
Du coup avec l'objet MAP je peut joindre mes objet CoupsJoue et Score à la clé Joueur et ce serait mieux ?
la Class TourDeJeu est elle bien utile ?
toutes les méthodes peuvent être dans Partie ou Fenêtre ?
Merci beaucoup pour ces explications
Bonne journée
j'ai continué a chercher sur le net des info sur l'objet Map
et donc je tente de l'utilisé ainsi mais sans succès ...
j'ai donc modifier le constructeur de la Class Partie comme suite :
public class Partie {
// variable
private int nbrT;
private int nbrS;
private int nbrManche;
private int nbrMatch;
private int nbrSE;
private int nbrJoueur;
private Joueur J1;
private Joueur J2;
private Score scoreJ1;
private Score scoreJ2;
private final Map<Joueur, Score> scores;
public Partie() {
this.nbrT = 5;
this.nbrS = 3;
this.nbrManche = 3;
this.nbrMatch = 1;
this.nbrSE = 2;
this.nbrJoueur = 2;
scores = new HashMap<Joueur, Score>();
scores.put(J1 = new Joueur("J1"), scoreJ1 = new Score(J1.getName()));
scores.put(J2 = new Joueur("J2"), scoreJ2 = new Score(J2.getName()));
}
}
Class Score
/// variable de Score
protected String joueurName;
protected int point;
protected int set;
protected int manche;
protected int match;
protected boolean adv;
/// constructeur
public Score(String name) {
this.joueurName = name;
this.point = 0;
this.set = 0;
this.manche = 0;
this.match = 0;
this.adv = false;
}
public void setPoint() {
this.point += 1;
}
Class main :
Partie partie = new Partie();
partie.scores.get(J1).setPoint();
// ou
scores.get(J1).setPoint();
//ne fonctionne pas :(
je n'arrive pas a accéder au score dans l'objet
Mais pourquoi donc ???