JeuWeb - Crée ton jeu par navigateur
eviter les doublons - 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 : eviter les doublons (/showthread.php?tid=674)



eviter les doublons - max - 20-01-2007

bonjours, j'ai encore amélioré ma créations de galaxie mais j'ai un problème que je n'arrive pas à résoudre...
j'ai 49 cases dans ma galaxie et je positionne aléatoirement 15 planètes dans la galaxie. mais parfois je me retrouve avec 2 planètes sur 1 case...
je crée les planètes avec un do while et je pense qu'a chaque entrée dans la boucle il faut recupérer la valeur précédament entrée dans la bdd pour voir si c'est la meme. mais ca me parrais hyperlourd... et en plus là ca marche pas ^^
je vous poste le script pour voir vos avis:
Code PHP :
<?php 
if (isset($_POST['generer']))
{

$pos=array(0,1,2,6,7,8,10,12,14,16,18,20,24,26,30,32,34,36,38,40,42,43,44,48,49);
$nbplanete=1;

do {
$requete = mysql_query("SELECT * FROM galaxie") or die(mysql_error());
$var = mysql_fetch_array ($requete);
$position_exist= $var['position'];

$galaxie=1;
$systeme=1;
$position=mt_rand(1,49);
if (
$position != $position_exist)
{

if (
$position == 11 or $position == 17 or $position == 19 or $position == 23 or $position == 27 or $position == 31 or $position == 33 or $position == 39)
{
$planete=mt_rand(1,10);
}

elseif(
$position == 3 or $position == 4 or $position == 5 or $position == 9 or $position == 13 or $position == 15 or $position == 21 or $position == 22 or $position == 28 or $position == 29 or $position == 35 or $position == 37 or $position == 41 or $position == 45 or $position == 46 or $position == 47)
{
$planete=mt_rand(11,20);
}

if (
array_search($position, $pos) != true )//si on le trouve pas dans le tableau
{
mysql_query("INSERT INTO galaxie VALUES(' ','".$galaxie."','".$systeme."','".$position."','".$planete."')");
$nbplanete++;
}
}
} while (
$nbplanete<=15);



RE: eviter les doublons - Ange_blond - 20-01-2007

Tu peux créer un tableau temporaire, et à chaque création de planete, tu parcours ton tableau pour vérifier qu'elle n'y est pas... si elle y est, tu recommence le radom...

genre :

Citation :while(fonction_ planete_ appartient_tableau(...) == TRUE)
{
radom(planete)
}

Bon je ne connais rien en PHP mais en C ca doit marcher ca...

et sinon pour tes
Citation :if($position == 3 or $position == 4 or $position == 5 or $position == 9 or $position == 13 or $position == 15 or $position == 21 or $position == 22 or $position == 28 or $position == 29 or $position == 35 or $position == 37 or $position == 41 or $position == 45 or $position == 46 or $position == 47)

tu ne pourrais pas faire un test avec un modulo ou une parité... enfin un truc moins énumératif...(bon mois je fait que proposer apres tout...)


RE: eviter les doublons - max - 20-01-2007

pour le if($position == 3 or $position == 4 or $position == 5 or $position == 9 or $position == 13 or $position == 15 or $position == 21 or $position == 22 or $position == 28 or $position == 29 or $position == 35 or $position == 37 or $position == 41 or $position == 45 or $position == 46 or $position == 47) c'est prévu mais seulement quand tout marchera ^^
mais.... je comprend pas pk mon truc ne marche pas


RE: eviter les doublons - NicoMSEvent - 21-01-2007

essaye quelque chose du genre :
1°)choisis des coordonnées au hazard
2°)fais un sélect sur ce que tu compte insérer.
3°)Si le select te retourne quelque chose, ta planete existe déjà, et recommence le processus au n°1
4°)Sinon, tu insères ta planete

a la place de mettre toutes les positions dans ton code, tu les mettrais pas dans une table? ça permettrait de rajouter des positions sans devoir toucher a ton code.


RE: eviter les doublons - max - 21-01-2007

hum... comment on met résolu sur le titre du topic? mdr