Un objet qui en crée un autre et reste lié [Résolu]

seichan94 38 Messages postés mardi 29 octobre 2013Date d'inscription 6 novembre 2014 Dernière intervention - 27 nov. 2013 à 16:56 - Dernière réponse : seichan94 38 Messages postés mardi 29 octobre 2013Date d'inscription 6 novembre 2014 Dernière intervention
- 28 nov. 2013 à 13:33
Bonjour les gens !

petite question

j'ai une classe Joueur qui crée un objet Joueur :

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.

Merci d'avance
Bonne soirée à tous
Afficher la suite 

Votre réponse

11 réponses

BunoCS 13997 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 17 août 2018 Dernière intervention - 27 nov. 2013 à 17:06
0
Merci
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?
Commenter la réponse de BunoCS
seichan94 38 Messages postés mardi 29 octobre 2013Date d'inscription 6 novembre 2014 Dernière intervention - 27 nov. 2013 à 18:31
0
Merci
Bonsoir BunoCS

oui c'est bien cela que je souhaite.
je vais tester je vais bien voir si cela fonctionne.

mais comment l'objet score sait qu'il appartient a J1 et pas à J2 ???

le fait de le créer par l'objet joueur ajoute une ref a cet objet ?
si oui peut ont la retrouver ?

Merci pour ton aide
seichan94 38 Messages postés mardi 29 octobre 2013Date d'inscription 6 novembre 2014 Dernière intervention - 27 nov. 2013 à 23:26
Merci beaucoup !
ça fonctionne très bien :)

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)
KX 15679 Messages postés samedi 31 mai 2008Date d'inscriptionContributeurStatut 14 août 2018 Dernière intervention - 27 nov. 2013 à 23:39
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();
    }
}
seichan94 38 Messages postés mardi 29 octobre 2013Date d'inscription 6 novembre 2014 Dernière intervention - 28 nov. 2013 à 10:28
Bonjour KX,

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
seichan94 38 Messages postés mardi 29 octobre 2013Date d'inscription 6 novembre 2014 Dernière intervention - 28 nov. 2013 à 13:29
Re-Bonjour,

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 ???
seichan94 38 Messages postés mardi 29 octobre 2013Date d'inscription 6 novembre 2014 Dernière intervention - 28 nov. 2013 à 13:33
arf c'est a cause de "private" je suis nul !
Commenter la réponse de seichan94

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.