Commit cc7239b9 authored by David's avatar David
Browse files

Nouvelles fonctionnalités de GOW

parent ccbebca5
This diff is collapsed.
......@@ -24,3 +24,4 @@ Contributors
Nejat Maryam
Graceffa David
# GameOfWord
File added
<?php
<?php
class diviner_game
{
private $mode = '';
private $errors = array();
private $lang = array();
private $motadeviner='';
private $nivcarte = '';
......@@ -12,6 +13,7 @@ class diviner_game
private $userlang = '';
private $user= '';
private $diviner= '';
private $pointsSanction ='';
private $raisin ='';
private $res2 = '';
......@@ -21,13 +23,15 @@ class diviner_game
private $result= '';
private $sanction ='';
private $score='';
private $carteValide = false;
private $adresse = '';
private $reussie = 'en cours';
private $temps='';
private $mess='';
public function set_mode($mode)
{
......@@ -38,7 +42,7 @@ class diviner_game
{
if ( $this->init() )
{
$this->sanctionLastPartie();
$this->sanctionLastPartie();
if($this->selectpartie()){
$this->update();
}
......@@ -53,15 +57,30 @@ class diviner_game
//récupération des informations de base : id user et sa langue
$this->user = user::getInstance();
$this->diviner = $this->user->id;
$this->userlang = $this->user->userlang;
$this->userlvl = userlvl::getInstance();
$this->time = $this->userlvl->get_time();
//récupération des points de sanction
$this->pointsSanction = variable::getloosePointsDevin();
if(isset($_SESSION["langDevin"])){
$this->userlang = $_SESSION["langDevin"];
}
else{
$this->userlang = $this->user->langGame;
}
$this->temps = date("d/m/Y H:i:s");
unset($_SESSION["motDeviner"]); //permet de supprimer la sécurité qui empêche le joueur de s'ajouter des points à l'infini
unset($_SESSION["timeOutOracle"]); //permet de supprimer la sécurité qui empêche le joueur d'enlever des points à l'oracle à l'infini
return true;
}
private function sanctionLastPartie()
{ // fonction qui permet de vérifier l'état de la dernière partie et de sanctionner le joueur de 5 pts s'il a quitté la partitatut = "en cours")
$db = db::getInstance();
include('./sys/load_iso.php');
$db = db::getInstance();
$sql = "SELECT *
FROM parties WHERE idDevin = \"".$this->diviner."\"
ORDER BY parties.tpsDevin DESC
......@@ -70,26 +89,45 @@ class diviner_game
$this->sanction = mysqli_fetch_assoc($res);
if($this->sanction['reussie'] == "en cours"){
$sql = "SELECT scoreDevin
FROM score
WHERE userid ='".$this->diviner."'";
$res = $db->query($sql);
$this->score = mysqli_fetch_assoc($res);
$sql = "SELECT *
FROM sanctionCarte
WHERE idDevin ='".$this->diviner."' AND enregistrementID='".$this->sanction['enregistrementID']."'";
$res = $db->query($sql);
$this->existSanction = mysqli_num_rows($res);
if($this->existSanction == 0){
//Ajout de la carte sanctionné dans la BDD
$sql = "INSERT INTO sanctionCarte
(idDevin,enregistrementID)
VALUES (".$this->diviner.",".$this->sanction['enregistrementID'].")";
if( $res = $db->query($sql)){
$sql = "SELECT scoreDevin, scoreGlobal
FROM score
WHERE userid ='".$this->diviner."' AND langue='" . $iso[$this->userlang] . "'";
$res = $db->query($sql);
$this->score = mysqli_fetch_assoc($res);
if ($this->score['scoreDevin'] >= 5){
$this->score['scoreDevin']-=5;
$sql='UPDATE score
SET scoreDevin="'.$this->score['scoreDevin'].'"
WHERE userid="'.$this->diviner.'"';
$res=$db->query($sql);
echo "blablé";
}
else{
echo "boubou";
}
if ($this->score['scoreDevin'] >= $this->pointsSanction) { #à modifier avec un fichier config
$this->score['scoreDevin']-=$this->pointsSanction;
$this->score['scoreGlobal']-=$this->pointsSanction;
$sql='UPDATE score
SET scoreDevin="'.$this->score['scoreDevin'].'", scoreGlobal ="'.$this->score['scoreGlobal'].'"
WHERE userid="'.$this->diviner.'" AND langue="' . $iso[$this->userlang] . '"';
$res=$db->query($sql);
array_push($this->lang,"sanction");
}
else
{
array_push($this->lang,"sanction_without_points");
}
}
}
}
echo "KFC";
}
private function selectpartie()
......@@ -98,85 +136,91 @@ class diviner_game
$db = db::getInstance();
$sql = 'SELECT
enregistrementID,cheminEnregistrement,idOracle,carteID,nivcarte
FROM enregistrement WHERE idOracle!='.$this->diviner.' AND OracleLang="'.$this->userlang.'" AND validation="valid" ORDER BY RAND() LIMIT 100';
FROM enregistrement WHERE idOracle!='.$this->diviner.' AND OracleLang="'.$this->userlang.'" AND validation="valid" ORDER BY RAND()';
$this->result=$db->query($sql);
$nb_result=$this->result->num_rows;
//pour chaque enregistrement:
for ($i = 1; $i <= $nb_result; $i++)
{
$this->raisin= mysqli_fetch_assoc($this->result);
if($nb_result>0){
while($this->raisin= mysqli_fetch_assoc($this->result)){
// construction de l'adresse de l'enregistrement à partir du nom du fichier son
$this->adresse = "enregistrements/".$this->raisin['cheminEnregistrement'];
// construction de l'adresse de l'enregistrement à  partir du nom du fichier son
$this->adresse = "enregistrements/".$this->raisin['cheminEnregistrement'];
//initialisation du booléen qui représentera la condition finale pour que la partie soit acceptée
// Il deviendra faux si le moindre critère n'est pas rempli durant la procédure
$partieok=true;
//Connexion à la BD
$db = db::getInstance();
//initialisation du booléen qui représentera la condition finale pour que la partie soit acceptée
// Il deviendra faux si le moindre crità¨re n'est pas rempli durant la procédure
$partieok=true;
//récupération du contenu de la carte
$sql = 'SELECT
//récupération du contenu de la carte
$sql = 'SELECT
idDruide,niveau,mot,tabou1,tabou2,tabou3,tabou4,tabou5
FROM carte WHERE carteID='.$this->raisin['carteID'].'';
$res=$db->query($sql);
$this->res3= mysqli_fetch_assoc($res);
$res=$db->query($sql);
$this->res3= mysqli_fetch_assoc($res);
//récupération de l'éventuelle partie que le devin aurait fait sur cet enregistrement pour ne pas le re-proposer
$sql = 'SELECT reussie
//récupération de l'éventuelle partie que le devin aurait fait sur cet enregistrement pour ne pas le re-proposer
$sql = 'SELECT reussie
FROM parties WHERE idDevin ="'.$this->diviner.'" AND enregistrementID= "'.$this->raisin['enregistrementID'].'"';
$res=$db->query($sql);
$this->res5= mysqli_fetch_assoc($res);
// si le créateur de la carte et le devin sont la même personne, on passe à l'enregistrement suivant
if ($this->res3['idDruide'] == $this->diviner)
{
$partieok=false;
}
// si le devin a déjà joué cette carte et a eu un résultat (faux ou juste), on passe à l'enregistrement suivant.
//Si cette partie a été quitté précipitemment ou à cause d'un pb technique (reussie=en cours), il peut la rejouer.
if(($this->res5['reussie']=="oui")||($this->res5['reussie']=="non")||($this->res5['reussie']=="en cours")) #A modifier!
{
$partieok=false;
}
// si rien de s'oppose à ce que l'enregistrement soit proprosé
if ($partieok)
{
// récupération du pseudo de l'oracle pour savoir qui on écoute
$db = db::getInstance();
$sql = 'SELECT username
FROM user WHERE userid ="'.$this->raisin['idOracle'].'"';
$res=$db->query($sql);
$this->res2= mysqli_fetch_assoc($res);
//récupération du pseudo du créateur de la carte
$db = db::getInstance();
$sql = 'SELECT username
FROM user WHERE userid ="'.$this->res3['idDruide'].'"';
$res=$db->query($sql);
$this->res4= mysqli_fetch_assoc($res);
$this->setcarteValide($partieok);
$this->res5= mysqli_fetch_assoc($res);
// si le créateur de la carte et le devin sont la màªme personne, on passe à  l'enregistrement suivant
if ($this->res3['idDruide'] == $this->diviner)
{
$partieok=false;
}
// si le devin a déjà  joué cette carte et a eu un résultat (faux ou juste), on passe à  l'enregistrement suivant.
//Si cette partie a été quitté précipitemment ou à  cause d'un pb technique (reussie=en cours), il peut la rejouer.
if(($this->res5['reussie']=="oui")||($this->res5['reussie']=="non")||($this->res5['reussie']=="en cours")) #A modifier!
{
$partieok=false;
}
//On vérifie ici que l'enregistrement est bien sur le serveur
if (!file_exists($this->adresse)){
$partieok=false;
}
return true;
}
// si rien de s'oppose à  ce que l'enregistrement soit proprosé
if ($partieok)
{
// récupération du pseudo de l'oracle pour savoir qui on écoute
$db = db::getInstance();
$sql = 'SELECT username
FROM user WHERE userid ="'.$this->raisin['idOracle'].'"';
$res=$db->query($sql);
$this->res2= mysqli_fetch_assoc($res);
//récupération du pseudo du créateur de la carte
$db = db::getInstance();
$sql = 'SELECT username
FROM user WHERE userid ="'.$this->res3['idDruide'].'"';
$res=$db->query($sql);
$this->res4= mysqli_fetch_assoc($res);
$this->setcarteValide($partieok);
return true;
break;
}
}
array_push($this->errors,'NoGame');
}
return false;
else{
array_push($this->errors,'noEnregistrement');
return false;
}
}
private function update()
{
//Insertion des informations dans la table parties
//connexion à la bd
//connexion à  la bd
$db = db::getInstance();
$sql = 'INSERT INTO parties
......@@ -193,16 +237,14 @@ class diviner_game
private function display()
{
include('./views/diviner.game.html');
return true;
}
public function setcarteValide ($state){
$this->carteValide=$state;
}
public function getcarteValide(){
return $this->carteValide;
}
}
?>
<?php
<?php
class diviner_menu
{
......@@ -28,12 +28,17 @@ class diviner_menu
$controller->set_mode($this->mode);
return $controller->process();
break;
default:
//print $mode;
case 'diviner.game':
include('controllers/diviner.class.php');
$controller = new diviner_game();
$controller->set_mode($this->mode);
return $controller->process();
break;
default:
include('controllers/diviner.menu.game.php');
$controller = new diviner_menu_game();
$controller->set_mode($this->mode);
return $controller->process();
}
}
}
......
<?php
class diviner_menu_game
{
private $mode = '';
public function set_mode($mode)
{
$this->mode = $mode;
}
public function process()
{
if ( $this->init() )
{
return $this->display();
}
return false;
}
private function init()
{
return true;
}
private function display()
{
include('./views/diviner.menu.html');
return true;
}
}
?>
......@@ -5,9 +5,15 @@ class diviner_result
private $mode = '';
private $user = '';
private $devin = '';
private $oracle = '';
private $userlvl = '';
private $lang = '';
private $devinName ='';
private $previousSGDev = 0;
private $previousSDev = 0;
private $previousSGOracle = 0;
private $previousSOracle = 0;
private $pointsDev = 10;
private $reussie = 'oui';
......@@ -30,41 +36,89 @@ class diviner_result
private function init()
{
include('./sys/load_iso.php');
$db = db::getInstance();
//Récupération des informaions de base: userid
$this->user = user::getInstance();
$this->devin = $this->user->id;
$this->devinName = $this->user->username;
$this->lang = $_SESSION["langDevin"];
$sql = 'SELECT * FROM user_niveau WHERE userid=' . $this->devin;
$result = $db->query($sql);
$res = mysqli_fetch_assoc($result);
$spoken_lang = explode(';',$res['spoken_lang']);
$i=0;
while ($i<count($spoken_lang)) {
if(strcmp($iso[$this->lang],$spoken_lang[$i]) == 0){
break;
}
$i++;
}
if($i!=count($spoken_lang)){
$lang_lvl = explode(';',$res['niveau'])[$i];
$sql = 'SELECT * FROM coeff_niveau_langue WHERE niveau_langue="' . $lang_lvl . '"';
$result = $db->query($sql);
$this->lang_lvl_pts = mysqli_fetch_assoc($result)['coeff'];
}
else{
$this->lang_lvl_pts = 1; //par défaut
}
$this->userlvl = userlvl::getInstance();
$this->points= $this->userlvl->get_points();
$this->time = $this->userlvl->get_time();
return true;
}
private function score()
{
// Requête de modification du score du Devin qui a cherché en vain la réponse dans les astres alors qu'il fallait chercher dans les livres
if(!isset($_SESSION["motDeviner"]))
{
include('./sys/load_iso.php');
require_once('./controllers/update_score_coeff.php');
//connexion à la BD
$db = db::getInstance();
//récupération du score précédent;
$sql = 'SELECT `scoreGlobal`,`scoreDevin` FROM `score` WHERE `userid`="'.$this->devin.'"';
$result=$db->query($sql);
$res= mysqli_fetch_assoc($result);
$this->previousSGDev= $res['scoreGlobal'];
$this->previousSDev= $res['scoreDevin'];
//maj des variables de scores
updateScoreDevinSucces($this->devin,$iso[$_SESSION["langDevin"]],$this->points);
//~ exit;
$this->previousSGDev= $this->previousSGDev+$this->pointsDev;
$this->previousSDev= $this->previousSDev+$this->pointsDev;
//maj des scores dans la BD
$sql = 'UPDATE score
SET scoreGlobal='.$db->escape((string) $this->previousSGDev) . ', ' .
'scoreDevin='.$db->escape((string) $this->previousSDev) . '
WHERE userid='.$this->devin.'';
$db->query($sql);
//~ //récupération du score précédent;
//~ $sql = 'SELECT scoreGlobal,scoreDevin,first_game_time FROM score WHERE userid="'.$this->devin.'" AND langue="'. $iso[$_SESSION["langDevin"]] .'"';
//~ $result=$db->query($sql);
//~
//~ $res= mysqli_fetch_assoc($result);
//~ $this->previousSGDev= $res['scoreGlobal'];
//~ $this->previousSDev= $res['scoreDevin'];
//~ //maj des variables de scores
$pointsCoef = $this->points*$this->lang_lvl_pts;
$_SESSION["pointsCoef"] = $pointsCoef;
//~ $this->previousSGDev= $this->previousSGDev+($this->points*$this->lang_lvl_pts);
//~ $this->previousSDev= $this->previousSDev+($this->points*$this->lang_lvl_pts);
//~
//~ //echo $this->previousSDev;
//~ //maj des scores dans la BD
//~ if($res["first_game_time"]==""){
//~ $sql = 'UPDATE score
//~ SET scoreGlobal='.$db->escape((string) $this->previousSGDev) . ', ' .
//~ 'scoreDevin='.$db->escape((string) $this->previousSDev) . ',' .
//~ 'first_game_time="'.date('Y-m-d H:i:s').'"
//~ WHERE userid='.$this->devin.' AND langue= "'.$iso[$_SESSION["langDevin"]].'"';
//~ }
//~ else{
//~ $sql = 'UPDATE score
//~ SET scoreGlobal='.$db->escape((string) $this->previousSGDev) . ', ' .
//~ 'scoreDevin='.$db->escape((string) $this->previousSDev) . '
//~ WHERE userid='.$this->devin.' AND langue= "'.$iso[$_SESSION["langDevin"]].'"';
//~ }
//~ $db->query($sql);
// Requête de mise à jour de la table partie
$db = db::getInstance();
......@@ -72,11 +126,59 @@ class diviner_result
SET reussie='.$db->escape((string) $this->reussie).'
WHERE idDevin='.$this->devin.' ORDER BY tpsDevin DESC LIMIT 1 ';
$db->query($sql);
return true;
//Récupération de enregistrementID
$sql = 'SELECT enregistrementID FROM parties WHERE idDevin="'.$this->devin.'" ORDER BY tpsDevin DESC LIMIT 1 ';
$res1=$db->query($sql);
$this->res2= mysqli_fetch_assoc($res1);
// récupération de l'id de l'oracle et de la carte grâce à enregistrementID
$sql = 'SELECT idOracle,carteID,OracleLang
FROM enregistrement WHERE enregistrementID='.$this->res2['enregistrementID'].'';
$res1=$db->query($sql);
$res3= mysqli_fetch_assoc($res1);
updateScoreOracleDevinSucces($res3["idOracle"],$iso[$res3["OracleLang"]],$this->res2['enregistrementID']);
//~ //récupération du score précédent;
//~ $sql = 'SELECT scoreGlobal,scoreOracle FROM score WHERE userid="'.$res3["idOracle"].'" AND langue="'. $iso[$res3["OracleLang"]] .'"';
//~ $result=$db->query($sql);
//~ $res= mysqli_fetch_assoc($result);
//~ $this->previousSGOracle= $res['scoreGlobal'];
//~ $this->previousSOracle= $res['scoreOracle'];
//~ $this->previousSGOracle= $this->previousSGOracle+$this->points;
//~ $this->previousSOracle= $this->previousSOracle+$this->points;
//~
//~ //maj des variables de scores
//~ $sql = 'UPDATE score
//~ SET scoreGlobal='.$db->escape((string) $this->previousSGOracle) . ', ' .
//~ 'scoreOracle='.$db->escape((string) $this->previousSOracle) . '
//~ WHERE userid='.$res3["idOracle"].' AND langue= "'.$iso[$res3["OracleLang"]].'"';
//~ $db->query($sql);
$this->oracle=$res3["idOracle"];
// récupération du contenu de la carte avec carteID
$sql = 'SELECT carteID,niveau,mot,tabou1,tabou2,tabou3,tabou4,tabou5 FROM carte WHERE carteID="'.$res3['carteID'].'"';
$res=$db->query($sql);
$this->res= mysqli_fetch_assoc($res);
$_SESSION["motDeviner"] = true;//pour éviter de s'ajouter des points à l'infini avec des refresh
return true;
}
else{
header('Location: index.php?page.home.html');
return false;
}
}
private function display()
{
$_SESSION["notif"]["notification_done"]["Devin"] = 'points';
include('./views/diviner.result.html');
return true;
}
......
......@@ -6,10 +6,12 @@ class diviner_timeout
private $user = '';
private $diviner = '';
private $devinName='';
private $oracle = '';
private $previousSGO = 0;
private $previousSO = 0;
private $pointsO = 5;
private $res = '';
private $reussie ='non';
......@@ -36,57 +38,80 @@ class diviner_timeout
//récupération des informations de base : userid
$this->user = user::getInstance();
$this->diviner = $this->user->id;
$this->devinName = $this->user->username;
$this->userlvl = userlvl::getInstance();
$this->points= $this->userlvl->get_points();
return true;
}
private function carte_et_scoreOracle()
{
// récupération d'enregistrementID pour récupérer l'id de l'Oracle et l'id de la carte
//connexion à la BD
$db = db::getInstance();
//Récupération de enregistrementID
$sql = 'SELECT enregistrementID FROM parties WHERE idDevin="'.$this->diviner.'" ORDER BY tpsDevin DESC LIMIT 1 ';
$res1=$db->query($sql);
$res2= mysqli_fetch_assoc($res1);
// récupération de l'id de l'oracle et de la carte grâce à enregistrementID
$sql = 'SELECT idOracle,carteID
FROM enregistrement WHERE enregistrementID='.$res2['enregistrementID'].'';
$res1=$db->query($sql);
$res3= mysqli_fetch_assoc($res1);
// récupération du contenu de la carte avec carteID
$sql = 'SELECT carteID,niveau,mot,tabou1,tabou2,tabou3,tabou4,tabou5 FROM carte WHERE carteID="'.$res3['carteID'].'"';
$res4=$db->query($sql);