JeuWeb - Crée ton jeu par navigateur
questions asser durs ^^ - 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 : questions asser durs ^^ (/showthread.php?tid=1468)

Pages : 1 2 3


RE: questions asser durs ^^ - leni - 21-07-2007

alors voila, j'ai commencer un petit test voici le premier :

Code PHP :
<?php 
$numquetebrut
=$timestamp % 60;

$numqueteaffine= $numquetebrut/10;

$numquetedef=ceil($numqueteaffine);

echo
"numquetebrut , $timestamp , $numqueteaffine , $numquetedef";

// mais non ! puisque je vous dis que je n'ai aps fait de copier coller !! xD
et le resultat était dans tout les cas "0"...

j'ai donc fais un 2° prototype :
Code PHP :
<? 
$timestamp
=time();

$numquetebrut=$timestamp % 60;

$numqueteaffine= $numquetebrut/10;

$numquetedef=ceil($numqueteaffine);

echo
"time = $timestamp , numqueeaffine = $numqueteaffine, numquetebrut = $numquetebrut , numquetedef = $numquetedef ";

?>
qui me donne sa : time = 1185024667 , numqueeaffine = 0.7, numquetebrut = 7 , numquetedef = 1 c'est à dire exactement se qu'on cherche ^^ (maintenant, vous savez se que j'ia fais pendant 3 minute de ma vie mdr)

et c'est maintenant que j'ai a nouveau besoin de vous :
voici mon code :
Code PHP :
<?php 
if ($numquetedef == 0)
{
fair sa
}
elseif (
$numquetedef == 1)
{
fair sa
}
elseif (
$numquetedef == 2)
{
fair sa
}
elseif (
$numquetedef == 3)
{
fair sa
}
elseif (
$numquetedef == 4)
{
fair sa
}
elseif (
$numquetedef == 5)
{
fair sa
}
else
{
fair sa
}

dois le garder, ou fair avec sa :
Code PHP :
<?php 
switch ($numquetedef)
{

case
0: // dans le cas où $numquetedef vaut 0
mysql_connect()
mysql_select_db()
$req = mysql_query("SELECET quete FROM quete WHERE lvl='".$lvl."' AND personage="roger"" AND et la je met quoi ?);
$rep = mysql_fetch_array($req);
echo
"$rep";
break;

case
1:
mysql_connect()
mysql_select_db()
$req = mysql_query("SELECET quete FROM quete WHERE lvl='".$lvl."' AND personage="roger"" AND et la je met quoi ?);
$rep = mysql_fetch_array($req);
echo
"$rep";
break;

case
2: mysql_connect()
mysql_select_db()
$req = mysql_query("SELECET quete FROM quete WHERE lvl='".$lvl."' AND personage="roger"" AND et la je met quoi ?);
$rep = mysql_fetch_array($req);
echo
"$rep";
break;

case
3:
mysql_connect()
mysql_select_db()
$req = mysql_query("SELECET quete FROM quete WHERE lvl='".$lvl."' AND personage="roger"" AND et la je met quoi ?);
$rep = mysql_fetch_array($req);
echo
"$rep";
break;

case
4: //c'est bon je crois que c'est pas la peine d'aller plus loin ^^
break;

case
5:
break;

Que dois-je mettre dans la requete sql maintenant qu'on a nos nombre entre 0 et 6 ? et puis d'abors, comment on peu etre sur que sa sera entre 0 et 6 ? :toilette:[/php]


RE: questions asser durs ^^ - Byleth - 21-07-2007

Mort de rire, ton copier coller marche pas si effectivement tu prends pas le timestamp avant ^^.

Hé non, $timestamp sort de mon imagination Smile

Alors, pour ton problème : 2 possibilités.
Il s'agit de mélanger tes 2 propositions :

soit tu utilises switch et tu sors tes quêtes depuis un fichier que tu inclus (par exemple) auquel cas tu
utilises bien le switch du 2ème avec le "faire ça" du premier.

soit tu utilise la BdD comme dans le 2ème, mais dans ce cas là, inutile de compliquer comme ça : tu fais
une seule requête style

Code PHP :
<?php 
('SELECT (ce que tu veux) FROM table_quete WERE numquete='.$numquetedef.' AND
id_pnj='
.$id_pnj )
$numquetedef c'est pas dur, c'est ta valeur que tu viens de trouver, $id_pnj, c'est le numéro du PNJ qui te confie la quête, ça peut aussi être un nom mais c'est moins propre je trouve. Cette variable est à initialiser un peu plus haut dans ton script selon ton système de quête...
avec une clef pour le numéro de la quête et une clef pour le nom du PNJ.

Du coup, tu écris une seule requête qui changeras en fonction de ton timestamp

Pour tes valeurs, elle seront bien comprises entre 0 (qui sera rare parcontre) et une autre valeur
définie par ton modulo justement à cause du modulo:

je t'explique le calcul : le $timestamp%60 te donnera les minutes par rapport à ton heure, donc ta valeur
ocillera entre 0 et 59.

On la divise par 10 et on arrondit au supérieur, fais le calcul, ça tournera bien entre 0 et 6.

Essaye par toi même : calcul le reste de la division par 4 entre 0 et 20, ça donne :
0%4=0, 1%4=1, 2%4=2, 3%4=3, 4%4=0 ,5%4=1 ,6%4=2 ,7%4=3 ,8%4=0....
tu retombes toujours sur la même suite.


RE: questions asser durs ^^ - leni - 21-07-2007

et bien merci beaucoup, Tu vien de bien m'eclairer sur le system des quetes Smile merci beaucoup Smile .

Par compte, je n'ai pas bien compris ta technique avec le switch ... pourrai tu un peu develloper stp Big Grin


Sinon, personne n'as didée pour le du moment T ou les quetes sont remises à 0 ?


RE: questions asser durs ^^ - Byleth - 21-07-2007

Pour ton moment T, si ce n'est pas à 30mn prêt, teste à la connexion de tous les joueurs, de cette manière, il y aura une mise à jour assez régulière.

Le seul ennui, c'est que le matin, celui qui se connecte et se tape toutes les mises à jour de la nuit va attendre un bon moment mais bon....

Pour le switch, il ne s'agit que de modifier ta structure avec les if et else par la structure switch, rien de bien méchant...


Edit : je viens de me dire que si tu veux que tes quêtes soient différentes selon les joueurs, tu peux faire intervenir l'ID du
joueur dans le calcul, de cette manière, le joueur 3 et le joueur 104 n'auront jamais la même quête en même temps,
ce qui évite les bouchons.


RE: questions asser durs ^^ - leni - 21-07-2007

Byleth a écrit :je viens de me dire que si tu veux que tes quêtes soient différentes selon les joueurs, tu peux faire intervenir l'ID du joueur dans le calcul
Très très bonne idée, mais perso, je ne vois pas comment l'appliquée ... surtout que les id des joueurs ont 5 à 9 chiffres ...

Pour les ressources, je me suis mit d'accord, elles seront mises a jour au moment de la connection du joueur. De quoi ai-je besoin pour se fait ?

Code PHP :
<?php 
mysql_connect
()
mysql_select_db()
$req = mysql_query("SELECET time FROM user WHERE pseudo='$pseudo'); //on recupère la valeur de la dernière connection
$rep = mysql_fetch_array($req);


$time=time();
$time2= $time - $rep;

if (
$time2 <= 24*3600)
$req=mysql_query("update or FROM user WHERE peudo='$pseudo');
echo
'vous avez recus des ressources';
$time= $time2-(24*3600);
req2=mysql_query(UPDATE time='$time3' FROM user WHERE pseudo='$speudo');

c'est àpeu pmrès sa non ?


RE: questions asser durs ^^ - Byleth - 21-07-2007

Pour l'ID dans le calcul, c'est pas dur, tu l'additionne au timestamp actuel. Vu que l'ID est fixe, c'est juste comme si pour chaque joueur tu décalais l'horaire où s'afficheras la quête. C'est très simple et très efficace.

Pour ta mise à jour, c'est quelque chose du genre mais une fois les fautes corrigées ^^.

En fait, sur une page (soit particulière, soit que tu inclus dans toutes les autres pages) tu testes ton fameux temps T (appelé aussi DLA) pour savoir si une journée s'est écoulée, de la manière que tu le proposes.

Tu mets tout à jour à l'aide de pleins de calculs dont le futur temps T.

Prends bien en compte le cas ou le joueur laisse passer plusieurs journée avant de se connecter.

Je me demande si ton "or" dans la requête SQL ne risque pas de la perturber, il faudrait vérifier...


RE: questions asser durs ^^ - leni - 22-07-2007

dac merci Smile

Pour le temp T, quand tu me dis de prendre en compte si le joueur ne c'est pas connecter depuis un moment, tu est en trin de me dire de fair une boucle enf ait c'est sa ? Big Grin


RE: questions asser durs ^^ - Byleth - 22-07-2007

Oui, tu calcules le nombre de jours depuis lequel le joueur ne s'est pas connecté puis tu fais une boucle SI BESOIN.

Dans mon jeu par exemple, le nombre de jours influe autrement que par un simple $or=$nb_jours*$nb_or_jour

Mes calculs suivent une suite toute simple mais qui nécessite une itération pour la réaliser...


Recapitulatif - leni - 22-07-2007




RE: questions asser durs ^^ - Byleth - 22-07-2007

Leni, je pense que tu es encore un peu jeune, tant niveau âge (moi j'en ai 18 donc c'est valable pour moi aussi lol) que niveau connaissance en algorithmique...

Je dis pas ça méchament, on passe tous par là et je suis loin d'être un crack (oula, je début moi aussi) mais ça se voit dans tes réflexions :

- à chaque nouvelle réponse que je t'apporte s'en suit un nouveau lot de questions.
- tu n'as pas compris que je t'apporte des propositions à améliorer toi même, et non des réponses toutes faites.
- je te fais grâce du modulo, on ne voit ça qu'en term spé math Wink

Donc c'est la dernière fois que je répond à une question à laquelle tu n'as pas réfléchie véritablement avant :
- Tout d'abord, ton script est bizare, les cookies ne me semblent pas adaptés voir même inutile dans le cas présent.

> j'ai remarqué une erreur dans mon script, je t'explique le raisonnement que j'avais avant tout de même et je corrige après

- je t'ai expliqué dans les détails mon script, tu aurais du comprendre que le chiffre de 6 n'est en rien obligatoire. C'est le modulo 60 puis la division par 10 qui te donne ce résultat, mais si tu veux l'augmenter, c'est facile : pour te donner une idée, le modulo 60 te permet d'avoir entre 2 quêtes qui changent toutes les 30 minutes et 60 quêtes toutes les minutes. Le fait de diviser par 10 te permet d'en avoir 6 toutes les 10 minutes.

>> Donc si tu veux augmenter le nombre de tes quêtes, divise par un plus grand nombre que 10 et si tu veux éviter que du coup ça change toutes les 2 minutes, augmente la valeur de ton modulo : prend plutôt (là je corrige) 3600 ou un de ses multiples.

3600s c'est une heure, non pas 60s comme je t'avais dis jusque là. Tu obtiens donc 3600 résultats possibles. Pour avoir une nouvelle quête toute les minutes, il faudrait diviser ta valeur par 60 puis l'arrondir. Toutes les 10mn il faudrait diviser par 60*10=600 puis arrondir. Tu comprends?

En jouant sur les valeurs, tu obtiendras non seulement un nombre de quêtes possibles différent, mais aussi un temps de rotation différent.

Bref, tout est dans cette équation :
nb_quete = rotation_entiere / temps_entre_quete , les temps étant exprimés en secondes.

Donc pour trouver le modulo qui te sié, prend le temps entre chaque quête et le nombre de quête qui te plait, tu les multiplies et voilà le résultat. Magique, non?

Exemple: je veux 30 quêtes qui changeront toutes les 15 minutes (soit 900 secondes), je fais donc 30 * 900 ou 30 * 60 * 15= 27000.


Enfin, tu n'es pas obligé de proposer qu'une quête en même temps : dans ta BdD, plusieurs quêtes peuvent avoir une même ID_timestamp (une ID perso chacune plus une ID relative à ton système de proposition de quête) de sorte à ce que 2 ou 3 sortent en même temps et laisse un choix au joueur...