Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?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.");
}
}
}