PieceSquadroUI.php 3,66 ko
Newer Older
G. Daryl M. OKOU's avatar
G. Daryl M. OKOU a validé
<?php

require_once 'PieceSquadro.php'; // Si nécessaire, pour accéder aux constantes comme BLANC, NOIR, VIDE, etc.

/**
 * Classe PieceSquadroUI
 *
 * Génère le code HTML pour représenter les différentes cases et pièces du plateau de jeu Squadro.
 */
class PieceSquadroUI {

    /**
     * Génère le HTML pour une case vide désactivée.
     *
     * @return string Code HTML de la case vide.
     */
    public static function renderCaseVide(): string {
        return '<button class="case-vide" disabled>Vide</button>';
    }

    /**
     * Génère le HTML pour une case neutre désactivée.
     *
     * @return string Code HTML de la case neutre.
     */
    public static function renderCaseNeutre(): string {
        return '<button class="case-neutre" disabled>Neutre</button>';
    }

    /**
     * Génère le HTML pour une pièce blanche.
     *
     * @param int $x Coordonnée X de la pièce sur le plateau.
     * @param int $y Coordonnée Y de la pièce sur le plateau.
     * @param bool $active Indique si la pièce est cliquable (true) ou désactivée (false).
     * @return string Code HTML de la pièce blanche.
     */
    public static function renderPieceBlanche(int $x, int $y, bool $active): string {
        if ($active) {
            return sprintf(
                '<form method="POST">
                    <input type="hidden" name="x" value="%d">
                    <input type="hidden" name="y" value="%d">
                    <button type="submit" class="piece-blanche">Blanc</button>
                </form>',
                $x,
                $y
            );
        } else {
            return '<button class="piece-blanche" disabled>Blanc</button>';
        }
    }

    /**
     * Génère le HTML pour une pièce noire.
     *
     * @param int $x Coordonnée X de la pièce sur le plateau.
     * @param int $y Coordonnée Y de la pièce sur le plateau.
     * @param bool $active Indique si la pièce est cliquable (true) ou désactivée (false).
     * @return string Code HTML de la pièce noire.
     */
    public static function renderPieceNoire(int $x, int $y, bool $active): string {
        if ($active) {
            return sprintf(
                '<form method="POST">
                    <input type="hidden" name="x" value="%d">
                    <input type="hidden" name="y" value="%d">
                    <button type="submit" class="piece-noire">Noir</button>
                </form>',
                $x,
                $y
            );
        } else {
            return '<button class="piece-noire" disabled>Noir</button>';
        }
    }

    /**
     * Génère le HTML d'une case en fonction de son état et de ses propriétés.
     *
     * @param PieceSquadro $piece L'objet représentant une pièce ou une case.
     * @param int $x Coordonnée X de la pièce sur le plateau.
     * @param int $y Coordonnée Y de la pièce sur le plateau.
     * @param bool $isActive Indique si la pièce est active (cliquable pour l'utilisateur courant).
     * @return string Code HTML de la case ou de la pièce.
     */
    public static function renderCase(PieceSquadro $piece, int $x, int $y, bool $isActive): string {
        switch ($piece->getCouleur()) {
            case PieceSquadro::BLANC:
                return self::renderPieceBlanche($x, $y, $isActive);
            case PieceSquadro::NOIR:
                return self::renderPieceNoire($x, $y, $isActive);
            case PieceSquadro::VIDE:
                return self::renderCaseVide();
            case PieceSquadro::NEUTRE:
                return self::renderCaseNeutre();
            default:
                throw new InvalidArgumentException("Type de case ou pièce inconnu.");
        }
    }
}