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. * * Cette méthode génère une chaîne qui indique la couleur de la pièce * et une flèche représentant sa direction. Les flèches utilisées sont les suivantes : * - `>` pour l'Est, * - `<` pour l'Ouest, * - `^` pour le Nord, * - `v` pour le Sud. * * Par exemple : * - "Couleur: 0, Direction: >" pour une pièce blanche allant vers la droite. * - "Couleur: 1, Direction: v" pour une pièce noire allant vers le bas. * - "Couleur: -1, Direction: ^" pour une pièce vide. * * @return string La chaîne représentant la pièce avec sa couleur et sa direction sous forme de flèche. */ public function __toString(): string { // Définir les flèches selon la direction $directionSymbol = ' '; switch ($this->direction) { case self::NORD: $directionSymbol = 'N'; // Flèche vers le haut pour le Nord break; case self::EST: $directionSymbol = 'E'; // Flèche vers la droite pour l'Est break; case self::SUD: $directionSymbol = 'S'; // Flèche vers le bas pour le Sud break; case self::OUEST: $directionSymbol = 'O'; // Flèche vers la gauche pour l'Ouest break; } $couleurSymbol = ' '; switch ($this->couleur) { case self::BLANC: $couleurSymbol = 'B'; break; case self::NOIR: $couleurSymbol = 'N'; break; } // Retourner la représentation sous forme de flèche + couleur return $couleurSymbol.$directionSymbol; } // 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']); } } ?>