Newer
Older
<?php
class PlateauSquadro
{
// Constantes pour les vitesses de déplacement
const BLANC_V_ALLER = [0, 1, 3, 2, 3, 1, 0];
const BLANC_V_RETOUR = [0, 3, 1, 2, 1, 3, 0];
const NOIR_V_ALLER = [0, 3, 1, 2, 1, 3, 0];
const NOIR_V_RETOUR = [0, 1, 3, 2, 3, 1, 0];
// Variables d'instance

G. Daryl M. OKOU
a validé
private array $plateau; // Tableau de 7 ArrayPieceSquadro
private array $lignesJouables; // Indices des lignes jouables
private array $colonnesJouables; // Indices des colonnes jouables
public function __construct()
{

G. Daryl M. OKOU
a validé
// Initialisation du plateau et des lignes/colonnes jouables
$this->initCasesVides();
$this->initCasesNeutres();
$this->initCasesBlanches();
$this->initCasesNoires();
$this->lignesJouables = [1, 2, 3, 4, 5];
$this->colonnesJouables = [1, 2, 3, 4, 5];
}

G. Daryl M. OKOU
a validé
private function initCasesVides() :void

G. Daryl M. OKOU
a validé
// Initialisation des cases du plateau comme vides
$this->plateau = array_fill(0, 7, new ArrayPieceSquadro());
for ($i = 0; $i < 7; $i++) {
for ($j = 0; $j < 7; $j++) {
$this->plateau[$i]->add(PieceSquadro::initVide());
}
}
}

G. Daryl M. OKOU
a validé
private function initCasesNeutres() :void

G. Daryl M. OKOU
a validé
// Initialisation des cases neutres sur le plateau
foreach ([0, 6] as $i) {
foreach ([0, 6] as $j) {
$this->plateau[$i]->remove($j);
$this->plateau[$i]->add(PieceSquadro::initNeutre(), $j);
}
}
}

G. Daryl M. OKOU
a validé
private function initCasesBlanches() : void

G. Daryl M. OKOU
a validé
// Placement des pièces blanches sur le côté ouest
foreach ($this->lignesJouables as $i) {
$this->plateau[$i]->remove(0);
$this->plateau[$i]->add(PieceSquadro::initBlancOuest(), 0);
}
}

G. Daryl M. OKOU
a validé
private function initCasesNoires() : void

G. Daryl M. OKOU
a validé
// Placement des pièces noires sur le côté sud
foreach ($this->colonnesJouables as $j) {
$this->plateau[6]->remove($j);
$this->plateau[6]->add(PieceSquadro::initNoirSud(), $j);
}
}

G. Daryl M. OKOU
a validé
public function getPlateau() : array

G. Daryl M. OKOU
a validé
// Retourne le plateau

G. Daryl M. OKOU
a validé
public function getPiece(int $x, int $y): PieceSquadro

G. Daryl M. OKOU
a validé
// Retourne la pièce aux coordonnées ($x, $y)
return $this->plateau[$x][$y];

G. Daryl M. OKOU
a validé
public function setPiece(PieceSquadro $piece, int $x, int $y): void

G. Daryl M. OKOU
a validé
// Place une pièce aux coordonnées ($x, $y)
$this->plateau[$x]->remove($y);
$this->plateau[$x]->add($piece, $y);
}

G. Daryl M. OKOU
a validé
public function getLignesJouables(): array

G. Daryl M. OKOU
a validé
// Retourne les lignes jouables
return $this->lignesJouables;
}
public function getColonnesJouables(): array
{
// Retourne les colonnes jouables
return $this->colonnesJouables;
}
public function retireLigneJouable(int $index) : void
{
// Supprime un index de ligne des lignes jouables
$this->lignesJouables = array_values(array_diff($this->lignesJouables, [$index]));
}

G. Daryl M. OKOU
a validé
public function retireColonneJouable(int $index) : void

G. Daryl M. OKOU
a validé
// Supprime un index de colonne des colonnes jouables
$this->colonnesJouables = array_values(array_diff($this->colonnesJouables, [$index]));
}

G. Daryl M. OKOU
a validé
public function getCoordDestination(int $x, int $y) : array

G. Daryl M. OKOU
a validé
// Calcule les coordonnées de destination pour une pièce
$piece = $this->getPiece($x, $y);

G. Daryl M. OKOU
a validé
$direction = $piece->getDirection();
if ($piece->getCouleur() === PieceSquadro::BLANC) {

G. Daryl M. OKOU
a validé
// Détermine la vitesse en fonction de la direction pour les pièces blanches
$vitesse = $direction === PieceSquadro::EST ? self::BLANC_V_ALLER[$x] : self::BLANC_V_RETOUR[$x];
$newY = $direction === PieceSquadro::EST ? $y + $vitesse : $y - $vitesse;
return [$x, max(0, min(6, $newY))];
} elseif ($piece->getCouleur() === PieceSquadro::NOIR) {

G. Daryl M. OKOU
a validé
// Détermine la vitesse en fonction de la direction pour les pièces noires
$vitesse = $direction === PieceSquadro::NORD ? self::NOIR_V_ALLER[$y] : self::NOIR_V_RETOUR[$y];
$newX = $direction === PieceSquadro::NORD ? $x - $vitesse : $x + $vitesse;
return [max(0, min(6, $newX)), $y];

G. Daryl M. OKOU
a validé
return [$x, $y]; // Par défaut : pas de déplacement

G. Daryl M. OKOU
a validé
public function getDestination(int $x, int $y): PieceSquadro

G. Daryl M. OKOU
a validé
// Retourne la pièce aux coordonnées de destination
[$newX, $newY] = $this->getCoordDestination($x, $y);
return $this->getPiece($newX, $newY);
}

G. Daryl M. OKOU
a validé
public function toJson(): string
{
// Sérialise le plateau en JSON
return json_encode($this->plateau);
}
public static function fromJson(string $json): PlateauSquadro
{
// Désérialise un JSON en une instance de PlateauSquadro
$data = json_decode($json, true);
$plateau = new self();
foreach ($data as $i => $row) {
foreach ($row as $j => $pieceData) {
$plateau->setPiece(PieceSquadro::fromJson(json_encode($pieceData)), $i, $j);
}
}
return $plateau;
}