JeuWeb - Crée ton jeu par navigateur
[résolu]la donnée "aléatoire" - 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 : [résolu]la donnée "aléatoire" (/showthread.php?tid=1619)



[résolu]la donnée "aléatoire" - biboum - 21-08-2008

Bonjour Smile Pour ceux qui se rapelle de mes derniers POST ...^^ j'ai progresser :p

Mais j'aimerai savoir comment crée l'évènement aléatoire ?
Par exemple dans mon cas...j'aimerai que lors du passage de tour, des évènements climatique se déroule. Mais bon par forcement à chaque tour, ni forcement toujours sur les même pays Wink
Bref comment coder ce aléatoire, comment faire pour coder un "une chance sur X" ?

le php seul arrive t'il à faire cela ? Ou bien faut-il passer en un autre code, javascript par exemple ?
Je vous remercie Smile

(Pas trouver de correspondance dans la recherche...)


RE: la donnée "aléatoire" - Asther - 21-08-2008

Salut, je sait pas si j'ai tout saisi mais avec un rand me parait la solution la plus logique:

Code PHP :
<?php 
$pourcentage
= '100';
$result_pourcentage = rand('1',$pourcentage);//une chance sur 100 donc 1%
if($result_pourcentage == '10'){// si le pourcentage est egale a 10..
$events = 'orage'; //là c'est l'orage
}

$map = '//nombre de map presentes par id_map';//mieu vaut mettre une seconde id non auto_incrementer pour éviter les trous
$result_map = rand('0',$map)//tu cherche une map au hasard;

//puis requette



RE: la donnée "aléatoire" - biboum - 21-08-2008

Ha bah oui ca ca peut marcher j'ai l'impression, je ne savais pas que l'on pouvais utiliser les rand avec des variables "texte".

Bah merci beaucoup Smile
Je pense que cela me suffira si je l'adapte un peu. Et d'un point de vue plus complexe y a pas un moyen ? De choisir aléatoirement un évènement qui se déroulera aléatoirement sur des térritoires aléatoire...
Comment tu vas additionner les trois variables rand ?


RE: la donnée "aléatoire" - Asther - 21-08-2008

si, de la même façon en ayant un table evenement indéxé et en faisant un rand sur la table ^^..
mais je ne comprend pas ce que tu veut dire par "additionner les rands".


RE: la donnée "aléatoire" - Sephi-Chan - 21-08-2008

Bonjour,

PHP suffit à lancer des événements aléatoires. Il te suffit par exemple de récupérer un tableau (codé en dur, issu d'une BdD, d'un fichier, etc.) qui associe à chaque nom d'événements un intervalle. Puis, sur ta page, tu tire un nombre aléatoire avec la fonction mt_rand(). Il te suffit ensuite de stocker l'événement quelque part, pour ne pas le tirer à nouveau à chaque visite de la page.

Par exemple, si tu tires un mt_rand(1, 100), voilà à quoi pourrait ressembler ton tableau d'événements :
Tremblement de terre : 1, 3
Eruption volcanique : 4, 4
Pluie : 5, 20

Ici, un tremblement de terre a 3% de chance du survenir, alors qu'une éruption volcanique n'a qu'1% de chance de se produire. La pluie, plus courante, survient dans 15% des cas. Dans les autres cas, rien ne se passe.

Ensuite, pour effectuer un nouveau tirage à intervalle régulier (6h par exemple), tu peux utiliser une tâche Cron, ou bien de stocker (là aussi en base de données ou dans un fichier, par exemple) la date du dernier événement + la durée d'un intervalle. Il te suffit ensuite de vérifier une condition : si la date stockée est antérieur à maintenant, c'est que le délai est écoulé.

Exemple : on arrive sur la page à 16h30 le script indique qu'il n'y a pas d'événement en cours : il en tire donc un. Il tombe sur 16 : l'événement est donc la pluie. On stock donc le timestamp actuel + 6 heures (puisqu'on a dit qu'on faisait un tirage toutes les 6 heures). A chaque fois qu'on retournera sur la page, on comparera la date stockée au timestamp actuel. Si elle est supérieur, c'est que les 6 heures ne sont pas encore écoulées, auquel cas on ne fait rien. Sinon, les 6 heures sont écoulées, on produit un nouvel événement et on remplace la date pour y mettre de nouveau le timestamp + 6 heures (et éventuellement le décalage qu'il y a eu si on n'est pas venu sur la page depuis longtemps).

Voilà, c'est une méthode simple de faire ça. Il y en a plein d'autres !


Sephi-Chan


RE: la donnée "aléatoire" - biboum - 21-08-2008

Je testerais ca...en tout cas merci tu m'as enlever une serieuse épine de la main Smile
On va pouvoir passer à la partie débug maintenant lol ^^

Pour additionner les rand...je voulais le mettre dans une fonction...pour que tout se mette ensemble et permettre de les unir ensemble...mais je me plongerais sur les fonctions vu que je suis pas à l'aise encore avec...

edit : Ouaaaa sephi-chan...j'en attendais pas autant Smile Là j'ai même plus besoin de me creuser la tête pour comprendre comment faire avec ma base de donnée^^
Merci à vous deux, en reprenant tout ca, le script devrait être facile à faire Smile


RE: [résolu]la donnée "aléatoire" - Raoull - 21-08-2008

ya aussi shuffle($array) qui peut être pas mal dans certains cas, pour mélanger les valeurs d'un tableau, et donc avoir de l'aléatoire.