19-11-2009, 08:55 PM
Coucou
comme je retente (et repense) complètement mon projet j'aurais voulu avoir votre avis sur le modèle que je mets en place.
Comme je vais avancer sur un mode itératif je ne vous sollicite que sur une partie, qui plus est "générique"
exemple de la situation (le côté générique est qu'on oublie les termes :
n personnages combattent entre eux
pour ce faire, j'ai besoin de quelques caractéristiques des personnages (Vie pour simplifier) et de la stratégie que chacun appliquera (on dira pour résumer, une succession d'action)
pour cela j'imagine une classe personnage :
comme je retente (et repense) complètement mon projet j'aurais voulu avoir votre avis sur le modèle que je mets en place.
Comme je vais avancer sur un mode itératif je ne vous sollicite que sur une partie, qui plus est "générique"
exemple de la situation (le côté générique est qu'on oublie les termes :
n personnages combattent entre eux
pour ce faire, j'ai besoin de quelques caractéristiques des personnages (Vie pour simplifier) et de la stratégie que chacun appliquera (on dira pour résumer, une succession d'action)
pour cela j'imagine une classe personnage :
Code PHP :
<?php
class personnage
{
protected $id; //l'identifiant unique du personnage
protected $vie; //les points de vie du personnage
protected $strategie; // un tableau de chaines correspondant à l'action
protected $indiceStrat; // état d'avancement de la stratégie (à quelle étape nous en sommes)
protected $adversaires; // un tableau contenant la liste des adversaires (des instances de la classe personnage)
// a cela diverses méthodes puis
function ajouteAdversaire (personnage $adversaire)
{
$this->adversaires[] = $adversaire; // le tableau des adversaires contient les personnages pour pouvoir utiliser toutes leurs méthodes
}
function setStrategie($liste) //liste sera un tableau de chaine
{
$this->strategie = $liste;
}
function Action()
{
// on crée un objet Action qui permet de résoudre l'action (je me base sur le design pattern strategy que me proposait Pascal)
$classeAction = $this->strategie[ $this->indiceStrat];
$this->indiceStrat++; // pour le prochain appel, on sollicitera l'action suivante
$act = new $classeAction ($this); // en envoyant $this, mon action connait et le personnage et ses adversaires et peut donc demander toutes les informations qui vont bien
if ( $act->estPossible () ) // contrôle
$act->realise(); // action
else
$this->ActionEnEchec(); // gère l'échec de l'action pour le personnage (perte de moral, suite à la contrariété de ne pas avoir fait ce qui était prévu, etc...)
}
}
Supposons que toutes les classes possibles actions se ressemblent
Code PHP :
<?php
class action1 /// (ou action2, action4, ...)
{
protected $personnage
function __construct(personnage $personnage)
{
$this->personnage = $personnage;
}
// la méthode de test, spécifique à chaque classe action, vérifiant l'état du personnage voire de ses adversaires
function estPossible()
{
if ($this->personnage->getVie() > 33 && $this->personnage->getZZZ() != .... )
return true;
else
return false;
}
function realise()
{
//on choisit l'adversaire en fonction d'un algorithme compliqué, ici le 26eme adversaire
$adversaire = $this->personnage->getAdversaires()[25]; //pas vérifié que j'arrivais a capter en un seul coup le 26eme adversaire du personnage comme cela mais on dira que oui, sinon en deux étapes
// on impute à l'adversaire 62 points de dégat
$adversaire->degats(62);
}
}