login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Signup random coordinatie toewijzen

Offline micasa001 - 15/12/2009 15:13 (laatste wijziging 15/12/2009 15:22)
Avatar van micasa001PHP interesse Bij mijn registratie script wil ik mijn bezoekers automatisch een coordinaat toewijzen. In de db staat

  1. --
  2. -- Table structure for table `coor`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `woningen` (
  6. `id` INT(255) NOT NULL AUTO_INCREMENT,
  7. `soort` INT(255) NOT NULL DEFAULT '0',
  8. `eigenaar` VARCHAR(255) DEFAULT NULL,
  9. `coordinaten_x` INT(255) NOT NULL DEFAULT '0',
  10. `coordinaten_y` INT(255) NOT NULL DEFAULT '0',
  11. PRIMARY KEY (`id`)
  12. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

TABEL vb

(1, 6, 'demo', 250, 250);


Zou iemand mij kunnen vertellen wat ik in mijn registratie deel moet toevoegen hiervoor?

Dit is mijn registratie bestand http://www.plaatscode.be/138208/

Alvast bedankt voor de hulp

14 antwoorden

Gesponsorde links
Offline Rik - 15/12/2009 15:18
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Op regel 62 maak je een entry in de users tabel. Daarvoor zou je eigenlijk een onbezet coördinaat uit moeten kiezen en die gelijk mee op moeten slaan.
Offline micasa001 - 15/12/2009 15:22
Avatar van micasa001 PHP interesse Is het niet mogelijk om deze random toe te wijzen en dat het script zelf direct controleerd welke coordinaten nog beschikbaar zijn?

Zo ja, hoe is dit mogelijk?
Offline Chilion - 15/12/2009 17:26
Avatar van Chilion MySQL interesse eerst opvragen en dan kijken welke nog vrij zijn?

Soort travian of tribalwars aan het maken?
Offline micasa001 - 15/12/2009 18:21
Avatar van micasa001 PHP interesse Inderdaad, soort van maar geheel anders ;). Enige wat nog overeenkomt is de map optie.

Maar zou je een voorbeeld kunnen geven hoe ik dit mogelijk zou kunnen doen? Dus betreft check voor de beschikbaarheid en het random toewijzen van de coordinaat?
Offline Rubdos - 16/12/2009 09:18 (laatste wijziging 16/12/2009 09:19)
Avatar van Rubdos Nieuw lid Zoiets?

  1. <?php
  2. $minimum = 0;
  3. $maximum = 900; //(min en max-coords)
  4.  
  5. $x = mt_rand($minimum,$maximum);
  6. $y = mt_rand($minimum,$maximum);
  7.  
  8. $sql = "SELECT * FROM woningen WHERE coordinaten_x = $x AND coordinaten_y = $y";
  9.  
  10. $res = mysql_query($sql);
  11.  
  12. while(mysql_num_rows($res))
  13. {
  14. $x = mt_rand($minimum,$maximum);
  15. $y = mt_rand($minimum,$maximum);
  16.  
  17. $sql = "SELECT * FROM woningen WHERE coordinaten_x = $x AND coordinaten_y = $y";
  18.  
  19. $res = mysql_query($sql);
  20. }
  21.  
  22. //op dit punt zijn combinatie x/y uniek
  23. ?>


Script uit het vuistje, dus ongetest, maar het zou moeten gaan 
Offline vinTage - 16/12/2009 09:31
Avatar van vinTage Nieuw lid
  1. SELECT x, y FROM tabel WHERE x = '' AND y = '' ORDER BY RAND()
Offline micasa001 - 16/12/2009 10:55
Avatar van micasa001 PHP interesse Dank jullie beide. Ik ga het direct eens proberen.
Offline Rik - 16/12/2009 11:04
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Je kan ook in één keer in sql een vrij coördinaat ophalen:
  1. SELECT * FROM woningen WHERE id NOT IN(SELECT stad FROM users) ORDER BY RAND() LIMIT 1
Tenminste als je inderdaad de woning in het veld stad van de users tabel koppelt.
Offline micasa001 - 16/12/2009 21:32
Avatar van micasa001 PHP interesse Rik, de tabel COOR is een andere als USERS. Zou je kunnen toelichten hoe ik dit dan voor elkaar krijg op jouw manier?
Offline Rik - 17/12/2009 10:31
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Als je daarvan ook de structuur post wel ja.
Offline micasa001 - 17/12/2009 15:08
Avatar van micasa001 PHP interesse Sorry, zou je me kunnen vertellen wat je hier allemaal voor nodig hebt? (bovenaan staat de structuur van de coordinaten waar de locaties op worden toegewezen)

Voor de tabel USERS is dit denk ik

`id` int(255) NOT NULL auto_increment,
`login` varchar(15) default NULL,

Mocht je meer nodig hebben dan hoor ik het graag
Offline Rik - 17/12/2009 15:29
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Het gaat erom hoe je de tabellen coor, woningen en users aan elkaar koppelt. Voor zover ik het nu begrijp verwijst de tabel woningen naar de tabel coordinaten. Maar hoe koppel je je users aan woningen?

Is het de bedoeling dat een user meer dan 1 woning heeft? En staat er slechts 1 woning op een coördinaat? Als je dat weet kun je de tabellen slim aan elkaar gaan koppelen en kun je mooie queries opstellen.
Offline micasa001 - 17/12/2009 15:54
Avatar van micasa001 PHP interesse Er staat idd maar 1 woning op 1 coordinaat.

Zoals ik het nu heb zijn de scripts (zie het begin van de topic) en tabel WONINGEN is deze


--
-- Table structure for table `woningen`
--

CREATE TABLE `woningen` (
`id` int(255) NOT NULL auto_increment,
`soort` int(255) NOT NULL default '0',
`schade` int(3) NOT NULL default '0',
`eigenaar` varchar(255) default NULL,
`coordinaten_x` int(255) NOT NULL default '0',
`coordinaten_y` int(255) NOT NULL default '0',
`geplaatst` varchar(3) NOT NULL default 'Nee',
`stad` int(1) NOT NULL default '0',
`uitbetalen` int(255) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Dumping data for table `woningen`
--

Dus als een speler nu bv. een stuk grond koopt wordt dit script uitgevoerd

http://www.plaatscode.be/138217/

Wat nu dus nog moet gebeuren is dat een speler bij het registreren van een account een vrije coordinaat krijgt toegewezen.

Hoop dat dit voldoende informatie is, anders hoor ik het graag

Offline Rik - 19/12/2009 14:54
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Ik heb even nagedacht, maar in een sql query kun je niet op een makkelijke manier een SELECT x, y FROM ...alle coordinaten... WHERE x,y NOT IN (SELECT ...bezette coordinaten...)-achtige query maken.

Het is ook geen optie om alle bezette coördinaten op te halen en met PHP.net: array_dif de legen eruit te halen. Als je 900x900 hebt wordt dat gewoon veel te langzaam.

Dan zou ik toch eerst kijken of er überhaupt nog vrije plekken zijn. Dan gewoon met rand of mt_rand een willekeurig coördinaat uitzoeken en even controleren of die al bezet is.

Er is vast een hele eenvoudige efficiënte oplossing, maar die zie ik nu even niet...
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.191s