Newer
Older
/**
* Classe ActionSquadro
*
* Cette classe gère les actions pouvant être effectuées sur le plateau de jeu Squadro.
*/

G. Daryl M. OKOU
a validé
private PlateauSquadro $plateau;
/**
* Constructeur de la classe ActionSquadro.
*
* @param PlateauSquadro $p Le plateau de jeu.
*/
public function __construct(PlateauSquadro $p)
{
$this->plateau = $p;
}
/**
* Vérifie si une pièce peut être jouée.
*
* @param int $x La coordonnée x de la pièce.
* @param int $y La coordonnée y de la pièce.
* @return bool True si la pièce peut être jouée, false sinon.
*/
public function estJouablePiece(int $x, int $y): bool

G. Daryl M. OKOU
a validé
// Vérifie si une pièce peut être jouée
$piece = $this->plateau->getPiece($x, $y);
if ($piece->getCouleur() === PieceSquadro::VIDE || $piece->getCouleur() === PieceSquadro::NEUTRE) {
return false;
}

G. Daryl M. OKOU
a validé
$destination = $this->plateau->getCoordDestination($x, $y);
$pieceDestination = $this->plateau->getPiece($destination[0], $destination[1]);
return $pieceDestination->getCouleur() === PieceSquadro::VIDE;
/**
* Déplace une pièce si elle est jouable.
*
* @param int $x La coordonnée x de la pièce.
* @param int $y La coordonnée y de la pièce.
* @return bool True si la pièce a été déplacée, false sinon.
*/
public function jouePiece(int $x, int $y): bool

G. Daryl M. OKOU
a validé
// Déplace une pièce si elle est jouable
if (!$this->estJouablePiece($x, $y)) {
return false;
}
$piece = $this->plateau->getPiece($x, $y);
[$destX, $destY] = $this->plateau->getCoordDestination($x, $y);
// Gère le recul des pièces adverses lorsqu'une pièce est déplacée
if ($piece->getCouleur() === PieceSquadro::BLANC) {
for ($j = $y + 1; $j < $destY; $j++) {
if ($this->plateau->getPiece($x, $j) != PieceSquadro::VIDE) {
$this->reculePiece($x, $j);
$destY = $j + 1;
}
}
} elseif ($piece->getCouleur() === PieceSquadro::NOIR) {
for ($i = $x + 1; $i < $destX; $i++) {
if ($this->plateau->getPiece($i, $y) != PieceSquadro::VIDE) {
$this->reculePiece($i, $y);
$destX = $i + 1;
}
}
}
// Déplace la pièce
$this->plateau->setPiece(PieceSquadro::initVide(), $x, $y);
$this->plateau->setPiece($piece, $destX, $destY);
// Vérifie si une pièce a terminé son parcours
if ($piece->getCouleur() === PieceSquadro::BLANC && $destY === 0) {
$this->sortPiece($piece->getCouleur(), $destX);
} elseif ($piece->getCouleur() === PieceSquadro::NOIR && $destX === 6) {
$this->sortPiece($piece->getCouleur(), $destY);
}

G. Daryl M. OKOU
a validé
// Gère le changement de direction de la pièce lorsqu'elle atteint le point de retour
if (($piece->getCouleur() === PieceSquadro::BLANC && $destY === 6) ||
($piece->getCouleur() === PieceSquadro::NOIR && $destX === 0)) {
$piece->inverseDirection();
}
return true;
}
/**
* Réinitialise une pièce à sa position de départ.
*
* @param int $x La coordonnée x de la pièce.
* @param int $y La coordonnée y de la pièce.
*/

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

G. Daryl M. OKOU
a validé
// Réinitialise une pièce à sa position de départ
$piece = $this->plateau->getPiece($x, $y);

G. Daryl M. OKOU
a validé
if ($piece->getCouleur() === PieceSquadro::BLANC) {
$this->plateau->setPiece(PieceSquadro::initBlancOuest(), $x, 0);
} elseif ($piece->getCouleur() === PieceSquadro::NOIR) {
$this->plateau->setPiece(PieceSquadro::initNoirSud(), 6, $y);
/**
* Retire une pièce du jeu lorsqu'elle termine son parcours.
*
* @param int $couleur La couleur de la pièce.
* @param int $rang Le rang de la pièce.
*/
public function sortPiece(int $couleur, int $rang): void

G. Daryl M. OKOU
a validé
// Retire une pièce du jeu lorsqu'elle termine son parcours
if ($couleur === PieceSquadro::BLANC) {
$this->plateau->retireLigneJouable($rang);

G. Daryl M. OKOU
a validé
} elseif ($couleur === PieceSquadro::NOIR) {
$this->plateau->retireColonneJouable($rang);
}
}
/**
* Vérifie si un joueur a gagné la partie.
*
* @param int $couleur La couleur du joueur.
* @return bool True si le joueur a gagné, false sinon.
*/

G. Daryl M. OKOU
a validé
public function remporteVictoire(int $couleur): bool

G. Daryl M. OKOU
a validé
// Vérifie si un joueur a gagné la partie
if ($couleur === PieceSquadro::BLANC) {
return count($this->plateau->getLignesJouables()) <= 1;
} elseif ($couleur === PieceSquadro::NOIR) {
return count($this->plateau->getColonnesJouables()) <= 1;
}
return false;