Newer
Older
/**
* Classe représentant une pièce du jeu Squadro.
*
* Une pièce peut avoir une couleur, une direction, et des états spécifiques
* (vide, neutre, blanc, noir). La classe inclut également des méthodes
* pour gérer les directions, les conversions JSON, et les initialisations spécifiques.
*/
class PieceSquadro {
// Constantes de classe
/**
* Constante représentant une pièce blanche.
*/
/**
* Constante représentant une pièce noire.
*/
/**
* Constante représentant une case vide (sans pièce).
*/
/**
* Constante représentant une pièce neutre.
*/
/**
* Constante représentant la direction Nord.
*/
/**
* Constante représentant la direction Est.
*/
/**
* Constante représentant la direction Sud.
*/
/**
* Constante représentant la direction Ouest.
*/
const OUEST = 3;
// Attributs privés
/**
* Couleur de la pièce.
* Peut être une des constantes : BLANC, NOIR, VIDE, ou NEUTRE.
*
* @var int
*/
protected int $couleur;
/**
* Direction de la pièce.
* Peut être une des constantes : NORD, EST, SUD, ou OUEST.
*
* @var int
*/
protected int $direction;
/**
* Constructeur privé pour créer une pièce Squadro.
*
* @param int $couleur La couleur de la pièce.
* @param int $direction La direction initiale de la pièce.
*/
private function __construct(int $couleur, int $direction) {
$this->couleur = $couleur;
$this->direction = $direction;
}
// Méthodes d'accès
/**
* Retourne la couleur de la pièce.
*
* @return int La couleur de la pièce.
*/
public function getCouleur(): int {
return $this->couleur;
}
/**
* Retourne la direction de la pièce.
*
* @return int La direction de la pièce.
*/
public function getDirection(): int {
return $this->direction;
}
// Méthode pour inverser la direction
/**
* Inverse la direction de la pièce.
*
* Par exemple, une pièce orientée au Nord sera orientée au Sud.
*
* @return void
*/
public function inverseDirection(): void {
if ($this->direction === self::NORD) {
$this->direction = self::SUD;
} elseif ($this->direction === self::SUD) {
$this->direction = self::NORD;
} elseif ($this->direction === self::EST) {
$this->direction = self::OUEST;
} elseif ($this->direction === self::OUEST) {
$this->direction = self::EST;
}
}
// Méthode de conversion en chaîne de caractères
/**
* Retourne une représentation textuelle de la pièce.
*
* @return string La chaîne décrivant la pièce (couleur et direction).
*/
public function __toString(): string {
return "Couleur: {$this->couleur}, Direction: {$this->direction}";
}
// Méthodes statiques pour initialiser les pièces
/**
* Initialise une pièce vide (sans couleur ni direction).
*
* @return PieceSquadro Une instance représentant une pièce vide.
*/
public static function initVide(): PieceSquadro {
return new self(self::VIDE, self::NEUTRE);
}
/**
* Initialise une pièce neutre.
*
* @return PieceSquadro Une instance représentant une pièce neutre.
*/
public static function initNeutre(): PieceSquadro {
return new self(self::NEUTRE, self::NEUTRE);
}
/**
* Initialise une pièce noire orientée au Nord.
*
* @return PieceSquadro Une instance représentant une pièce noire orientée au Nord.
*/
public static function initNoirNord(): PieceSquadro {
return new self(self::NOIR, self::NORD);
}
/**
* Initialise une pièce noire orientée au Sud.
*
* @return PieceSquadro Une instance représentant une pièce noire orientée au Sud.
*/
public static function initNoirSud(): PieceSquadro {
return new self(self::NOIR, self::SUD);
}
/**
* Initialise une pièce blanche orientée à l'Est.
*
* @return PieceSquadro Une instance représentant une pièce blanche orientée à l'Est.
*/
public static function initBlancEst(): PieceSquadro {
return new self(self::BLANC, self::EST);
}
/**
* Initialise une pièce blanche orientée à l'Ouest.
*
* @return PieceSquadro Une instance représentant une pièce blanche orientée à l'Ouest.
*/
public static function initBlancOuest(): PieceSquadro {
return new self(self::BLANC, self::OUEST);
}
// Méthode pour convertir un objet en JSON
/**
* Convertit la pièce en une chaîne JSON.
*
* @return string Une chaîne JSON représentant la pièce (couleur et direction).
*/
public function toJson(): string {
return json_encode([
'couleur' => $this->couleur,
'direction' => $this->direction
]);
}
// Méthode statique pour créer une instance depuis une chaîne JSON
/**
* Crée une instance de PieceSquadro depuis une chaîne JSON.
*
* @param string $json Une chaîne JSON contenant les données de la pièce.
*
* @return PieceSquadro Une instance créée à partir des données JSON.
*/
public static function fromJson(string $json): PieceSquadro {
$data = json_decode($json, true);
return new self($data['couleur'], $data['direction']);
}
}
?>