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

class ActionSquadro
{
    private $plateau;

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

    public function estJouablePiece($x, $y)
    {
        $piece = $this->plateau->getPiece($x, $y);
        if ($piece->getCouleur() === PieceSquadro::VIDE || $piece->getCouleur() === PieceSquadro::NEUTRE) {
            return false;
        }
        [$destX, $destY] = $this->plateau->getCoordDestination($x, $y);
        $destination = $this->plateau->getPiece($destX, $destY);
        return $destination->getCouleur() === PieceSquadro::VIDE;
    }

    public function jouePiece($x, $y)
    {
        if (!$this->estJouablePiece($x, $y)) {
            return false;
        }

        $piece = $this->plateau->getPiece($x, $y);
        [$destX, $destY] = $this->plateau->getCoordDestination($x, $y);

        // Gestion du saut d'adversaires
        $this->gererSautsAdversaires($x, $y, $destX, $destY);

        // Mise à jour de la position
        $this->plateau->setPiece($piece, $destX, $destY);
        $this->plateau->setPiece(PieceSquadro::initVide(), $x, $y);

        // Gestion de la fin de l'aller-retour
        if ($piece->getCouleur() === PieceSquadro::BLANC && $destY === 6) {
            $piece->inverseDirection();
        } elseif ($piece->getCouleur() === PieceSquadro::NOIR && $destX === 0) {
            $piece->inverseDirection();
        }

        return true;
    }

    private function gererSautsAdversaires($x, $y, $destX, $destY)
    {
        // Implémentation des reculs des adversaires en fonction des règles
    }

    public function reculePiece($x, $y)
    {
        $piece = $this->plateau->getPiece($x, $y);
        if ($piece->getDirection() === PieceSquadro::EST || $piece->getDirection() === PieceSquadro::OUEST) {
            $this->plateau->setPiece($piece, $x, 0);
        } else {
            $this->plateau->setPiece($piece, 6, $y);
        }
    }

    public function sortPiece($couleur, $rang)
    {
        if ($couleur === PieceSquadro::BLANC) {
            $this->plateau->retireLigneJouable($rang);
        } else {
            $this->plateau->retireColonneJouable($rang);
        }
    }

    public function remporteVictoire($couleur)
    {
        $jouables = $couleur === PieceSquadro::BLANC
            ? $this->plateau->getLignesJouables()
            : $this->plateau->getColonnesJouables();

        return count($jouables) <= 1;
    }
}