JeuWeb - Crée ton jeu par navigateur
Créer des villages éloignés les uns des autres sur une carte - 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 : Créer des villages éloignés les uns des autres sur une carte (/showthread.php?tid=3471)



Créer des villages éloignés les uns des autres sur une carte - oualala - 23-12-2008

J'ai une map elle fait 0 x au minimum et infini maximum, pareil pour y. Sur cette map je créé un village à 9 cases lors de l'inscription. Chaque village doit être séparé d'au minimum 2 cases. C'est-à-dire que 2 villages prennent 8 cases de large si il sont en large(3*2+2). Ils sont séparés de 6 cases en partant de leur milieu.

Moi j'ai pensé à faire une variable minx et maxx, pareil pour y. Je prends un nombre au hasard pour les deux, mais bon, j'ai vite abandonné car bon, c'est pas super, super...

Auriez-vous une solution pour m'aider? Merci d'avance Wink
PS: pour les champs dans la BDD, vous pouvez inventé si vous en avez besoin Wink


RE: Créer des villages éloignés les uns des autres sur une carte - horexas - 23-12-2008

J'y ai déja réfléchis pour un village qui occupe une cases sur une map allant de moins l'infini a plus l'infini en x et y mais je vais le faire de 0 a plus l'infini en x et y.
Pour avoir un positionnement bien répartit j'avais procédé comme ceciSadrand est un créateur de variable aléatoire entre deux chiffres)
Code PHP :
<?php 
$sql
=mysql_query("select posx, posy From village limit 0,5 order by id desc") //je recherche les derniers villages inscrits
while($data=mysql_fletch_assoc($sql))
{
$moyennexdesvillages .= $data['x'] / 5; //je fais la moyenne de la position des villages en additionnant les x de tout les villages divisé par le nombre de village
$moyenneydesvillages .= $data['y'] / 5; //idem pour les y
}
$posxdemonvillage = $moyennexdesvillages + rand(-5,5); //je détermine la position de mon village en x avec la moyenne des autres villages + une variable aléatoire
$posydemonvillage = $moyenneydesvillages + rand(-5,5); // idem en y
$sql = mysql_query( "Select posx, posy FROM village Where pox=$posxdemonvillage and posy=$posydemonvillage" );
$req = mysql_fletch_array($sql);
if(
$req['x'] == NULL OR $req['y'] == NULL) //si la place n'est pas déja occupée
{
mysql_query( "Insert into village Values( '', '$posxdemonvillage', '$posydemonvillage', '$monnom'"); //j'udapte la table (avec id auto increment)
}
else
// si la place est occupée
{
$posydemonvillage = $moyenneydesvillages + rand(-5,5); //on repositionne
$posydemonvillage = $moyenneydesvillages + rand(-5,5);
<
META HTTP-EQUIV="Refresh" CONTENT="1; URL=la meme page">'; //et on recommence si vous pouviez trouvez un autre méthode car je ne sais pas comment faire sans réecrire le script a l'infini.
}
Pourque tes villages soient éloigné il de recherche la position des joueurs dont les x sont compris entre ta position - 1 et + 1 et idem pour les y. Ensuite si ta requete est vide tu continue sinon tu chage ta position.
Voila j'espere que j'ai pu t'aider... Contacter moi pour toute question a propos de mon script et toute suggestion pour améliorer ce script est la bienvenue ^^ Ce n'est qu'un de mes premiers scipt alors soyez indulgent merci.


RE: Créer des villages éloignés les uns des autres sur une carte - Argorate - 23-12-2008

Bonjour, j'interviens apres survol du code:

Code PHP :
<?php 
$sql
=mysql_query("select posx, posy From village limit 0,5 order by id desc") //je recherche les derniers villages inscrits
while($data=mysql_fletch_assoc($sql))
{
$moyennexdesvillages .= $sql['x'] / 5; //je fais la moyenne de la position des villages en additionnant les x de tout les villages divisé par le nombre de village
$moyenneydesvillages .= $sql['y'] / 5; //idem pour les y
}
Ce n'est pas $sql, mais $data la variable tableau contenant les informations voulut.

Code PHP :
<?php 
$sql_2
= mysql_query( "Select posx, posy FROM village Where pox=$posxdemonvillage and posy=$posydemonvillage" );
Pas besoin de nommer la variable différemment ici, tu peux continuer de l'appelé $sql, cela écrasera l'ancienne, mais peut importe puisque tu as récupérer se dont tu avais besoin. Ainsi cela ne créé pas une nouvelle variable en RAM pour rien...

Code PHP :
<?php 
if($req['x'] == NULL OR $req['y'] == NULL)
Il est préférable d'utiliser la fonction empty() pour vérifier qu'une variable est null (ou ne l'est pas)...

Code PHP :
<?php 
$posydemonvillage
= $moyenneydesvillages + rand(-5,5);
$posydemonvillage = $moyenneydesvillages + rand(-5,5);
Pour plus de clareté et de rapidité a écrire le code, je te conseil d'utiliser:

$posydemonvillage += rand(-5,5);

De plus pour des raison d'optimisation, la fonction mt_rand() est plus rapide que rand(), je te conseil donc:

$posydemonvillage += mt_rand(-5,5);

viloù bonne chance Wink

EDIT: je vien de voir que je me suis trompé pour cette ligne là :
Code PHP :
<?php 
$posydemonvillage
= $moyenneydesvillages + rand(-5,5);
$posydemonvillage = $moyenneydesvillages + rand(-5,5);
j'ai trop vite lu, se ne sont pas les meme variables. donc se que j'ai dit ne s'applique pas, mais tu devrais faire des noms de variable plus claire, enfin c'est juste un conseil... si toi tu t'y retrouves c'est le principal.


RE: Créer des villages éloignés les uns des autres sur une carte - horexas - 23-12-2008

a quoi sert le += pour le rand stp? aussi quand tu dis utilise empty c'est comme ceci?
Code PHP :
<?php 
if(empty($x)){...}
Dernierement n'existe-t-il pas un moyen d'evite de recopier le script dans le else ou de recharger la page ( si on est sur un village) Merci beaucoup de ton aide...


RE: Créer des villages éloignés les uns des autres sur une carte - Argorate - 23-12-2008

dsl j'ai pas édité assez vite, ici le += ne marche pas, j'avais mal lu le nom de la variable, rajouter un S pour differencier deux variables est assez risqué: confusion possible, tu devrais mettre des nomanclature plus clair.

Sinon pour la fonction:

if(empty($toto)) renvoit true si $toto est vide, et false sinon
donc:
if(!empty($toto)) fait l'inverse (true = "pas vide", false sinon)