commit1749366a26Author: Persson-dev <sim16.prib@gmail.com> Date: Thu Apr 18 23:39:16 2024 +0200 les dés commitd3f06fae1aAuthor: Persson-dev <sim16.prib@gmail.com> Date: Thu Apr 18 23:39:07 2024 +0200 je sais plus quoi dire
446 lines
12 KiB
PHP
446 lines
12 KiB
PHP
<?php
|
|
function getJoueursPartie(int $idpartie)
|
|
{
|
|
return get_infos_requete("SELECT * FROM joue JOIN joueur J USING(idjoueur) WHERE joue.idpartie = " . $idpartie . " ORDER BY rang")['instances'];
|
|
}
|
|
|
|
function get_plateau_id(int $idpartie): int
|
|
{
|
|
return get_infos_requete("SELECT idplateau FROM partie WHERE idpartie = " . $idpartie)['instances'][0]['idplateau'];
|
|
}
|
|
|
|
function getJoueursPosition(int $idpartie, int $tour, int $pos)
|
|
{
|
|
return get_infos_requete("SELECT idjoueur, rang FROM est_en_position JOIN joue USING(idpartie, idjoueur) WHERE idpartie = "
|
|
. $idpartie . " AND position = " . $pos . " AND num_tour = " . $tour)['instances'];
|
|
}
|
|
|
|
function getJoueursPositions(int $idpartie, int $tour)
|
|
{
|
|
return get_infos_requete("SELECT idjoueur, position FROM est_en_position WHERE idpartie = " .
|
|
$idpartie . " AND num_tour = " . $tour)['instances'];
|
|
}
|
|
|
|
function getJoueurPosition(int $idpartie, int $idjoueur, int $tour)
|
|
{
|
|
return get_infos_requete("SELECT idjoueur, position FROM est_en_position WHERE idpartie = " .
|
|
$idpartie . " AND num_tour = " . $tour . " AND idjoueur = " . $idjoueur)['instances'][0];
|
|
}
|
|
|
|
function get_carte_id(int $idplateau, int $positionCarte): int
|
|
{
|
|
$res = get_infos_requete("SELECT idcarte FROM est_compose WHERE idplateau = " .
|
|
$idplateau . " AND rang = " . $positionCarte)['instances'];
|
|
if (empty($res))
|
|
return -1;
|
|
return $res[0]['idcarte'];
|
|
}
|
|
|
|
function get_contrainte(int $idcontrainte, string $typeContrainte)
|
|
{
|
|
return get_infos_requete("SELECT * FROM " . $typeContrainte . " JOIN contrainte USING(idcontrainte) WHERE idcontrainte = " . $idcontrainte)['instances'];
|
|
}
|
|
|
|
function valide_face_de_de($contrainte, &$des): bool
|
|
{
|
|
$couleur = $contrainte['couleur'];
|
|
$valeur = $contrainte['valeur'];
|
|
for ($i = 0; $i < sizeof($des); $i++) {
|
|
$de = $des[$i];
|
|
if ($de['couleur'] == $couleur && $de['valeur'] == $valeur) {
|
|
array_splice($des, $i, 1);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function valide_memes_au_choix($contrainte, &$des): bool
|
|
{
|
|
$couleur = $contrainte['couleur'];
|
|
$nombre = $contrainte['nombre'];
|
|
$desPareils = array_fill(0, 6, 0);
|
|
for ($i = 0; $i < sizeof($des); $i++) {
|
|
$de = $des[$i];
|
|
if ($de['couleur'] == $couleur) {
|
|
$desPareils[$de["valeur"] - 1]++;
|
|
}
|
|
}
|
|
|
|
for ($i = 0; $i < sizeof($desPareils); $i++) {
|
|
if ($desPareils[$i] >= $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"] . " !!!!!!!!!!!!! <br/>";
|
|
|
|
$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 . "<br/>";
|
|
|
|
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;
|
|
}
|
|
|
|
?>
|