JeuWeb - Crée ton jeu par navigateur
Problème avec le script des ressources - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème avec le script des ressources (/showthread.php?tid=4057)

Pages : 1 2 3


Problème avec le script des ressources - Hunty - 26-10-2010

Bonjour à tous.
Après avoir fais des recherches sur Google et dans les FAQ de différents forums, je n'ai pas réussi à trouver réponse à ma question qui, j'en suis sûr, est très bête, j'ai même presque honte de la poser :$

Mais je me lance Smile

Alors voilà, étant nouveau dans le monde des développeurs de jeux par navigateur, j'ai lu tout le tuto du site du zéro sur le PHP/MySQL et j'ai décider de me lancer dans un mini projet, pour ensuite le développer de plus en plus.

Quel projet?
Oh, rien de bien folichon pour le moment : le joueur aurait une cabane de bûcheron et une carrière et gagnerai des ressources sur la durée pour pouvoir construire une scierie.
Comme je le disais, rien de bien prétentieux :$

Donc, quel est mon problème?
Et bien, pour pouvoir augmenter les ressources sur la durée et afficher cette augmentation en temps réel, je me suis tourné vers le script proposé sur le wiki : voir le script.

Mais comme on peut le voir, la quantité de base est définie directement dans le script (100).
Ce que je voudrais, c'est pouvoir aller chercher dans ma base de données la quantité déjà possédée par le joueur et augmenter cette quantité de 1 par seconde, que ce soit dans la base de données et dans l'affichage sur la page.

Donc, voici ce que j'ai tenté :

Code :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?php
// Récupération des données
$connection = @mysql_connect("monserveur", "mabase", "monmdp");
$connection;
@mysql_select_db("mabase");

// Initialisation des variables
$iRessourcesDepart = mysql_query("SELECT * FROM Ressource WHERE nom = 'bois'") ; // La base de données nous donne le nombre de bois que le joueur possède.
$iProductionParSeconde = 1; // Sa cabane de bûcheron produit 1 bout de bois par seconde.
$iTempsDerniereModif = time() - (2 * 60); // On va dire que la dernière mise à jour a été effectué il y a 2 min.

//on calcule le nombre de secondes écoulées depuis la dernière mise à jour
$iTempsActuel = time();
$iTempsEcoule = $iTempsActuel - $iTempsDerniereModif ; //  Dans notre exemple, ce sera 2 min soit 2*60 = .... 120 s.

// On calcule le nombre de ressources produites durant le temps écoulé
$iRessourceProduite = $iProductionParSeconde * $iTempsEcoule;

$iRessourceTotale = $iRessourcesDepart + $iRessourceProduite;

// Mise a jour dans la bdd
mysql_query("UPDATE Ressource SET quantité = $iRessourceTotale WHERE nom = 'Bois'");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
    <script type="text/javascript">
        var iRessourcesDepart = <?php echo $iRessourceTotale; ?>;
        var iProductionParSeconde = <?php echo $iProductionParSeconde; ?>;
        var iSecondes = 0;
        function augmentation_ressource(){

            document.getElementById("ressource").innerHTML = iRessourcesDepart+(iProductionParSeconde*iSecondes);
            iSecondes++;
            setTimeout("augmentation_ressource()",1000);

        }
    </script>
</head>
<body onload="augmentation_ressource()">
<p>Votre Cabane de bûcheron a produit <span id="ressource"><?php echo $iRessourceTotale; ?></span> morceaux de bois.</p>
</body>
</html>

Et j'obtiens bien ce qu'il faut, sauf que la quantité commence à 122 alors qu'elle devrait commencer à 10...

Je ne comprends pas pourquoi mon code ne marche pas :heuu:
Je demande donc votre aide pour éclairer ma lanterne Smile

Merci d'avance et désolé encore pour cette question stupide :heuu:


RE: Problème avec le script des ressources - Plume - 26-10-2010

Dans
$iRessourceTotale = $iRessourcesDepart + $iRessourceProduite;

C'est pas $iRessourcesDepart mais plutôt quelque chose comme $iRessourcesDepart['quantite'] que tu dois utiliser. N'oublie pas d'utiliser mysql_result() pour que la ressource retournée par mysql_query() soit exploitable Smile

Genre :
$result= mysql_query("SELECT * FROM Ressource WHERE nom = 'bois'");
$iRessourcesDepart = mysql_result($result, 0);



RE: Problème avec le script des ressources - Hunty - 26-10-2010

(26-10-2010, 03:25 PM)_who a écrit : Genre :
$result= mysql_query("SELECT * FROM Ressource WHERE nom = 'bois'");
$iRessourcesDepart = mysql_result($result, 0);

Effectivement :$ merci

Mais je me retrouve toujours avec 122 de base, je ne vois pas du tout d'où vient cette valeur et pourquoi la quantité indiquée dans ma base de données n'est pas exploitée :triste3:


RE: Problème avec le script des ressources - Plume - 26-10-2010

J'peux voir ton script avec les modifications ?


RE: Problème avec le script des ressources - Hunty - 26-10-2010

Bien sûr, le voici :
Citation :<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?php
// Récupération des données
$connection = @mysql_connect("monserveur", "mabase", "monmdp");
$connection;
@mysql_select_db("mabase");

// Initialisation des variables
$result= mysql_query("SELECT quantite FROM Ressource WHERE nom = 'bois'");
$iRessourcesDepart = mysql_result($result, 0);
$iProductionParSeconde = 1; // Sa menuiserie produit 1 bout de bois par seconde
$iTempsDerniereModif = time() - (2 * 60); // On va dire que la dernière mise à jour a été effectué il y a 2 min.

//on calcule le nombre de secondes écoulées depuis la dernière mise à jour
$iTempsActuel = time();
$iTempsEcoule = $iTempsActuel - $iTempsDerniereModif ; // Dans notre exemple, ce sera 2 min soit 2*60 = .... 120 s (^^)

// On calcule le nombre de ressources produites durant le temps écoulé
$iRessourceProduite = $iProductionParSeconde * $iTempsEcoule;

$iRessourceTotale = $iRessourcesDepart['quantite'] + $iRessourceProduite;

// Mise a jour dans la bdd
mysql_query("UPDATE Ressource SET quantité = $iRessourceTotale WHERE nom = 'Bois'");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script type="text/javascript">
var iRessourcesDepart = <?php echo $iRessourceTotale; ?>;
var iProductionParSeconde = <?php echo $iProductionParSeconde; ?>;
var iSecondes = 0;
function augmentation_ressource(){

document.getElementById("ressource").innerHTML = iRessourcesDepart['quantite']+(iProductionParSeconde*iSecondes);
iSecondes++;
setTimeout("augmentation_ressource()",1000);

}
</script>
</head>
<body onload="augmentation_ressource()">
<p>Votre Cabane de bûcheron a produit <span id="ressource"><?php echo $iRessourceTotale; ?></span> morceaux de bois.</p>
</body>
</html>

PS : je n'ai pas trouvé comment on fait pour mettre le code en PHP sur le fofo :$
PS2 : En fait, la quantité de base n'est plus 122 mais... NaN


RE: Problème avec le script des ressources - custmax - 26-10-2010

Je connais pas le mysql_result donc je ne pourrais pas résoudre ton problème.

Tu pourrais afficher l'erreur exacte qui s'affiche ? En tout cas NaN, si tu ne savais pas, signifie Not a Number.

Sinon ceci: $iRessourceTotale['quantite']; est faux car $iRessourceTotale contient si tout se passe bien un nombre. Ce n'est pas un array, un tableau.
Tu aurais juste à afficher le contenu de $iRessourceTotale.


Désolé de ne pas faire avancer le problème plus que ça :/

EditTongueour le code php il suffit d'écrire (sans les étoiles ^^):
Code :
[*code=PHP][/code*]



RE: Problème avec le script des ressources - Plume - 26-10-2010

Effectivement, j'me suis un peu cramé. J'suis revenu sur ma façon de faire car j'avais oublié mysql_result() alors que j'avais commencé à partir d'un mysql_fetch_*. 'fin bref ! On s'en fout !

Du coup, remplace :
$iRessourceTotale = $iRessourcesDepart['quantite'] + $iRessourceProduite;
Par :
$iRessourceTotale = $iRessourcesDepart + $iRessourceProduite;

Si jamais ça marche toujours pas, tu rajoutes dans ton code (juste après la ligne que je viens de te demander de modifier) :
echo '<pre>'; print_r($result); echo '</pre>'; echo '<pre>'; print_r($iRessourceTotale); echo '</pre>';

C'est de l'affichage de données pour debugger. J'anticipe Big Grin

@tchaOo°


RE: Problème avec le script des ressources - Hunty - 27-10-2010

Merci à vous deux Smile

J'ai changé le code comme tu me l'as demandé _who, mais ça me renvoie toujours NaN.
J'ai donc rajouté la ligne de code supplémentaire et voici ce que ça affiche :

Citation :Resource id #2

120

Votre Cabane de bûcheron a produit NaN morceaux de bois.



RE: Problème avec le script des ressources - Plume - 27-10-2010

Ca nous dit donc qu'à priori tu récupères la valeur 120 depuis la base de données.

Sinon, ton javascript n'est pas bon. Tu dois remplacer :
document.getElementById("ressource").innerHTML = iRessourcesDepart['quantite']+(iProductionParSeconde*iSecondes);

Par :
document.getElementById("ressource").innerHTML = iRessourcesDepart +(iProductionParSeconde*iSecondes);



RE: Problème avec le script des ressources - Hunty - 27-10-2010

Effectivement, merci Smile

Par contre, je suis formel : dans ma base de données, la quantité est à 0 ...
Et si je la mets à 10, je passe à 130 dans l'affichage.