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


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

Bonsoir tout le monde !

j'aurai quelques questions sur la facons de coder les choses suivantes :

Comment fair pour que php nous sorte un texte aléatoirement ?

j'aimerai que le visiteur puisse choisir des quetes. ses quetes seront dans une table dans la BBD mais comment fair pour qu'elle sortent "aleatoirement" ? Aleatoirement entre guillemets, car elles varieront de niveau, et il faudrai que j'arrive a fair un temps minimum entre chaque generation de page, pour empecher le visiteur de fair actualiser jusuq'a se qu'il trouve la quete qu'il desir.
j'avais penser le fair avec mt_rand(), mais il m'as sembler que cette fonction ne marche qu'avec des nombres non ?
sinon, j'avais aussi pensser à des array, mais 500 quetes en 1 array, sa semble iréalisable... :euh:

Voici se qu'est ressorti de nos[/php][/quote] recherches :
Code PHP :
<?php 
CREATE TABLE
`quete` (
`
id` varchar(11) NOT NULL AUTO_INCREMENT
`personage` varchar(11) NOT NULL ,
`
quete` varchar(30) NOT NULL DEFAULT '',
`
lvlquete` varchar(50) NOT NULL DEFAULT '',
Code PHP :
<?php
$idmax
= 250; //imagions qu'il n'y ai que 250 quetes
$idmin=1;
$id= mt-rand($idmin,$idmax)
$req = mysql_query("SELECET quete FROM quete WHERE lvl='".$lvl."' AND personage="roger"" AND id="$id" ORDER BY rand() LIMIT 0,1);


while (
$donnees == mysql_fetch_array($req))
{
echo
'les quetes que roger peu vous confier est : <br /> <br />
'
.$donnees['quete'].'<br />
maintenant, si elle ne te plait pas, actualise cete page (Grrr)
<form> <imput> </form> //tout sa opûr dire que je vais fair un formulaire

}

?>
Comment avoir un evenement qui arrive a un moment T même si le visiteur n'est pas en ligne ?

A une heur H, le nombre de quetes effectués par le visiteur sera remis à 0, j'ai fais un champ qui as pour type "time" dans le sql, mais comment le remplir, et surtout, comment fair en sorte qu'a se moment le reset ai lieu ? Là j'en ai vraiment aucune idée :-°


Tels sont mes questions Big Grin
Merci à tous seux qui m'aideront Smile


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

Alors deja,

...AND id="$id" ORDER BY rand() sert a rien

soit tu met ...AND id="$id" LIMIT 0,1 et ca te sort la quette de l'id $id= mt-rand($idmin,$idmax)

soit tu met
...AND personage="roger"" ORDER BY rand() LIMIT 0,1
et ca te sort une quette aleatoire

le while sert a rien non plus, vu que tu fait un LIMIT 0,1
donc cela ne te sort qu'une seule ligne

ensuite pour l'actualisation qd le joueur n'est pas connecté, faut regarder du cote de cron par ex. Cherche sur le forum, cela a deja ete traite plus d'une fois


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

le probleme du cron, c'est que sa agis sur tout le monde...

le moment T ne sera pas le même pour tout le monde, alors s'il n'y as que 100 inscrit, tout les jours refair 100 crons, tu vois un peu la galère :rip: ...


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

Pour ta première question, c'est plus délicat, mais éventuellement, j'utiliserai le timestamp et peut être quelque chose comme un modulo : de cette façon, tu pourras (à l'aide de conditions) décider par exemple que tu auras 10 quêtes, et que toutes les 6 minutes la quête proposée changera, ce qui fait une rotation sur une heure.

Tu fais donc

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

$numqueteaffine= $numquetebrut/10;

$numquetedef=ceil($numqueteaffine);

//tu obtiens donc un chiffre compris entre 0 et 5
// reste plus qu'à utiliser les switch pour afficher la quête que tu veux ou encore chercher dans ta BdD.

Tu peux biensur rajouter une dose d'aléatoire dans tout ça ou encore modifier de nombreux paramètres, mais ce système permet d'alterner les quêtes proposées sur un délai raisonnable.

Au fait, je suis pas certains pour les calculs, je suis un peu à l'ouest en ce moment...

Sinon, pour l'histoire du CRON, c'est pas obligatoire si tu ne souhaites pas être à la minute prêt...


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

et pourquoi ne pas faire l'actualisation à la connexion du joueur?
quel est l'interet de remettre les quettes a zero si il n'est pas connecté? cela influence t'il les autre joueurs?


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

La solution de carlou est en effet la plus simple.

Si le nombre de quêtes en cours pour un joueur influe les autres joueurs, tu peux écrire une fonction prenant en paramètre l'id d'un joueur, qui met à jour son nombre de quêtes en fonction de l'heure et de la date de dernière mise à jour, et qui sera appelée avant les interactions inter-joueurs nécessitant de connaitre le nombre de quêtes.

Par contre si ces interactions sont trop nombreuses et fréquentes ça devient lourd et ce n'est plus forcément la bonne solution.


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

bha le truc, c'est que le moment T s'appliquera aussi pour els ressources, donc pour le pillage, il est preferable que sa se passe même s'il n'est pas connecter ... sinon, j'avais aussi pensser a fair un system de developement : plus la personne pillée est developer, plus le gain est haut ... Mais quel est ton idée carlou ? car vu que rien n'est fait pour le moment, je peu encore changer pas mal de choses ...

Byleth, ton idée est geniale, mais je n'ia pas tout compris ...pourquoi s'embeter avec le timestamp si on veu just un nombre entre 0 et 5 ? mt_rand peu le faire non ?
Aussi, je n'ai jamais travailler avec ni le timestamp ni le switch ... donc si tu peu m'aider un petit peu, ou rien que me fair un petit shemat simple, je t'en serai extrement reconnaissant Smile

bonne journée a tous (excusez les fautes, je suis asser presser ...)

leni


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

Alors, leni. Le timestamp te garantit tout simplement que les quête ne seront pas lachése n'importe coment car ton chiffre de 0 à 5 n'est pas sensé varier en dehors du paramètre temps (comprendre que les quêtes proposées tourneront dans un ordre défini préalablement). Si tu veux limiter les quêtes accessibles tout en les faisant changer de temps à autre, tu devras forcément utiliser le facteur temps quelquepart (à moins de créer un très gros système en fonction des autres quêtes résolus).

En gros, pour des petites quêtes bateaux genre : "va m'acheter du pain pour mon déjeuner", tu peux décider qu'elle ne s'appliquera que toutes les heures.

L'autre possibilité c'est de stocker un $timestampquete dans ta BdD et décider que toutes les X secondes (comprendre quelques centaines minimum) une nouvelle quête te sera proposée aléatoirement avec mt_rand.

En fait, les possibilités sont gigantesques et ma solution n'est utile que dans un cas très précis de petites quêtes aléatoire qui tourneraient plus ou moins en rond.

D'ailleurs, plus j'y pense et plus je me dis que ça ne peut pas s'appliquer à des quêtes importantes à moins de trouver un moyen de ne pas afficher les quêtes déjà réalisées par le joueur (ce qui n'est pas si dur...).

Le switch n'est qu'une alternative à if dans ce cas ouù tu as des chiffres ronds, va voir sur le site du zéro, c'est juste une syntaxe...


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

excuse moi si j'abuse un peu, mais je ne comprend toujours aps certaines choses :

$numquetebrut=$timestamp % 60; // comme je l'ai dis, j'ai jamais travailler avec le timestamp, donc si tu peu m'expliquer a quoi sert le %60 Big Grin

Ceil sert a arrondir au nombre superieur non ?

merci d'avance, leni


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

Le signe % signifie modulo : tu obtiens donc le reste d'une division qui obtiendrait un nombre entier (ou "division euclidienne") :
je m'explique : 15%7 signifie : 15/7=2 + reste = 1, donc 15%7=1
et Ceil arrondi effectivement au nombre supérieur. (penser à consulter la doc php pour ce genre de question ^^ http://fr.php.net/manual/fr/)

Mysterarts