Skip to content
Snippets Groups Projects
Commit 53030d3c authored by VIGNERON Steven's avatar VIGNERON Steven
Browse files

V7

parent c212b04b
No related branches found
No related tags found
No related merge requests found
doc/V7.png

219 KiB

@startuml
package DP{
skin rose
abstract class Arme {
#int degat
#String nom
#double poids
+ Arme(int degat, String nom, double poids)
}
class Epee extends Arme {
- int longueur
+ Epee()
}
class BatonDeSorcier extends Arme {
-String pouvoir
+ BatonDeSorcier()
}
class BaguetteMagique extends Arme {
-int soin
+ BaguetteMagique()
}
abstract class Personnage implements ComposantEquipe{
#int pointsDeVie
#int niveau
#String nom
+ Personnage(int pointsDeVie, String nom, Arme arme)
+ void subirDegats(int d)
+ void setStrategie(StrategieCombat strategie)
+ boolean estVivant()
+ void setEtat(Etat etat)
+ Etat getEtat()
}
Personnage -left- "1" Arme
Personnage -- "1" StrategieCombat
Personnage -- "1" Etat
class Guerrier extends Personnage {
- int force
+ Guerrier()
+ Guerrier(String nom, Arme arme, int pointsDeVie)
+ void accept(VisiteurPersonnage visiteur)
}
class Roi extends Personnage {
- int force
- String royaume
+ Roi()
+ Roi(String nom, Arme arme, int pointsDeVie)
+ void accept(VisiteurPersonnage visiteur)
}
class Sorcier extends Personnage {
- int intelligence
+ Sorcier()
+ Sorcier(String nom, Arme arme, int pointsDeVie)
+ void accept(VisiteurPersonnage visiteur)
}
class Guerisseur extends Personnage {
- int sagesse
+ Guerisseur()
+ Guerisseur(String nom, Arme arme, int pointsDeVie)
+ void accept(VisiteurPersonnage visiteur)
}
interface VisiteurPersonnage {
+ void visitGuerrier(Guerrier guerrier)
+ void visitRoi(Roi roi)
+ void visitSorcier(Sorcier sorcier)
+ void visitGuerisseur(Guerisseur guerisseur)
+ void visitEquipe(Equipe equipe)
}
class DegatVisiteur implements VisiteurPersonnage {
+ void visitGuerrier(Guerrier guerrier)
+ void visitRoi(Roi roi)
+ void visitSorcier(Sorcier sorcier)
+ void visitGuerisseur(Guerisseur guerisseur)
+ void visitEquipe(Equipe equipe)
}
class NiveauVisiteur implements VisiteurPersonnage {
+ void visitGuerrier(Guerrier guerrier)
+ void visitRoi(Roi roi)
+ void visitSorcier(Sorcier sorcier)
+ void visitGuerisseur(Guerisseur guerisseur)
+ void visitEquipe(Equipe equipe)
}
class CptSorcierVisiteur implements VisiteurPersonnage {
- int compteur
+ CptSorcierVisiteur()
+ void visitGuerrier(Guerrier guerrier)
+ void visitRoi(Roi roi)
+ void visitSorcier(Sorcier sorcier)
+ void visitGuerisseur(Guerisseur guerisseur)
+ void visitEquipe(Equipe equipe)
+ int getCompteur()
}
interface ComposantEquipe {
+ void accept(VisiteurPersonnage visiteur)
}
class Equipe implements ComposantEquipe {
+ Equipe()
+ void addComposant(ComposantEquipe ... ces)
+ void rmComposant(ComposantEquipe ce)
+ void accept(VisiteurPersonnage visiteur)
}
Equipe --"0..*" ComposantEquipe : composants
class Configuration {
- Configuration()
+ Configuration getInstance()
+ int getDifficulte()
+ int getMaxEquipe()
}
Configuration --"1" Configuration : instance (static)
interface StrategieCombat {
+ int modifieDegats(int d)
}
class StrategieNeutre implements StrategieCombat {
+ int modifieDegats(int d)
}
class StrategieAgressive implements StrategieCombat {
+ int modifieDegats(int d)
}
class StrategieDefensive implements StrategieCombat {
+ int modifieDegats(int d)
}
class FabriquePersonnage {
+ Personnage creerPersonnage(String personnage)
+ Personnage creerPersonnage(String type, String nom, Arme arme, int pointsDeVie)
}
interface Etat {
+ void attaquer(Personnage cible)
+ void subirDegats(int d)
}
class EtatActif implements Etat {
+ void attaquer(Personnage cible)
+ void subirDegats(int d)
}
class EtatBlesse implements Etat {
+ void attaquer(Personnage cible)
+ void subirDegats(int d)
}
class EtatMort implements Etat {
+ void attaquer(Personnage cible)
+ void subirDegats(int d)
}
class EtatEndormie implements Etat {
+ void attaquer(Personnage cible)
+ void subirDegats(int d)
}
}
@enduml
\ No newline at end of file
package DP;
public interface Etat {
void attaquer(Personnage cible);
void subirDegats(int d);
}
package DP;
public class EtatActif implements Etat {
private Personnage personnage;
public EtatActif(Personnage personnage) {
this.personnage = personnage;
}
@Override
public void attaquer(Personnage cible) {
int vraiDegats = personnage.strategie.modifieDegats(personnage.getAttaque());
System.out.println(personnage.getNom()+" attaque "+cible.getNom()+" et lui inflige "+vraiDegats+" degat(s)");
cible.subirDegats(vraiDegats);
}
@Override
public void subirDegats(int d) {
if(d >= 0){
int vraiDegats = personnage.strategie.modifieDegats(d);
personnage.setPointsDeVie(personnage.getPointsDeVie() - vraiDegats);
System.out.println(personnage.getNom()+" subit "+vraiDegats+" degats\nPV : " + personnage.getPointsDeVie());
if (personnage.getPointsDeVie() > 0 && personnage.getPointsDeVie() <= 25) {
System.out.println(personnage.getNom()+" est desorme blesse!");
personnage.setEtat(new EtatBlesse(personnage));
} else if (personnage.getPointsDeVie() <= 0) {
System.out.println(personnage.getNom()+" est mort!");
personnage.setEtat(new EtatMort(personnage));
}
} else {
personnage.setPointsDeVie(personnage.getPointsDeVie() - d);
System.out.println(personnage.getNom()+" est soigné(e) de "+d+" points de vie\nPV : " + personnage.getPointsDeVie());
}
}
}
package DP;
public class EtatBlesse implements Etat {
private Personnage personnage;
public EtatBlesse(Personnage personnage) {
this.personnage = personnage;
}
@Override
public void attaquer(Personnage cible) {
int vraiDegats = personnage.strategie.modifieDegats(personnage.getAttaque())/2;
System.out.println(personnage.getNom()+" attaque "+cible.getNom()+" en etant blesse et lui inflige "+vraiDegats+" degat(s)");
cible.subirDegats(vraiDegats);
}
@Override
public void subirDegats(int d) {
if(d >= 0){
int vraiDegats = (int) (personnage.strategie.modifieDegats(d)*1.5);
personnage.setPointsDeVie(personnage.getPointsDeVie() - vraiDegats);
System.out.println(personnage.getNom()+" subit "+vraiDegats+" degats\nPV : " + personnage.getPointsDeVie());
if (personnage.getPointsDeVie() <= 0) {
System.out.println(personnage.getNom()+" est mort!");
personnage.setEtat(new EtatMort(personnage));
}
} else {
personnage.setPointsDeVie(personnage.getPointsDeVie() - d);
System.out.println(personnage.getNom()+" est soigné(e) de "+d+" points de vie\nPV : " + personnage.getPointsDeVie());
if (personnage.getPointsDeVie() > 25) {
System.out.println(personnage.getNom()+" est de nouveau en forme!");
personnage.setEtat(new EtatActif(personnage));
}
}
}
}
package DP;
public class EtatEndormie implements Etat {
private Personnage personnage;
public EtatEndormie(Personnage personnage) {
this.personnage = personnage;
}
@Override
public void attaquer(Personnage cible) {
System.out.println(personnage.getNom()+" ne peut pas attaque, il est endormit");
}
@Override
public void subirDegats(int d) {
if(d >= 0){
int vraiDegats = d*2; // on ignore la posture (strategie)
personnage.setPointsDeVie(personnage.getPointsDeVie() - vraiDegats);
System.out.println(personnage.getNom()+" est reveillé violement par "+vraiDegats+" degats\nPV : " + personnage.getPointsDeVie());
if (personnage.getPointsDeVie() > 0 && personnage.getPointsDeVie() <= 25) {
System.out.println(personnage.getNom()+" est desorme blesse!");
personnage.setEtat(new EtatBlesse(personnage));
} else if (personnage.getPointsDeVie() <= 0) {
System.out.println(personnage.getNom()+" est mort!");
personnage.setEtat(new EtatMort(personnage));
}
} else {
personnage.setPointsDeVie(personnage.getPointsDeVie() - d);
System.out.println(personnage.getNom()+" est soigné(e) de "+d+" points de vie\nPV : " + personnage.getPointsDeVie());
}
}
}
package DP;
public class EtatMort implements Etat {
private Personnage personnage;
public EtatMort(Personnage personnage) {
this.personnage = personnage;
}
@Override
public void attaquer(Personnage cible) {
System.out.println(personnage.getNom()+" est mort, il ne peut donc pas attaquer");
}
@Override
public void subirDegats(int d) {
if(d >= 0){
System.out.println(personnage.getNom()+" est deja mort");
} else {
System.out.println(personnage.getNom()+" deja mort, il ne peut plus etre soigne");
}
}
}
package DP;
public abstract class Personnage implements ComposantEquipe {
protected Etat etat;
protected int pointsDeVie;
protected int niveau;
protected String nom;
protected Arme arme;
protected StrategieCombat strategie;
protected boolean vivant;
public Personnage(int pointsDeVie, String nom, Arme arme){
this.pointsDeVie = pointsDeVie;
......@@ -14,7 +14,7 @@ public abstract class Personnage implements ComposantEquipe {
this.nom = nom;
this.arme = arme;
this.strategie = new StrategieNeutre();
vivant = true;
etat = new EtatActif(this);
}
public abstract void accept(VisiteurPersonnage visiteur);
......@@ -63,12 +63,8 @@ public abstract class Personnage implements ComposantEquipe {
}
}
public void subirDegats(int d){
int degats = strategie.modifieDegats(d);
pointsDeVie -= degats;
if(pointsDeVie <= 0){
vivant = false;
}
public boolean estVivant(){
return !(etat instanceof EtatMort);
}
public void setStrategie(int s){
......@@ -86,7 +82,20 @@ public abstract class Personnage implements ComposantEquipe {
}
}
public boolean estVivant() {
return vivant;
// garder uniquement pour les tests de V5
public void subirDegats(int d) {
int degats = strategie.modifieDegats(d);
pointsDeVie -= degats;
if (pointsDeVie <= 0) {
this.setEtat(new EtatMort(this));
}
}
public void setEtat(Etat etat){
this.etat = etat;
}
public Etat getEtat(){
return this.etat;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment