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']); } } ?>