Tach auch.
Ich möchte ein Browsergame programmieren und habe dazu folgende Frage:
Wie ändere ich Datenbankwerte, wenn der Spieler offline ist. Also folgendes:
Ein Spieler "verdient" pro Sekunde 5 Geld. Der Spieler geht offline, 20 Minuten danach wird er von einem anderen Spieler angegriffen. Jetzt soll der angreifende Spieler das Geld erhalten, was der angegriffene Spieler hat. Wie kann ich das verwirklichen?
Für solche zeitbasierten Sachen eignen sich cronjobs ganz gut.
Ggf. wird es etwas komplizierter, wenn du wirklich Sekundengenau abrechnen willst (da cronjobs idR maximal einmal pro Minute laufen).
Oder du speicherst den Geldbestand nicht ab, sondern berechnest ihn auf Nachfrage neu. Dazu musst du wissen, wie der Geldbestand zu/abnehmen kann.
Bsp.
gps sei die Geldmenge, die der Spieler pro Zeiteinheit erhält, bei dir 5 (Zeiteinheit sekunde).
Zeitpunkt t0 ist der letzte Zeitpunkt, wo der Spieler angegriffen wurde (d.h., Geldbestand ist hier 0: G(t0) = 0)
Zeitpunkt T sei jetzt.
In der Zwischenzeit (t aus [t0,T[) wurde der Spieler nicht angegriffen (s. Definition von t0). Er hat Geld für bestimmte Dinge ausgegeben (etwa gA Geldeinheiten) und er hat Geld verdient. Insgesamt ergibt sich:
g(T) = g(t0) + (T-t0)*gps - gA
= 0 + (T-t0)*gps - gA
Wenn es außer angegriffen werden keine Abgänge gibt, dann einfach
g(T) = (T-t0)*gps
Dieser Ansatz dürfte deutlich leichter sein als den Goldbestand jede Sekunde oder so zu aktualisieren, insbesondere, wenn der Goldbestand deutlich seltener abgefragt wird als er sonst neu berechnet werden müsste.
Bis die Tage,
Matti