09-11-2008, 09:16 PM
(Modification du message : 09-11-2008, 09:46 PM par Sephi-Chan.)
j'ai regardé un peu ton projet, je peux voir que tu as plusieurs unités, que celles-ci ont des caractéristiques communes, etc.
On peut donc imaginer une classe générique Unite que l'on n'utilisera pas directement, ce sont d'autres classes (Cavalier, Soldat, etc.) qui hériteront de la classe Unite.
On peut donc imaginer une classe générique Unite que l'on n'utilisera pas directement, ce sont d'autres classes (Cavalier, Soldat, etc.) qui hériteront de la classe Unite.
Code PHP :
<?php
/**
* Contient les attributs et les méthodes communes à toutes les unités du jeu.
*/
abstract class Unite {
/**
* Identifiant de la case sur laquelle est positionnée l'unité.
* (On pourrait également imaginer que la position soit un objet Case.)
*/
protected $_position;
/**
* Niveau de vie de l'unité.
*/
protected $_sante;
/**
* Score d'attaque de l'unité.
*/
protected $_attaque;
/**
* Score de défense de l'unité contre les différents types d'unités.
* Comme il y a plusieurs types d'unités, on utilise un tableau avec des
* clés comme $defense['cavalier'] ou $defense['fantassin'].
*/
protected $_defense = array();
/**
* Vitesse de déplacement de l'unité.
*/
protected $_vitesseDeplacement;
/**
* Quantité de ressource que l'unité peut transporter.
* Comme certaines ressources sont plus encombrantes que d'autres,
* on utilise un tableau avec plusieurs clés, comme $capaciteTransport['or']
* ou $capaciteTransport['bois'].
*/
protected $_capaciteTransport = array();
/**
* Déplace l'unité selon une direction donnée.
*/
public function bouger($direction){
/**
* Ce qu'il faut faire quand on bouge.
*/
}
/**
* On définit maintenant les accesseurs afin de respecter l'encapsulation
* des données (private, protected, public).
*/
public function getPosition(){
return $this->_position;
}
public function setPosition($position){
$this->_position = $position;
}
public function getSante(){
return $this->_sante;
}
public function setSante($sante){
$this->_sante = $sante;
}
public function getAttaque(){
return $this->_attaque;
}
public function setAttaque($attaque){
$this->_attaque = $attaque;
}
public function getDefense($type){
if(array_key_exists($type, $this->_defense) === true){
$defense = $this->_defense[$type];
}
else {
$defense = 0;
}
return $defense;
}
public function setDefense($type, $defense){
$this->_defense[$type] = $defense;
}
public function getVitesseDeplacement(){
return $this->_vitesseDeplacement;
}
public function setVitesseDeplacement($vitesseDeplacement){
$this->_vitesseDeplacement = $vitesseDeplacement;
}
public function getCapaciteTransport($type){
if(array_key_exists($type, $this->_capaciteTransport) === true){
$capaciteTransport = $this->_capaciteTransport[$type];
}
else {
$capaciteTransport = 0;
}
return $capaciteTransport;
}
public function SetCapaciteTransport($type, $capacite){
$this-> _capaciteTransport[$type] = $capacite;
}
}
Ensuite, tu peux avoir des classes comme Cavalier ou Fantassin qui héritent de cette classe générique.
Code PHP :
<?php
class Soldat extends Unite {
/**
* Attaque la cible indiquée (qui est un objet Cavalier, Soldat, etc.).
*/
public function attaquer($cible){
/**
* Procédure d'attaque.
* On peut imaginer qu'on utilise le score d'attaque de l'attaquant
* contenu dans $this->_attaque et qu'on le compare au score de défense
* qu'a la cible contre les fantassins contenu dans $cible->getDefense('fantassin').
*/
}
}