Problème d'enregistrement du bonus, flash, php, msql

Répondre
nicost
le 14/02/2008 à 17:50
nicost
Bonjour à tous
Dans mon jeu en flash le score du joeur est enregistrer dans la base msql.
Si le joeur fait un plus gros score, alors le score ancien sera éffacer, et le nouveau score sera enregistrer.
Si le score est plus petit, il ne sera pas enregistrer normal
J'ai ajouter dans le jeu flash un bonus.
Des lors que le joeur attrape un bonus, il sera enregistrer comme pour les scores.
Malheureusement, si le joeur a fait un plus petit score MAIS qu'il a plusieur bonus, le bonus en question ne sera pas enregistrer.
Si par contre le joeur fait un plus gros score, alors les bonus en plus seron enregistrer.
Merci de votre aide

Ma table sql comporte plusieur champ :
Id
Jeu
Utilisateur
Score
et le Bonus que j'ai ajouter.

J'ajoute donc mon Bonus dans la requette
Mais j'arrive pas a placer correctement le Bonus pour qu'il soit pris en compte quand le score est quand même plus petit.

Ma page php qui envoie les scores et les bonus :
<?php
if (!emptyempty($_POST['game_name']))
{
$game_name =$_POST['game_name'];
}
if (!emptyempty($_POST['score']))
{
$score = $_POST['score'];
}
if (!emptyempty($_POST['bonu']))
{
$bonu = $_POST['bonu'];
}

$traitement_jeux = reqmysql('SELECT tri FROM jouer_jeux WHERE nom_cach="'.$game_name.'"');

while ($boucle = mysql_fetch_array ($traitement_jeux))
{
$tri = $boucle ['tri'];
}

$nom = ''.($pseudo == '' ? 'visiteur' : ''.$pseudo.'').'';
reqmysql("INSERT INTO `jouer_scores` (`Id`,`Jeu`,`Utilisateur`,`Score`,`Bonus`) VALUES ('', '$game_name', '$nom', '$score', '$bonu');");

$select_scores = reqmysql('SELECT * FROM jouer_scores WHERE Jeu="'.$game_name.'" AND Utilisateur="'.$nom.'" ORDER BY score DESC');
$position = 0;
$exaeco = 0;
$ancienscore = 0;

while ($boucle_recherche = mysql_fetch_array ($select_scores))
{

$bonu_bonu = $boucle_recherche['Bonus'];
$score_score = $boucle_recherche['Score'];
$nom = $boucle_recherche['Utilisateur'];

if ($ancienscore<>$score_score && $exaeco>0)
{
$position=$position+$exaeco+1;
$exaeco=0;
}
elseif ($ancienscore==$score_score)
{
$exaeco++;
}
else
{
$position++;
}

$ex=''.($exaeco > 0 ? 'ex.' : '').'';

if ($tri == 0)
{
if ($position>1)
{
reqmysql('DELETE FROM jouer_scores WHERE Bonus="'.$bonu_bonu.'" Score="'.$score_score.'" AND Utilisateur="'.$nom.'"');

if ($bonu > $bonu_bonu)
{
$meilleur='oui';
}


if ($score > $score_score)
{
$meilleur='oui';
}
}
}

if ($tri == 1)
{
if ($position >1)
{
reqmysql('DELETE FROM jouer_scores WHERE Bonus="'.$bonu.'" Score="'.$ancienscore.'" AND Utilisateur="'.$nom.'"');

if ($score < $ancienscore)

{
$meilleur='oui';
}
}
}

if ($exaeco>0)
{
reqmysql('DELETE FROM jouer_scores WHERE Score="'.$score_score.'" AND Utilisateur="'.$nom.'"');
reqmysql('INSERT INTO `jouer_scores` (`Id`,`Jeu`,`Utilisateur`,`Score`,`Bonus`) VALUES ("", "'.$game_name.'", "'.$nom.'", "'.$score_score.'", "'.$bonu.'");');
}

$ancienscore=$score_score;
}

?>
LA GLOBULE
le 14/02/2008 à 23:21
LA GLOBULE
Applique toi à l'écrit, parce que la, on ne comprend pas ce que tu souhaites obtenir, donc ce n'est pas évident de t'aider.

En effet :

Si par contre le joeur fait un plus gros score, alors les bonus en plus seron enregistrer.
...
Mais j'arrive pas a placer correctement le Bonus pour qu'il soit pris en compte quand le score est quand même plus petit.


Dans quel cas le bonus est il prit en compte ?
Et est ce que le bonus s'ajoute au score final ?

PS : faire un UPDATE est plus simple que de faire un DELETE puis un INSERT.
nicost
le 15/02/2008 à 07:44
nicost
bonjour la globule
oui excuse !
Le bonus ne s'ajoute pas au score final.
Il est donc indépendant du score.
Dans mon jeu, pour avoir un score il faut attraper des bulles.
Une bulle est égale à 1 point.
Donc plus j'ai attraper de bulle est plus mon score est gros.
Pour le bonus, j'ai fait un cube.
Le cube est égale à 1 bonus.

Du coup, si j'attrape 45 bulle et 12 cube.
Le score final sera de 45.
Et le bonus sera de 12.

La table :
Dans mon champ Scores, cela enregistre 45 point.
Dans mon champ Bonus, cela enregistre 12.

De la pas de problème tout s'enregistre.
Par contre si je rejoue, et que je fait un score plus petit.
Exemple : j'attrape 42 bulle, le score est donc de 42.
Mais j'ai attraper plus de bonus.
Exemple : j'attrape 16 cube, le bonus sera de 16.

C'est la que ça ne veux pas enregistrer le bonus, car le score est pas plus haut.
Merci pour l'aide !!!!
Amicalement.
LA GLOBULE
le 15/02/2008 à 22:08
LA GLOBULE
Si j'ai bien compris, un truc de ce genre la quoi :

<?php
$score = 46;
$bonus = 12;

$jeu = 'jeu 1';
$joueur = 'toto';

$sql_old_score = "SELECT score FROM table WHERE jeu = '".mysql_escape_string($jeu)."' AND joueur = '".mysql_escape_string($joueur)."'";
$req_old_score = mysql_query($sql_old_score) or die (mysql_error());

if (mysql_num_rows($req_old_score) == 0) {
$sql_insert = "INSERT INTO table (jeu, joueur, score, bonus)
VALUES ('".mysql_escape_string($jeu)."', '".mysql_escape_string($joueur)."', '".intval($score)."', '".intval($bonus)."')";
$req_insert = mysql_query($sql_insert) or die (mysql_error());
}
else {
$old_data = mysql_fetch_assoc($req_old_score);

if ($old_data['score'] <= $score) {
$sql_update = "UPDATE table SET bonus = '".intval($bonus)."', score = '".intval($score)."' WHERE jeu = '".mysql_escape_string($jeu)."' AND joueur = '".mysql_escape_string($joueur)."'";
$req_update = mysql_query($sql_update) or die (mysql_error());
}
}
?>

La, ca modifie le score ET le bonus que si et seulement si le nouveau score est supérieur ou égal à l'ancien score.

Par contre, je ne sais pas si c'est ce que tu veux, car ton explication est encore un peu floue :

C'est la que ça ne veux pas enregistrer le bonus, car le score est pas plus haut.

Ne pas enregistrer le bonus, ca j'ai compris, mais dans ce cas précis, est ce que le score est modifié ? ou non ? (dans mon exemple, je ne le modifie pas)
nicost
le 15/02/2008 à 22:17
nicost
Merci de ton aide LA GLOBULE

Ben en faite si, il faut que si le bonus est plus fort que celui d'avant, il faut donc qu'il soit changer.

Mais en faite ça fait comme pour les scores, on peu dire que le bonus est un double score, mais je veux qu'il soit séparer de celui du score.

Donc du coup c'est bien se que tu pense.

Un score fort de par exemple 158, + un bonus de 100.
Le total sera :
Ton score : 158
Ton score bonus : 100

Et si je rejoue et que mon score est plus fort que 158, exemple 250, alors on change le 158 par 250.
Et du coup idem pour le bonus.

Mais si je rejoue LoL, et que cette fois je fait un score de 80, il sera donc plus petit que celui que j'avais fait de 250.
Donc la on garde bien les 250, et on ajoute surtout pas les 80.
Mais si j'ai pris plus de bonus, alors je change quand même les bonus.
Exemple score de 80 + un bonus de 150 cette fois.
La je change pas le score, mais je change le bonus.
Mille merci en tout cas de ton aide, car c'est pas simple cette histoire !
LA GLOBULE
le 15/02/2008 à 23:07
LA GLOBULE
Un truc vite fait (non testé) qui devrait passer :

<?php
$score = 46;
$bonus = 12;

$jeu = 'jeu 1';
$joueur = 'toto';

$sql_old_score = "SELECT score, bonus FROM table WHERE jeu = '".mysql_escape_string($jeu)."' AND joueur = '".mysql_escape_string($joueur)."'";
$req_old_score = mysql_query($sql_old_score) or die (mysql_error());

if (mysql_num_rows($req_old_score) == 0) {
$sql_insert = "INSERT INTO table (jeu, joueur, score, bonus)
VALUES ('".mysql_escape_string($jeu)."', '".mysql_escape_string($joueur)."', '".intval($score)."', '".intval($bonus)."')";
$req_insert = mysql_query($sql_insert) or die (mysql_error());
}
else {
$old_data = mysql_fetch_assoc($req_old_score);

if ($old_data['score'] <= $score) $test_score = true; else $test_score = false;
if ($old_data['bonus'] <= $bonus) $test_bonus = true; else $test_bonus = false;

if ($test_bonus || $test_bonus) {
$sql_update = "UPDATE table SET ";
if ($test_score && $test_bonus) $sql_update .= "bonus = '".intval($bonus)."', score = '".intval($score)."' ";
elseif ($test_score && !$test_bonus) $sql_update .= "score = '".intval($score)."' ";
elseif (!$test_score && $test_bonus) $sql_update .= "bonus = '".intval($bonus)."' ";
$sql_update .= "WHERE jeu = '".mysql_escape_string($jeu)."' AND joueur = '".mysql_escape_string($joueur)."'";

$req_update = mysql_query($sql_update) or die (mysql_error());
}
}
?>
nicost
le 16/02/2008 à 00:38
nicost
Merci beaucoup LA GLOBULE
Après adaptation de ton code.
Il enregistre comme avec mon code : le score, le bonus.
Si je rejoue il enregiste plus le nouveau score, ni le bonu, j'ai du faire une erreur !!!!
Je refait des tests...
<?php
$nom = ''.($pseudo == '' ? 'visiteur' : ''.$pseudo.'').'';
$sql_old_score = 'SELECT Score, Bonus FROM jouer_scores WHERE Jeu ="'.mysql_escape_string($game_name).'" AND Utilisateur ="'.mysql_escape_string($nom).'"';
$req_old_score = mysql_query($sql_old_score) or die (mysql_error());

if (mysql_num_rows($req_old_score) == 0) {
$sql_insert = 'INSERT INTO jouer_scores (Jeu, Utilisateur, Score, Bonus)
VALUES ("'.mysql_escape_string($game_name).'", "'.mysql_escape_string($nom).'", "'.intval($score).'", "'.intval($bonu).'")';
$req_insert = mysql_query($sql_insert) or die (mysql_error());
}
else {
$old_data = mysql_fetch_assoc($req_old_score);

if ($old_data['Score'] <= $score) $test_score = true; else $test_score = false;
if ($old_data['Bonus'] <= $bonu) $test_bonu = true; else $test_bonu = false;

if ($test_bonu || $test_bonu) {
$sql_update = 'UPDATE jouer_scores SET ';
if ($test_score && $test_bonu) $sql_update .= 'Bonus = "'.intval($bonu).'", Score = "'.intval($score).'" ';
elseif ($test_score && !$test_bonu) $sql_update .= 'Score = "'.intval($score).'" ';
elseif (!$test_score && $test_bonu) $sql_update .= 'Bonus = "'.intval($bonu).'" ';
$sql_update .= 'WHERE jeu = "'.mysql_escape_string($jeu).'" AND Utilisateur = "'.mysql_escape_string($nom).'"';

$req_update = mysql_query($sql_update) or die (mysql_error());
}
}
?>
nicost
le 16/02/2008 à 00:48
nicost
Aaaa térrible, j'ai refait deux petit modif et tout fonctionne.
Pfff ça ete une longue histoire se score et bonu.

Franchement LA GLOBULE Je tien à te remerci du fon du coeur sincerement, sans dec la sans toi j'arrai pas réussi.
Je suis super content car en plus j'ai apris quelque plus dans les requettes.

Encore mille merci, dommage qui y a plus de gars comme toi sur le net.
Merci encore !!! smiley
nicost
le 16/02/2008 à 11:44
nicost
Re... Par contre je suis a me demander si je rajoute un nouveau bonus different du premier, faut il que je reface un test_bonu en plus ?
Merci et bon week !!!
Répondre
LoadingChargement en cours