ActionSquadro.php 2,62 ko
Newer Older
<?php

class ActionSquadro
{

    public function __construct(PlateauSquadro $p)
    {
        $this->plateau = $p;
    }

    public function estJouablePiece(int $x, int $y):bool
        // 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;
        }
        $destination = $this->plateau->getCoordDestination($x, $y);
        $pieceDestination = $this->plateau->getPiece($destination[0], $destination[1]);
        return $pieceDestination->getCouleur() === PieceSquadro::VIDE;
    public function jouePiece(int $x, int $y) : bool
        // Déplace une pièce si elle est jouable
        if (!$this->estJouablePiece($x, $y)) {
            return false;
        }

        $piece = $this->plateau->getPiece($x, $y);
        [$newX, $newY] = $this->plateau->getCoordDestination($x, $y);
        $this->plateau->setPiece(PieceSquadro::initVide(), $x, $y);
        $this->plateau->setPiece($piece, $newX, $newY);
        // Gère le changement de direction de la pièce lorsqu'elle atteint le point de retour
        if (($piece->getCouleur() === PieceSquadro::BLANC && $newY === 6) ||
            ($piece->getCouleur() === PieceSquadro::NOIR && $newX === 0)) {
            $piece->inverseDirection();
        }

        return true;
    }


    public function reculePiece(int $x, int $y): void
        // Réinitialise une pièce à sa position de départ
        $piece = $this->plateau->getPiece($x, $y);
        if ($piece->getCouleur() === PieceSquadro::BLANC) {
            $this->plateau->setPiece(PieceSquadro::initBlancOuest(), $x, 0);
        } elseif ($piece->getCouleur() === PieceSquadro::NOIR) {
            $this->plateau->setPiece(PieceSquadro::initNoirSud(), 6, $y);
        }
    }

    public function sortPiece($couleur, $rang)
    {
        // Retire une pièce du jeu lorsqu'elle termine son parcours
        if ($couleur === PieceSquadro::BLANC) {
            $this->plateau->retireLigneJouable($rang);
        } elseif ($couleur === PieceSquadro::NOIR) {
            $this->plateau->retireColonneJouable($rang);
        }
    }

    public function remporteVictoire(int $couleur): bool
        // 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;