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 :
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);
}
}
voilà évidemment le code ne marche pas mais je pense qu'on voit bien les interactions entre les différentes classes
et là je m'interroge, est ce que je fais des références croisées qui vont tout planter, est ce que je suis parti dans le délire le plus total, etc...
de même sur le côté j'instancie un objet action (remarque peut être qu'il est la pertinent d'être dans un singleton justement - remplacer
$act = new $classeAction ($this); par
$act = $classeAction::getInstance($this);)
oubliez qu'on est en sur du combat, ça pourrait très bien être une gestion d'échange boursier ou je sais pas quoi, l'idée étant vraiment d'évaluer la manière de coder plus que le "métier"
en plus si pour optimiser (cf mon poste sur singleton et compagnie) j'ai aussi une classe qui récupère et donc instancie tous les personnages ça me fait des références d'un même objet dans plein d'endroits.
voilà si vous avez des conseils, remarques (pas sur l'aspect nommage, commentaire, indentation, j'ai tout tapé sur l'éditeur de discussion de jeuweb ^^) ou identifiez des lacunes, impossibilités, etc... je m'en remets a vous avant d'aller plus loin
merci !