Newer
Older

G. Daryl M. OKOU
a validé
<?php
require_once 'PieceSquadro.php';
require_once 'PieceSquadroUI.php';
require_once 'PlateauSquadro.php';

G. Daryl M. OKOU
a validé
require_once 'PDOSquadro.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.
*/

G. Daryl M. OKOU
a validé
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"

G. Daryl M. OKOU
a validé
$html .= '<div class="container has-text-centered">

G. Daryl M. OKOU
a validé
<h2 class="title">' . $joueur . ' joue </h2>';

G. Daryl M. OKOU
a validé
$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

G. Daryl M. OKOU
a validé
$html .= '<div class="container has-text-centered">
<h2 class="title">Vous jouez avec quelles pièces?</h2>

G. Daryl M. OKOU
a validé
<form method="post" action="traiteActionSquadro.php" class="field is-grouped is-grouped-centered">

G. Daryl M. OKOU
a validé
<div class="control">

G. Daryl M. OKOU
a validé
<input type="hidden" name="action" value="commencerPartie"/>
<input class="button is-link" type="submit" name="joueur" value="Blanc"/>
<input class="button is-link" type="submit" name="joueur" value="Noir"/>

G. Daryl M. OKOU
a validé

G. Daryl M. OKOU
a validé
</form>
</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.

G. Daryl M. OKOU
a validé
* @param PlateauSquadro $plateau
* @param String $joueur
* @return string Le code HTML de la page de fin de jeu.
*/

G. Daryl M. OKOU
a validé
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

G. Daryl M. OKOU
a validé
$html .= '<div class="container has-text-centered">

G. Daryl M. OKOU
a validé
<h2 class="title">' . $joueur . ' a gagné</h2>

G. Daryl M. OKOU
a validé
<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, '');

G. Daryl M. OKOU
a validé
// 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.

G. Daryl M. OKOU
a validé
*
* @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.

G. Daryl M. OKOU
a validé
* @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

G. Daryl M. OKOU
a validé
$html = self::entete("Confirmer le mouvement");
// Contenu de la page avec un formulaire pour confirmer le déplacement

G. Daryl M. OKOU
a validé
$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>

G. Daryl M. OKOU
a validé
<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">

G. Daryl M. OKOU
a validé
<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>

G. Daryl M. OKOU
a validé
<html lang="fr" class="has-background-white-ter">

G. Daryl M. OKOU
a validé
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.2/css/bulma.min.css">

G. Daryl M. OKOU
a validé
</head>

G. Daryl M. OKOU
a validé
<body>
<section class="hero is-link">
<div class="hero-body has-text-centered">
<p class="title is-spaced"> Squadro </p>

G. Daryl M. OKOU
a validé
<p class="subtitle">' . $title . '</p>

G. Daryl M. OKOU
a validé
</div>
</section>
';

G. Daryl M. OKOU
a validé
return $entete;
}
/**
* 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. Daryl M. OKOU
a validé
$pied = "</body>
</html>";
return $pied;
}
/**
* 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
{

G. Daryl M. OKOU
a validé
$actionSquadro = new ActionSquadro($plateau);
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
$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);

G. Daryl M. OKOU
a validé
$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) {

G. Daryl M. OKOU
a validé
$html .= PieceSquadroUI::boutonBlanc($i - 1, $j - 1, $piece, $jouableBlanc && $actionSquadro->estJouablePiece($i - 1, $j - 1));
} else if ($piece->getCouleur() == PieceSquadro::NOIR) {

G. Daryl M. OKOU
a validé
$html .= PieceSquadroUI::boutonNoir($i - 1, $j - 1, $piece, $jouableNoir && $actionSquadro->estJouablePiece($i - 1, $j - 1));
}
$html .= '</form>'; // Fermeture du formulaire
Mathéo Beaudouin
a validé
$html .= '</table></div>';
return $html;
Mathéo Beaudouin
a validé
/**
* 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>

G. Daryl M. OKOU
a validé
<form action="traiteActionSquadro.php" method="post">
<p><button class="button is-link" name="action" value="rejouer">Retour à l\'accueil</button></p>
</form>
</div>
';
return $html;
}
Mathéo Beaudouin
a validé
/**
* Génère la page d'accueil de la salle de jeux (Home).
*
* @return string Le code HTML de la page Home.

G. Daryl M. OKOU
a validé
* @throws Exception
public static function pageHome(JoueurSquadro $player): string

G. Daryl M. OKOU
a validé
require_once 'env/db.php';
$html = self::entete("Salle de Jeux Squadro de ".$player->getNomJoueur());
PDOSquadro::initPDO($_ENV['sgbd'], $_ENV['host'], $_ENV['database'], $_ENV['user'], $_ENV['password']);
$allGames = PDOSquadro::getAllPartieSquadro();
$allPlayerGames = PDOSquadro::getAllPartieSquadroByPlayerName($player->getNomJoueur());

G. Daryl M. OKOU
a validé
$html .= '

G. Daryl M. OKOU
a validé
<div class="card has-text-centered">
<header class = "card-header"><h2 class="card-header-title">Créer une partie</h2> </header>
<form class="card-content" action="traiteActionSquadro.php" method="post">

G. Daryl M. OKOU
a validé
<button class="button is-large is-centered" type="submit" name="action" value="creerPartie">+</button>
</form>
</div>

G. Daryl M. OKOU
a validé
<div class="card has-text-centered"> <header class = "card-header"><h2 class="card-header-title">Continuer une partie</h2> </header> ';

G. Daryl M. OKOU
a validé
foreach ($allPlayerGames as $game) {
if ($game['gamestatus'] === 'waitingForPlayer') {
$data = PartieSquadro::fromJson($game['json']);
$playeroneName = $data->getNomJoueurActif();

G. Daryl M. OKOU
a validé
$html .= '<form class="card-content" action="traiteActionSquadro.php" method="post"> <span>En attente de: ' . $playeroneName . '</span>';

G. Daryl M. OKOU
a validé
$html .= '<input type="hidden" name="partieid" value="' . $game['partieid'] . '>"</input>';
$html .= '<button class="button" type="submit" name="action" value="continuerPartie"> > </button></form>';
}
}
$html .= '

G. Daryl M. OKOU
a validé
<div class="card has-text-centered"> <header class = "card-header"><h2 class="card-header-title has-text-centered">Rejoindre une partie</h2> </header> ';

G. Daryl M. OKOU
a validé
foreach ($allGames as $game) {
if ($game['gamestatus'] === 'constructed' && $game['playerone'] !== $_SESSION['player']->id) {
$data = PartieSquadro::fromJson($game['json']);
$playeroneName = $data->getJoueurs()[PartieSquadro::PLAYER_ONE]->getNomJoueur();

G. Daryl M. OKOU
a validé
$html .= '<form class="card-content" action="traiteActionSquadro.php" method="post"> <span>Partie créée par: ' . $playeroneName . "</span>";

G. Daryl M. OKOU
a validé
$html .= '<input type="hidden" name="partieid" value="' . $game['partieid'] . '>"</input>';
$html .= '<button class="button is-small" type="submit" name="action" value="rejoindrePartie"> > </button></form>';
}
}

G. Daryl M. OKOU
a validé
$html .= '</div> <div class="card has-text-centered"> <header class = "card-header"><h2 class="card-header-title"">Consulter une partie terminée</h2> </header> ';

G. Daryl M. OKOU
a validé
foreach ($allGames as $game) {
if ($game['gamestatus'] === 'finished') {
$data = PartieSquadro::fromJson($game['json']);
$nomGagnant = $data->getNomJoueurActif();

G. Daryl M. OKOU
a validé
$html .= '<form class="card-content" action="traiteActionSquadro.php" method="post"> <span>Partie gagnée par: ' . $nomGagnant . "</span> ";

G. Daryl M. OKOU
a validé
$html .= '<input type="hidden" name="partieid" value="' . $game['partieid'] . '>"</input>';
$html .= '<button class="button is-small" type="submit" name="action" value="continuerPartie"> > </button></form>';
}
}
$html .= '</div >
<div class="container">
<form action = "traiteActionSquadro.php" method = "post" >
<button class="button is-large is-danger" type = "submit" name = "action" value ="quitter">Quitter</button>
</form>
</div> </div>';
if (isset($_SESSION['partieCreer']) && $_SESSION['partieCreer']) {

G. Daryl M. OKOU
a validé
$html .= '
<div class ="notification is-info has-text-centered">
<button class="delete" aria-label="delete"></button>
<strong>Une partie a été créée !</strong>
</div >';

G. Daryl M. OKOU
a validé
$_SESSION['partieCreer'] = false;

G. Daryl M. OKOU
a validé
}
// Pied de page
$html .= self::pied();
return $html;
}