Beste,

Onlangs ben ik begonnen aan een project voor mijzelf, een eigen browserspel. In het spel stuur je units naar een Turn Based slagveld (denk aan bijvoorbeeld Command & Conquer) waar je ze kan laten strijden tegen units van andere spelers.

Tot op heden ging het altijd goed, er was namelijk 1 groot slagveld waarin alle spelers tegelijk actief waren. Elk 'hokje' op het slagveld heeft zijn eigen rij in de database met daarin de coördinaten en wat voor 'soort' 'hokje' het is (denk aan water/gras/bos/etc.).

Echter was ik nu van plan een nieuwe functie toe te voegen waardoor je o.a. 1 op 1 gevechten kan doen en ook 'missies' kan doen tegen een AI. Om dit te realiseren moest ik ondersteuning maken voor meerdere slagvelden. Op zich geen probleem zou je denken, het probleem is alleen dat als men een nieuwe missie of match start hij dus een kaart voor je moet genereren, iets was voor bijvoorbeeld bij een kaart van 100x100 toch al zo'n 10.000 queries zijn wat, als meerdere mensen tegelijk een missie starten, toch wel zo zijn gevolgen heeft op de snelheid van de server.

Dus mijn vraag, enig idee hoe ik dit kan oplossen?

Bij voorbaat dank,
Marco
10.000 queries?
Misschien kun je meerdere kolommen/rijen in 1 query zetten?
dus bijvoorbeeld:
<?php
$veld = array( 0 => '1,5,1,9,4,8,1,2,4,6', 1 => '8,5,1,5,1,9,4,8,1,2');
foreach($veld AS $nummer => $value){
$rij[$nummer] = explode(',',$value);
}
?>
Waarom zo enorm veel query's voor 100x100?
@Aad: 100x100 = 10.000.

Je data is nu goed genormaliseerd (althans wat de hokjes betreft) maar niet echt praktisch. Je zult een manier moeten vinden om die hokjes kwijt te raken. Bijvoorbeeld bij een map een max breedte en hoogte meegeven. Als het mogelijk is om het grootste gedeelte een standaard type hokje te laten zijn (bijvoorbeeld open land) dan hoef je alleen de afwijkingen te noteren. Ook kan je gebieden maken (bijvoorbeeld een bos). Een gebied heeft dan een Xmin, Xmax, Ymin en Ymax. Kan je dus alsnog op queriën. Nog een aantal losse blokjes erbij en je hebt al een aardig veld. Eenheden hebben dan een positie maar zijn niet direct aan een vakje gerelateerd. Voor het toevoegen en updaten van posities van eenheden kan je triggers schrijven zodat je kan afdwingen dat een eenheid staat op een positie die binnen het speelveld valt en waar geen andere op staat.

Reageren