mmofacts.com

Kleine Frage

gepostet vor 18 Jahre, 10 Monate von Magic007
Habe mein Spiel heute nochmal auf Bugs getestet...
dabei ist mir aufgefallen das wenn man sich anmeldet nur eine Zufallszahl generiert wird...
Wie kann ich es einstellen dass das Programm prüft ob die Zahl schon existiert und dann wieder und wieder überprüft bis die Zahl nicht existiert...
hat da jmd vlt ein kleines Codeschnipsel für mich?
Hoffe Frage war verständlich...^^
Gruss
Magic007

 

$y = rand(1, 100);
$z = rand(1, 25);
//Hier Zufallszahlen
...
mysql_query("INSERT INTO `islands` (`id`, `name`, `x`, `y`, `z`, `playerid`, `points` , `grafic`) VALUES ('', '".$_POST["user"]."\'s Insel', '1', '".$y."', '".$z."', '".$id["id"]."', '0' , '".$gfx."' );");
//Hier Eintrag
//???
gepostet vor 18 Jahre, 10 Monate von Fornax
Ich würde einfach die DB fragen, ob die Zahl schon vorhanden ist.

Dazu lagerst du das am besten in eine Funktion aus:

 

function zufall(){
$y = rand(1, 100);
$z = rand(1, 25);
//Hier Zufallszahlen
...

$result = mysql_query("SELECT FROM `islands` `id` WHERE `y`={$y} AND `z` = {$z}");

//Hier gucken, ob es ein resultat gibt

if(mysql_num_rows($result) != 0){
return zufall(); //Wieder probieren
}
else{
return array("y" => $y, "z" => $z);
}

}

$koordianten = zufall();

mysql_query("INSERT INTO `islands` (`id`, `name`, `x`, `y`, `z`, `playerid`, `points` , `grafic`) VALUES ('', '".$_POST["user"]."\'s Insel', '1', '".
$koordianten["y"]."', '".
$koordianten["z"]."', '".$id["id"]."', '0' , '".$gfx."' );");
//Hier Eintrag
//??? n da ist.



Das ist nur ein Entwurf, ich hoffe, das hängt sich nicht auf :roll:
Ich denke, dass es aber eine performantere Lösung geben müsste, also: Hilfe ist gefragt
gepostet vor 18 Jahre, 10 Monate von Macavity
ich seh da 2 möglichkkeiten welche besser ist hängt davon ab wie voll das gesamte "Feld" schon ist.
1. möglichkeit
bin jetzt nicht der sql-crack aber was spricht gegen eine schleife?
ist halt wenig sinnvoll wenn du schon sehr viele einträge hast...
 

$y = rand(1, 100);
$z = rand(1, 25);
$sql = "select * from islands where y = '$y' AND z = '$z'";
$result = mysql_query($sql);

while(mysql_num_rows($result) > 0){
$y = rand(1, 100);
$z = rand(1, 25);
$sql = "select * from islands where y = '$y' AND z = '$z'";
$result = mysql_query($sql);
}

mysql_query("INSERT INTO `islands` (`id`, `name`, `x`, `y`, `z`, `playerid`, `points` , `grafic`) VALUES ('', '".$_POST["user"]."\'s Insel', '1', '".$y."', '".$z."', '".$id["id"]."', '0' , '".$gfx."' );");


läuft halt uU ewig...

2.
die zweite Möglichkeit wäre erst mal die vorhandenen einträge auszulesen und dann praktisch alle koordinaten die noch nicht vorkommen in ein array zu packen. und dann eine zufallszahl aussuchen die eine kombination aus diesem array nimmt.
soll ich dir das ausformulieren oder willst du es selber versuchen?

dier erste lösung ist zwar einfach aber ich würde sie nicht empfehlen...

Edit: Fornax und ich haben etwa zeitgleich gepostet...der übersichthalber: sein Vorschlag entspricht etwa meiner ersten Alternative.
gepostet vor 18 Jahre, 10 Monate von Riston
meinst du sowas wie den Prioamry Key, also das woran du jeden Spieler eindeutig erkennst? Dann würde ich das MySQL Fatutre "aoto_increament" benutzen. Wenn du einfach beim Insert die ID und den Wert dazu weglässt, zählt MySQL einfach eine Zahl höher.
gepostet vor 18 Jahre, 10 Monate von Macavity
sieht doch eher so aus als wolle er auf einer karte die noch freien punkte zufällig füllen...oder? sonst habe ich das falsch interpretiert.. auto_increment wäre für eine id natürlich am einfachsten.
gepostet vor 18 Jahre, 10 Monate von Magic007
danke das ihr so schnell geantwortet habt...
mir hat ja nur so was wie die "idee" gefehlt...
also ich denke ich müsste es jetzt alleine hinbekommen..
meinst du auto_increament bei den Koordinaten einzustetzen Riston?
...
Gruss
Magic007
gepostet vor 18 Jahre, 10 Monate von Macavity
das musst du bei deiner mysql-tabelle als "eigenschaft" eintragen. der nachteil ist das es dann halt so gar nichs zufälliges mehr hat sondern stur immer größer wird.

...willst du das so?
gepostet vor 18 Jahre, 10 Monate von Magic007
Ja ich weiss schon was auto_increament ist...^^
Nein aber es soll schon eine Zufallszahl generiert werden damit alles ungefähr gleich entfernt ist.
auto_increament benutze ich nur bei ids...
habe jetzt die "while" Methode genommen finde ich irgendwie schöner ^^
gepostet vor 18 Jahre, 10 Monate von Riston
hab die Frage missverstanden

Auf diese Diskussion antworten