• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Browsergame

Status
Für weitere Antworten geschlossen.

yoshi95

Neues Mitglied
Ich versuche gerade, für mein Browsergame eine highscore-liste zu entwickeln. Die Punkte müssen noch bei jedem User zusammengezählt werden. Soll ich das jetzt alle 5 Minuten vom Server machen lassen oder die immer ausrechnen lassen, wenn jemand auf dei Highscore kommt?
 
In dem Highscore-Listen Thread machste einfach nen paar Queries, die erstmal alle Punkte vom User holen und dann zusammen rechnen. Wenn du aber jetzt verschiedene Punkteanzahlen bei den Gebäuden hast, wird es schon was schwieriger. Dann müsstest du ganz einfach eine Tabelle für die Gebäude erstellen, was aber jede Menge Platz wegnehmen würde.

Beispiel:

Tabelle Gebaeude -
UserID => INT => 10 => not null
Gebäude1 => INT => 10 => not null
...
Gebäude10 => INT => 10 => not null

Tabelle Gebaeude_Punkte
ID => INT => 10 => not null => auto_incremet => PRIMARY_KEY
Punkte => INT => 10 => not null

In der Tabelle Gebaeude ist kein PRIMARY_KEY vorhanden, da dort die Daten unabhängig von ihrer Reihenfolge gespeichert sind.

Nun müsste man ein Array per Datenbank-Abfrage erstellen, das die Anzahl der Gebäude eines Users enthält.

Danach holt man noch die Punkte für jedes Gebäude/Einheit usw. und rechnet die Gesamtpunktzahl aus, hier is mal so wie ich mir das in etwa vorstelle:

PHP:
<?php

$SQL1 = "SELECT * FROM gebaeude WHERE UserID='".$SESSION['UserID']."'";
$Result1 = mysql_query($SQL1) or die(mysql_error());

while ( $Gebilde = mysql_fetch_assoc($Result1) )
{
$User_Gebaeude[] = $Gebilde;
}

for ( $i = 1; $i <= count($User_Gebaeude); $i++ )
{
$SQL2 = "SELECT punkte FROM gebaeude_punkte WHERE ID='".$i."'";
$Result2 = mysql_query($SQL2);
while ( $Punkte = mysql_fetch_assoc($Result2) )
{
$User_Punkte[] = $Punkte * $User_Gebaeude[$i];
}
}

$Gesamt = 0;
for ( $o = 0; $o < count($User_Punkte); $o++ )
{
$Gesamt += $User_Punkte[$o];
}

?>
Wie du das dann noch nach der höchsten Punktzahl im Array sortierst, kannst du ja sicherlich selber schauen :D
 
Ich machs zwar nicht mit gebäuden (rollenspiel) aber egal. D.H. die Ladezeiten werden nicht zu lange, wenn ich die Daten jedes mal neu ausrechnen lasse?
 
Wenn du den Highscore errechnest, wenn jemand drauf klickt, dann mach eine begrenzung von einer Minute oder so, damit nicht bei ner menge User der Highscore 10 mal in der Secunde errechnet wird.

Gruß Corvulus
 
je nach mysql tabelle solltest du es eigtl auch so machen können

PHP:
SELECT `tabelle1`.`punkte1`+`tabelle1`.`punkte2`+`tabelle2`.`punkte1` as `punkte` FROM `tabelle1`, `tabelle2` [...]
 

Bei manchen MySQL Versionen (glaube ab V5) kannst du mysql gleich die verschiedenen einträge aus verschiedenen Tabellen und Spalten zusammenzählen lassen und dir dann erst das ergebnis geben lassen.

Dann hast du das mit einer Abfrage und es läuft schneller als wenn du 5 Abfragen schickst und dann alles manuell zusammenrechnen musst.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben