= $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_partie_tour(int $idpartie): int { $tour = get_infos_requete("SELECT * FROM tour WHERE idpartie = " . $idpartie . " ORDER BY num_tour DESC LIMIT 1")['instances']; if (empty($tour)) { return 0; } return $tour[0]['num_tour']; } function getCards(int $idpartie) { return get_infos_requete("SELECT img, idcarte FROM carte JOIN est_compose USING(idcarte) JOIN partie USING(idplateau) WHERE idpartie = " . $idpartie . " ORDER BY rang")['instances']; } function get_parties_id() { $parties = get_infos_requete("SELECT idpartie FROM partie WHERE etat = 'a venir'")['instances']; $ids = array(); foreach ($parties as $partie) { array_push($ids, $partie['idpartie']); } return $ids; } 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; } ?>