Creation d'un jeu, problème de conception

Fermé
Arthur02 - 13 mars 2014 à 23:30
 Arthur02 - 17 mars 2014 à 18:05
Bonjour,

J'aimerais débuter un petit projet en java mais je suis bloquer dans l'élaboration du diagramme de classe.
J'ai une classe Personnage qui à des caractéristiques => Vie, force, agilité,etc... ( tous des entiers)
(ou alors un personnage qui contient une classe caractéristique qui contient des entiers vie, force, etc...)

J'aimerais pouvoir améliorer les caractéristiques d'un personnage en lui mettant des équipements (ex: un chapeau).
Un équipement possède des caractéristiques qu'il faudrait additionner au caractéristiques du personnage.

Je suis bloqué à ce niveau la.
J'aimerais que l'addition se fasse automatiquement lors de l'ajout de l'équipement, mais comment différencier les caractéristiques pour pouvoir les additionner étant donné qu'une caractéristique est un entier ?
(ex : [Chapeau: int vie = 7, int force = 3] à additionner à la vie et à la force du personnage).

Faut-il créer une classe par caractéristique ? Dans ce cas-ci je ne peux donc pas éviter le InstanceOf par la suite...

Merci de votre aide.

Cordialement,

Arthur


A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
14 mars 2014 à 07:40
Par exemple :

public class Equipement
{
    private final int deltaVie;
    private final int deltaForce;

    public Equipement(int deltaVie, int deltaForce)
    {
        this.deltaVie = deltaVie;
        this.deltaForce= deltaForce;
    }

    public int getDeltaVie()
    {
        return deltaVie;
    }

    public int getDeltaForce()
    {
        return deltaForce;
    }
}

public class Equipements
{
    public static Equipement CHAPEAU = new Equipement(7,3);
}

public class Personnage
{
    private int vie;
    private int force;

    public Personnage()
    {
        vie = 0;
        force = 0;
    }

    public void add(Equipement e)
    {
        vie += e.getDeltaVie();
        force += e.getDeltaForce();
    }

    public int getVie()
    {
        return vie;
    }

    public int getForce()
    {
        return force;
    }
}

public class Test
{
    public static void main(String[] args)
    {
        Personnage p = new Personnage();
        p.add(Equipements.CHAPEAU);
    }
}
0
Bonjour,

Merci d'avoir répondu aussi rapidement.
Votre diagramme est similaire à celui que j'avais prévu de faire, cependant mon problème n'est toujours pas réglé, bien qu'éclairci.
Tous les objets pouvant être équipé ne possède pas forcément les même caractéristiques !
(Ex : Chapeau1: vie=2 et Cape1: force=3 agilité=4)

Le chapeau1 à de la vie alors qu'il n'a pas de force.
La cape1 à de la force et de l'agilité mais n'a pas de vie

Donc cela poserait problème au niveau de la méthode void add(Equipement e), il se peut que l'équipement ne contienne pas une telle caractéristique alors que d'autres si.

Peut-être que la chose à faire serait de mettre toutes les caractéristiques existantes sur tous les objets mais mettre à 0 les attributs dont l'objet n'est pas sensé apporter.

Mais j'espérais qu'il y ait une solution 'Objet' a mon problème.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
14 mars 2014 à 19:38
Pas de problème pour une solution objet ;-)



public class Etat
{
    private int vie;
    private int force;
    
    public Etat(int vie, int force)
    {
        this.vie = vie;
        this.force = force;
    }
    
    public int getVie()
    {
        return vie;
    }
    
    public void setVie(int vie)
    {
        this.vie = vie;
    }
    
    public void addVie(int deltaVie)
    {
        this.vie += deltaVie;
    }
    
    public void removeVie(int deltaVie)
    {
        this.vie -= deltaVie;
    }
    
    public int getForce()
    {
        return force;
    }
    
    public void setForce(int force)
    {
        this.force = force;
    }
    
    public void addForce(int deltaForce)
    {
        this.force += deltaForce;
    }
    
    public void removeForce(int deltaForce)
    {
        this.force -= deltaForce;
    }
}

public interface Equipement
{
    void whenAdd(Etat etat);
    
    void whenRemove(Etat etat);
}

public class Chapeau implements Equipement
{
    public void whenAdd(Etat etat)
    {
        etat.addVie(2);
    }
    
    public void whenRemove(Etat etat)
    {
        etat.removeVie(2);
    }
}

public class Cape implements Equipement
{
    public void whenAdd(Etat etat)
    {
        etat.addForce(3);
    }
    
    public void whenRemove(Etat etat)
    {
        etat.removeForce(3);
    }
}

public class Personnage
{
    private final Etat etat;
    
    public Personnage()
    {
        this(0, 0);
    }
    
    public Personnage(int vie, int force)
    {
        etat = new Etat(vie, force);
    }
    
    public void add(Equipement equipement)
    {
        equipement.whenAdd(etat);
    }
    
    public void remove(Equipement equipement)
    {
        equipement.whenAdd(etat);
    }
    
    public Etat getEtat()
    {
        return etat;
    }
}

public class Test
{
    public static void main(String[] args)
    {
        Personnage perso = new Personnage();
        Etat etat = perso.getEtat();
        System.out.println(etat.getVie()); // 0
        
        Chapeau chapeau = new Chapeau();
        perso.add(chapeau);
        System.out.println(etat.getVie()); // 2
    }
}
0
Merci pour ta réponse ! :)
0