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 '
'; + foreach ($des as $nom => $valeurs) { + foreach ($valeurs as $valeur) { + echo '' . $nom . $valeur . ''; + } + } + echo '
'; +} + function formulaire_selection_des_main(int $idpartie) { echo '
@@ -146,7 +157,7 @@ function formulaire_selection_des_main(int $idpartie) - +
'; } @@ -175,16 +186,24 @@ function formulaire_selection_des_main(int $idpartie) if (isset($_POST['lancerPartie'])) { lancer_partie($idpartie); } - + $des = []; + if (isset($_POST['lancerDes'])) { + $des = lancer_les_des($idpartie, (int) $_POST['desBleus'], (int) $_POST['desJaunes'], (int) $_POST['desRouges']); + if (empty($des)) { + echo 'Tu sais pas compter ?'; + } + } afficher_joueurs($idpartie); - - afficherCartes($idpartie, get_parties_tour($idpartie)); + afficherCartes($idpartie, get_partie_tour($idpartie)); + afficher_des($des); if (partie_est_a_venir($idpartie)) { formulaire_lancer_partie($idpartie); } else { + echo 'Tour de ' . get_joueur_actuel($idpartie)['pseudo'] . ' Lancers restants : ' . get_lancers_restants($idpartie); formulaire_selection_des_main($idpartie); } + ?>