SquadroUIGenerator.php 9,54 ko
Newer Older
require_once 'PieceSquadro.php';
require_once 'PieceSquadroUI.php';
require_once 'PlateauSquadro.php';

/**
 * Classe SquadroUIGenerator
 * Gère la génération des pages HTML pour l'application de jeu Squadro.
 */
class SquadroUIGenerator
{

    /**
     * Génère une page HTML pour afficher les pièces disponibles à jouer pour le joueur actif.
     * @param PlateauSquadro $plateau
     * @param string $joueur
     * @return string Le code HTML de la page.
     */
    //public static function pageJouerPiece(array $pieces, int $x, int $y): string
    public static function pageJouerPiece(PlateauSquadro $plateau, string $joueur): string
        // Utilisation de la méthode d'entête de ton ami
        $html = self::entete("Choisir une pièce à jouer");

        // Contenu spécifique à la page "Jouer une pièce"
        $html .= '<div class="container has-text-centered">
                    <h2 class="title">' . $joueur . ' joue </h2>';
        $html .= SquadroUIGenerator::plateauDeJeu($plateau, $joueur);

        // Fermeture de la page en utilisant la méthode pied() de ton ami
        $html .= self::pied();

        return $html;
    }

    /**
     * Génère la page d'accueil du jeu.
     * @return string Le code HTML de la page d'accueil.
     */
    public static function pageAccueil(): string
    {
        // Utilisation de la méthode d'entête de ton ami
        $html = self::entete("Bienvenue dans le jeu Squadro");

        // Contenu spécifique à la page d'accueil
        $html .= '<div class="container has-text-centered">
                    <h2 class="title">Vous jouez avec quelles pièces?</h2>
                    <form method="post" action="traiteActionSquadro.php" class="field is-grouped is-grouped-centered">
                        <input type="hidden" name="action" value="commencerPartie"/>
Mathéo Beaudouin's avatar
Mathéo Beaudouin a validé
                        <input class="button is-link" type="submit" name="joueur" value="Blanc"/>
                        <input class="button is-link" type="submit" name="joueur" value="Noir"/>
                  </div>';

        // Fermeture de la page en utilisant la méthode pied() de ton ami
        $html .= self::pied();

        return $html;
    }

    /**
     * Génère la page de fin de jeu.
     * @param PlateauSquadro $plateau
     * @param String $joueur
     * @return string Le code HTML de la page de fin de jeu.
     */
    public static function pageFinDeJeu(PlateauSquadro $plateau, string $joueur): string
        // Utilisation de la méthode d'entête de ton ami
        $html = self::entete("Fin de la Partie");

        // Contenu spécifique à la page de fin de jeu
        $html .= '<div class="container has-text-centered">
                    <h2 class="title">' . $joueur . ' a gagné</h2>
                    <form action="traiteActionSquadro.php" method="post">
                    <p><button class="button is-link" name="action" value="rejouer">Retour à l\'accueil</button></p>
        $html .= self::plateauDeJeu($plateau, '');

        // Fermeture de la page en utilisant la méthode pied() de ton ami
        $html .= self::pied();

        return $html;
    }

    /**
     * Génère la page de confirmation de mouvement avec un formulaire.
     * @param int $x La coordonnée x de la pièce sélectionnée.
     * @param int $y La coordonnée y de la pièce sélectionnée.
     * @return string Le code HTML de la page de confirmation de mouvement.
     */
    public static function pageConfirmerMouvement(int $x, int $y): string
    {
        // Générer l'entête de la page
        $html = self::entete("Confirmer le mouvement");

        // Contenu de la page avec un formulaire pour confirmer le déplacement
        $html .= '<div class="container has-text-centered">
                <h2 class="title">Confirmer le mouvement</h2>
                <p>Vous avez choisi de déplacer la pièce située en (' . $x . ', ' . $y . ').</p>
                
                <form method="post" action="traiteActionSquadro.php">
                    <input type="hidden" name="x" value="' . $x . '">
                    <input type="hidden" name="y" value="' . $y . '">
                    <div class="buttons is-centered">
                        <button type="submit" class="button is-success" name="action" value="confirmerChoix">Confirmer</button>
                        <button type="submit" class="button is-danger" name="action" value="annulerChoix">Annuler</button>
                    </div>
                </form>
              </div>';

        // Ajouter le pied de page
        $html .= self::pied();

        return $html;
    }

    /**
     * Méthode pour générer l'en-tête HTML.
     * Utilisée par toutes les pages pour inclure le début de la structure HTML.
     * @param string $title Titre de la page.
     * @return string Le code HTML de l'en-tête.
     */
    public static function entete(string $title): string
    {
        $entete = '<!DOCTYPE html>
<html lang="fr" class="has-background-grey-light">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Squadro</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.2/css/bulma.min.css">
  <section class="hero is-link">
    <div class="hero-body has-text-centered"> 
        <p class="title is-spaced"> Squadro </p>
    /**
     * Méthode pour générer le pied de page HTML.
     * Utilisée par toutes les pages pour inclure la fin de la structure HTML.
     * @return string Le code HTML du pied de page.
     */
    public static function pied(): string
    {
    /**
     * Génère le plateau de jeu avec des boutons liés à des formulaires.
     *
     * @param PlateauSquadro $plateau L'état actuel du plateau.
     * @param string $joueur Le joueur actif ("Blanc" ou "Noir").
     * @return string Le code HTML du plateau de jeu.
     */
    public static function plateauDeJeu(PlateauSquadro $plateau, string $joueur): string
    {
        $jouableBlanc = $joueur == "Blanc";
        $jouableNoir = !$jouableBlanc;
        $html = '<div class="container is-fullwidth "><br>';
        $html .= '<table class="table is-bordered has-background-grey-light">';

        for ($i = 0; $i < 9; $i++) {
            $html .= '<tr>';
            for ($j = 0; $j < 9; $j++) {
                $html .= '<td class="p-0">';

                // Coins du plateau
                if (($i == 0 || $i == 8) && ($j == 0 || $j == 8)) {
                    $html .= PieceSquadroUI::boutonTexte('');
                } // Indicateurs des mouvements noirs (haut et bas du plateau)
                else if ($i == 0) {
                    $html .= PieceSquadroUI::boutonTexte(($j > 1 && $j < 7) ? PlateauSquadro::NOIR_V_RETOUR[$j - 1] : '');
                } else if ($i == 8) {
                    $html .= PieceSquadroUI::boutonTexte(($j > 1 && $j < 7) ? PlateauSquadro::NOIR_V_ALLER[$j - 1] : '');
                } // Indicateurs des mouvements blancs (gauche et droite du plateau)
                else if ($j == 0) {
                    $html .= PieceSquadroUI::boutonTexte(($i > 1 && $i < 7) ? PlateauSquadro::BLANC_V_ALLER[$i - 1] : '');
                } else if ($j == 8) {
                    $html .= PieceSquadroUI::boutonTexte(($i > 1 && $i < 7) ? PlateauSquadro::BLANC_V_RETOUR[$i - 1] : '');
                } // Cases jouables avec des pièces
                else {
                    $piece = $plateau->getPiece($i - 1, $j - 1);
                    $html .= '<form method="post" action="traiteActionSquadro.php">';
                    $html .= '<input type="hidden" name="action" value="choisirPiece">';

                    if ($piece->getCouleur() == PieceSquadro::VIDE) {
                        $html .= PieceSquadroUI::boutonVide();
                    } else if ($piece->getCouleur() == PieceSquadro::NEUTRE) {
                        $html .= PieceSquadroUI::boutonNeutre();
                    } else if ($piece->getCouleur() == PieceSquadro::BLANC) {
                        $html .= PieceSquadroUI::boutonBlanc($i - 1, $j - 1, $piece, $jouableBlanc);
                    } else if ($piece->getCouleur() == PieceSquadro::NOIR) {
                        $html .= PieceSquadroUI::boutonNoir($i - 1, $j - 1, $piece, $jouableNoir);
                    }

                    $html .= '</form>'; // Fermeture du formulaire
                $html .= '</td>';
            $html .= '</tr>';

        $html .= '</table></div>';
        return $html;
    /**
     * Génère une page annonçant la détection d'une erreur.
     *
     * @return string Le code HTML de la page d'erreur.
     */
    public static function pageErreur(): string
    {

        // Utilisation de la méthode d'entête de ton ami
        $html = self::entete("Erreur");

        // Contenu spécifique à la page d'erreur
        $html .= '<div class="container has-text-centered">
                <h2 class="title">Une erreur s\'est produite</h2>
                <form action="traiteActionSquadro.php" method="post">
                    <p><button class="button is-link" name="action" value="rejouer">Retour à l\'accueil</button></p>