diff --git a/controleurs/jouerPartie_controleur.php b/controleurs/jouerPartie_controleur.php
index c51c16b..b625c56 100644
--- a/controleurs/jouerPartie_controleur.php
+++ b/controleurs/jouerPartie_controleur.php
@@ -1,24 +1,324 @@
= $nombre) {
+ for ($j = 0; $j < $nombre; $j++) {
+ //enlève une occurence
+ unset($desPareils[array_search($i, $desPareils)]);
+ }
+ return true;
+ }
+ }
+
+ return false;
+}
+
+function valide_serie_au_choix($contrainte, &$des): bool
+{
+ $couleur = $contrainte["couleur"];
+ $nombre = $contrainte["nombre"];
+
+ echo 'SHEEEEEEEEEEEEEEEEEEEEEEEESH';
+
+ for ($i = 0; $i < sizeof($des); $i++) {
+ if ($des[$i]["couleur"] == $couleur) {
+
+ echo "je commence avec le dé " . $des[$i]["valeur"] . " !!!!!!!!!!!!!
";
+
+ $suivant = $des[$i]["valeur"] + 1;
+ // pour chaque dé de la série
+ $j = 0;
+ for ($j = 0; $j < $nombre - 1; $j++) {
+ // on le cherche
+ $trouve = false;
+ for ($k = 0; $k < sizeof($des); $k++) {
+ if ($des[$k]["couleur"] == $couleur && $des[$k]["valeur"] == $suivant) {
+ $suivant++;
+ $trouve = true;
+ echo "j'ai trouvé le dé " . $des[$k]["valeur"] . " ! ";
+ break;
+ }
+ }
+ if (!$trouve) {
+ echo "j'ai pas trouvé le dé " . $suivant . " ! ";
+ break;
+ }
+ echo 'CACA ';
+ }
+
+ echo "J : " . $j . "
";
+
+ if ($j == $nombre - 1) {
+ // on enlève les bons dés
+ for ($valeur = $des[$i]["valeur"]; $valeur < $valeur + $nombre; $valeur++) {
+ for ($k = 0; $k < sizeof($des); $k++) {
+ if ($des[$k]["couleur"] == $couleur && $des[$k]["valeur"] == $valeur) {
+ array_splice($des, $k, 1);
+ break;
+ }
+ }
+ }
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+function valide_seuil_de_des($contrainte, &$des): bool
+{
+ $couleur = $contrainte['couleur'];
+ $valeur = $contrainte['valeur'];
+ $plusgrand = $contrainte['sens'] == '>' ? true : false;
+ $total = 0;
+
+ for ($i = 0; $i < sizeof($des); $i++) {
+ $de = $des[$i];
+ if ($de['couleur'] == $couleur) {
+ $total += $de['valeur'];
+ }
+ }
+
+ if ($plusgrand) {
+ if ($total <= $valeur)
+ return false;
+
+ while ($total > 0) {
+ for ($i = 0; $i < sizeof($des); $i++) {
+ $de = $des[$i];
+ if ($de['couleur'] == $couleur) {
+ $total -= $de['valeur'];
+ array_splice($des, $i, 1);
+ break;
+ }
+ }
+ }
+ return true;
+ } else {
+ if ($total >= $valeur)
+ return false;
+
+ for ($i = 0; $i < sizeof($des); $i++) {
+ $de = $des[$i];
+ if ($de['couleur'] == $couleur && $de['valeur'] < $total) {
+ array_splice($des, $i, 1);
+ break;
+ }
+ }
+ return true;
+ }
+}
+
+function valide_contrainte(int $idcontrainte, &$des): bool
+{
+ $contrainte = get_contrainte($idcontrainte, "face_de_de");
+ if (!empty($contrainte)) {
+ return valide_face_de_de($contrainte[0], $des);
+ }
+
+ $contrainte = get_contrainte($idcontrainte, "meme_au_choix");
+ if (!empty($contrainte)) {
+ return valide_memes_au_choix($contrainte[0], $des);
+ }
+
+ $contrainte = get_contrainte($idcontrainte, "serie_au_choix");
+ if (!empty($contrainte)) {
+ return valide_serie_au_choix($contrainte[0], $des);
+ }
+
+ $contrainte = get_contrainte($idcontrainte, "seuil_de_des");
+ if (!empty($contrainte)) {
+ return valide_seuil_de_des($contrainte[0], $des);
+ }
+
+ echo 'QUOOOOOOOOOOOOOOOOOOI';
+ return false;
+}
+
+function valide_carte(int $idcarte, &$des): bool
+{
+ if ($idcarte == -1)
+ return false;
+ $contraintes = get_carte_contraintes($idcarte);
+ foreach ($contraintes as $contrainte) {
+ if (!valide_contrainte($contrainte['idcontrainte'], $des)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function get_carte_contraintes(int $idcarte)
+{
+ return get_infos_requete("SELECT idcontrainte FROM est_contrainte WHERE idcarte = " . $idcarte)['instances'];
+}
+
+function get_des_lancer(int $idlancer)
+{
+ $res = get_infos_requete("SELECT rang_couleur_valeur FROM de_lance WHERE idlancer = " . $idlancer)['instances'];
+ $des = array();
+ foreach ($res as $row) {
+ $str = $row['rang_couleur_valeur'];
+ $str = explode(';', $str);
+ $couleur = $str[1];
+ $valeur = $str[2];
+ switch ($couleur) {
+ case 'B':
+ $couleur = 'bleu';
+ break;
+
+ case 'J':
+ $couleur = 'jaune';
+ break;
+
+ case 'R':
+ $couleur = 'rouge';
+ break;
+ }
+ array_push($des, array('couleur' => $couleur, 'valeur' => $valeur));
+ }
+ return $des;
+}
+
+function tente_validations(int $idpartie, int $idplateau, int $idlancer, int $tour, int $joueurPos): int
+{
+ $des = get_des_lancer($idlancer);
+ $cartesValides = 0;
+ while (valide_carte(get_carte_id($idplateau, $joueurPos + $cartesValides + 1), $des)) {
+ $cartesValides++;
+ if (get_carte_id($idplateau, $joueurPos + $cartesValides + 1) == -1) {
+ return -1;
+ }
+ }
+ return $cartesValides;
+}
+
+function get_lancers(int $idpartie, int $tour)
+{
+ return get_infos_requete("SELECT * FROM comprend WHERE idpartie = " .
+ $idpartie . " AND num_tour = " . $tour . " ORDER BY numero_lancer_dans_tour")['instances'];
+}
+
+function mettre_a_jour_positions(int $idpartie, int $tour)
+{
+ $joueurs = getJoueursPositions($idpartie, $tour);
+ $idplateau = get_plateau_id($idpartie);
+ foreach ($joueurs as $joueur) {
+ $joueurPos = $joueur['position'];
+ if ($joueur['idjoueur'] != get_joueur_tour($idpartie, $tour)['idjoueur']) {
+ placer_joueur($joueur['idjoueur'], $idpartie, $tour + 1, $joueurPos);
+ continue;
+ }
+
+ $lances = get_lancers($idpartie, $tour);
+ for ($i = 0; $i < 3; $i++) {
+ $idlancer = $lances[$i]['idlancer'];
+ $validations = tente_validations($idpartie, $idplateau, $idlancer, $tour, $joueurPos);
+ if ($validations == -1) {
+ // gagné !
+ echo 'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG';
+ $joueurPos = 13;
+ break;
+ }
+ $joueurPos += $validations;
+ }
+ placer_joueur($joueur['idjoueur'], $idpartie, $tour + 1, $joueurPos);
+ }
+}
+
+function get_joueur_tour(int $idpartie, int $tour)
+{
+ $joueurs = getJoueursPartie($idpartie);
+ $joueur_index = ($tour - 1) % sizeof($joueurs);
+
+ return $joueurs[$joueur_index];
+}
+
+function get_joueur_actuel(int $idpartie)
+{
+ return get_joueur_tour($idpartie, get_partie_tour($idpartie));
+}
+
+function partie_est_a_venir(int $idpartie)
+{
+ return !empty(get_infos_requete("SELECT idpartie FROM partie WHERE idpartie = " .
$idpartie . " AND etat = 'a venir'")['instances']);
}
-function get_parties_tour(int $idpartie): int {
+function get_partie_tour(int $idpartie): int
+{
$tour = get_infos_requete("SELECT * FROM tour WHERE idpartie = "
- . $idpartie . " ORDER BY num_tour DESC LIMIT 1")['instances'];
+ . $idpartie . " ORDER BY num_tour DESC LIMIT 1")['instances'];
- if (empty($tour)){
+ if (empty($tour)) {
return 0;
}
@@ -42,8 +342,105 @@ function get_parties_id()
return $ids;
}
-function lancer_partie(int $idpartie) {
- executer_une_requete("UPDATE partie SET etat = 'en cours' WHERE idpartie = " . $idpartie);
+function placer_joueur(int $idjoueur, int $idpartie, int $tour, int $pos)
+{
+ executer_une_requete("INSERT INTO est_en_position (idjoueur, idpartie, num_tour, position) VALUES ("
+ . $idjoueur . ", " . $idpartie . ", " . $tour . ", " . $pos . ")");
+}
+
+function placer_joueurs_debut(int $idpartie)
+{
+ $joueurs = getJoueursPartie($idpartie);
+
+ foreach ($joueurs as $joueur) {
+ placer_joueur($joueur['idjoueur'], $idpartie, 1, 0);
+ }
+}
+
+function lancer_partie(int $idpartie)
+{
+ executer_une_requete("UPDATE partie SET etat = 'en cours', date_partie = NOW(), horaire = NOW() WHERE idpartie = " . $idpartie);
+ creer_tour($idpartie);
+ placer_joueurs_debut($idpartie);
+}
+
+
+
+function inserer_de(int $idlancer, int $rang, string $couleur, int $valeur)
+{
+
+ $rang_couleur_valeur = $rang . ";" . $couleur . ";" . $valeur;
+
+ executer_une_requete("INSERT INTO de_lance (`rang_couleur_valeur`, `idlancer`) VALUES ('" .
+ $rang_couleur_valeur . "', " . $idlancer . " )");
+}
+
+function lancer_la_couleur(int $idlancer, string $couleur, int $nbDes, int $decalage)
+{
+ $nums = [];
+ for ($i = 0; $i < $nbDes; $i++) {
+ $numDe = rand(1, 6);
+ inserer_de($idlancer, $decalage + $i + 1, $couleur, $numDe);
+ array_push($nums, $numDe);
+ }
+ return $nums;
+}
+
+function creer_tour(int $idpartie)
+{
+ $tour = get_partie_tour($idpartie);
+
+ $tour++;
+
+ executer_une_requete("INSERT INTO tour (idpartie, num_tour) VALUES (" .
+ $idpartie . ", " . $tour . ")");
+}
+
+function get_lancer_dans_tour(int $idpartie, int $tour): int
+{
+ $res = get_infos_requete("SELECT * FROM comprend WHERE idpartie = " .
+ $idpartie . " AND num_tour = " . $tour . " ORDER BY numero_lancer_dans_tour DESC")['instances'];
+
+ if (empty($res))
+ return -1;
+
+ return $res[0]['numero_lancer_dans_tour'];
+}
+
+function get_lancers_restants(int $idpartie)
+{
+ return 2 - get_lancer_dans_tour($idpartie, get_partie_tour($idpartie));
+}
+
+function lancer_les_des(int $idpartie, int $desbleus, int $desjaunes, int $desrouges)
+{
+ $total = $desbleus + $desrouges + $desjaunes;
+
+ if ($total != 6) {
+ return [];
+ }
+
+ $des_lances = ["B" => [], "J" => [], "R" => []];
+
+ $idlancer = get_infos_requete("INSERT INTO effectue (idjoueur) VALUES (" .
+ get_joueur_actuel($idpartie)['idjoueur'] . ") RETURNING idlancer")['instances'][0]['idlancer'];
+
+ $des_lances["B"] = lancer_la_couleur($idlancer, "B", $desbleus, 0);
+ $des_lances["J"] = lancer_la_couleur($idlancer, "J", $desjaunes, $desbleus);
+ $des_lances["R"] = lancer_la_couleur($idlancer, "R", $desrouges, $desbleus + $desjaunes);
+
+ $tour = get_partie_tour($idpartie);
+ $lancer_dans_tour = get_lancer_dans_tour($idpartie, $tour) + 1;
+
+ executer_une_requete("INSERT INTO comprend (`idpartie`, `num_tour`, `idlancer`, `numero_lancer_dans_tour`) VALUES ("
+ . $idpartie . ", " . $tour . ", " . $idlancer . ", " . $lancer_dans_tour . ")");
+
+ if ($lancer_dans_tour == 2) {
+ creer_tour($idpartie);
+ mettre_a_jour_positions($idpartie, $tour);
+ }
+
+ return $des_lances;
}
?>
\ No newline at end of file
diff --git a/img/des/deB1.png b/img/des/deB1.png
new file mode 100644
index 0000000..750a9c0
Binary files /dev/null and b/img/des/deB1.png differ
diff --git a/img/des/deB2.png b/img/des/deB2.png
new file mode 100644
index 0000000..699e816
Binary files /dev/null and b/img/des/deB2.png differ
diff --git a/img/des/deB3.png b/img/des/deB3.png
new file mode 100644
index 0000000..c8085c0
Binary files /dev/null and b/img/des/deB3.png differ
diff --git a/img/des/deB4.png b/img/des/deB4.png
new file mode 100644
index 0000000..76a861a
Binary files /dev/null and b/img/des/deB4.png differ
diff --git a/img/des/deB5.png b/img/des/deB5.png
new file mode 100644
index 0000000..a0f6a92
Binary files /dev/null and b/img/des/deB5.png differ
diff --git a/img/des/deB6.png b/img/des/deB6.png
new file mode 100644
index 0000000..a5d6870
Binary files /dev/null and b/img/des/deB6.png differ
diff --git a/img/des/deJ1.png b/img/des/deJ1.png
new file mode 100644
index 0000000..6580f80
Binary files /dev/null and b/img/des/deJ1.png differ
diff --git a/img/des/deJ2.png b/img/des/deJ2.png
new file mode 100644
index 0000000..e96b551
Binary files /dev/null and b/img/des/deJ2.png differ
diff --git a/img/des/deJ3.png b/img/des/deJ3.png
new file mode 100644
index 0000000..49aca5b
Binary files /dev/null and b/img/des/deJ3.png differ
diff --git a/img/des/deJ4.png b/img/des/deJ4.png
new file mode 100644
index 0000000..3186682
Binary files /dev/null and b/img/des/deJ4.png differ
diff --git a/img/des/deJ5.png b/img/des/deJ5.png
new file mode 100644
index 0000000..08d96b4
Binary files /dev/null and b/img/des/deJ5.png differ
diff --git a/img/des/deJ6.png b/img/des/deJ6.png
new file mode 100644
index 0000000..19c8f2c
Binary files /dev/null and b/img/des/deJ6.png differ
diff --git a/img/des/deR1.png b/img/des/deR1.png
new file mode 100644
index 0000000..b37798d
Binary files /dev/null and b/img/des/deR1.png differ
diff --git a/img/des/deR2.png b/img/des/deR2.png
new file mode 100644
index 0000000..8c278d3
Binary files /dev/null and b/img/des/deR2.png differ
diff --git a/img/des/deR3.png b/img/des/deR3.png
new file mode 100644
index 0000000..9636f3f
Binary files /dev/null and b/img/des/deR3.png differ
diff --git a/img/des/deR4.png b/img/des/deR4.png
new file mode 100644
index 0000000..c4fd802
Binary files /dev/null and b/img/des/deR4.png differ
diff --git a/img/des/deR5.png b/img/des/deR5.png
new file mode 100644
index 0000000..452f2d0
Binary files /dev/null and b/img/des/deR5.png differ
diff --git a/img/des/deR6.png b/img/des/deR6.png
new file mode 100644
index 0000000..0512d46
Binary files /dev/null and b/img/des/deR6.png differ
diff --git a/sql/script_creation_dataset.sql b/sql/script_creation_dataset.sql
index 1a81012..5ee1d87 100644
--- a/sql/script_creation_dataset.sql
+++ b/sql/script_creation_dataset.sql
@@ -118,9 +118,8 @@ CREATE TABLE
CREATE TABLE
est_en_position (
- PRIMARY KEY (idjoueur, idcarte, idpartie, num_tour),
+ PRIMARY KEY (idjoueur, idpartie, num_tour),
idjoueur INTEGER NOT NULL,
- idcarte INTEGER NOT NULL,
idpartie INTEGER NOT NULL,
num_tour INTEGER NOT NULL,
position VARCHAR(42)
@@ -299,8 +298,6 @@ ALTER TABLE est_en_lien ADD FOREIGN KEY (idclassement_1) REFERENCES classement (
ALTER TABLE est_en_position ADD FOREIGN KEY (idpartie, num_tour) REFERENCES tour (idpartie, num_tour);
-ALTER TABLE est_en_position ADD FOREIGN KEY (idcarte) REFERENCES carte (idcarte);
-
ALTER TABLE est_en_position ADD FOREIGN KEY (idjoueur) REFERENCES joueur (idjoueur);
ALTER TABLE est_lie_a ADD FOREIGN KEY (idclassement_composante) REFERENCES classement (idclassement);
diff --git a/vues/jouerPartie_vue.php b/vues/jouerPartie_vue.php
index 32ab717..70f5d1d 100644
--- a/vues/jouerPartie_vue.php
+++ b/vues/jouerPartie_vue.php
@@ -94,7 +94,7 @@ function afficherCartes(int $idpartie, int $tour): void
} else {
afficher_depart(getJoueursPosition($idpartie, $tour, 0));
for ($i = 0; $i < sizeof($cartes); $i++) {
- afficherCarte($cartes[$i]['img'], $i + 1, []);
+ afficherCarte($cartes[$i]['img'], $i + 1, getJoueursPosition($idpartie, $tour, $i + 1));
}
}
afficher_arrivee();
@@ -128,9 +128,20 @@ function formulaire_lancer_partie(int $idpartie)
echo '';
}
-/***********************************/
-/* Formulaire de sélection de la main composée de 6 dés */
-/***********************************/
+function afficher_des($des)
+{
+ if (empty($des))
+ return;
+
+ echo '
';
+ }
+ }
+ echo '