Timer im Hintergrund laufen lassen

NetzUnity und Informatik-forum wurden zusammengelegt. Eine entsprechende Ankündigung wird demnächst noch folgen. Für 2025 ist hier einiges geplant! Bei Fragen bitte per DM an Maximilian Rupp wenden.
  • Ich würde gerne ein kleines Browsergame machen für meine Klasse. Es soll so sein das jeder einen Charakter besitzt mit dem er verschiedene Sachen machen kann. Das Problem ist das wenn ich jemanden angreife weiß ich nicht wie ich das kampf script ausführen soll wenn beide spieler off sind.

    Das angreifen läuft ca so ab:

    Spieler A gibt koordinaten ein. Php script rechnet sich weg aus und Dauer bis zum Ziel und speichert es in die Datenbank ab. Sobald der Spieler on kommt wird ihm angezeigt wie lange sein Spieler noch zum Ziel braucht (Ankunftszeitpunkt - Sendezeitpunkt).

    Meine Frage ist jetzt, wie kann ich das am besten programmieren das der Server zum ankuftszeitpunkt das script startet mit dem das alles berechnet wird? Oder bin ich da auf dem Holzweg und das ganze geht anders viel einfacher?

  • in browsergames wird es wie Simon bereits erklärt hat tatsächlich oft so gelöst dass es einfach eine tabelle gibt in der events gespeichert werden die noch passieren müssen (zb mit datum in der zukunft) und dass einfach bei jedem pageload (egal von wem der durchgeführt wird) alle events durchgeführt werden die schon vergangen sind.

    vorteil von dieser lösung ist dass wirklich alle events der reihe nach berechnet werden. das ist je nach gametyp wichtiger oder unwichtiger. bei kampf und handels simulationen ist es wohl für die allgemeinheit der spieler wichtig ob ein spieler noch ressourcen oder einheiten im lager hat oder ob die schon durch einen angriff von einem anderen spieler vernichtet wurden obwohl sich der spieler noch garnicht eingeloggt hat.

    wenn du php verwendest und ein browsergame codest hast du auch garnicht so viele andere möglichkeiten. die datenbank meldet sich nicht von selbst. die musst du regelmässig pullen. und die php scripte führen sich auch nicht von selbst aus. die müssen von spielern aufgerufen werden durch pageloads.

    eine andere möglichkeit wäre eine art tick-system. wo ein cronjob oder ein php script dass sich selbst mit sleep regelmässig aktiv und inaktiv macht regelmässig eine aktion durchführt.

    der vorteil vom tick system ist, dass der user selbst nichts mitbekommt von berechnungen und db abfragen die eigenltich andere spieler betreffen und die recht lange dauern können wenn lange niemand mehr aktiv war. nachteile gibts aber wenn die intervalle zwischen den ticks kurz sind (um realtime nahe zu kommen) und irgendwann aber so viele aktionen zu berechnen sind, dass die berechnungen und abfragen länger brauchen als der tick intervall.

    sogesehen ist die lösung mit den pageloads die immer alle events berechnen die gerade auszuführen sind recht einfach umzusetzen, auch wenn dein host keine cronjobs oder lang-laufende php scripts unterstützt. man kann echtzeit vortäuschen und die datenintegrität ist nicht so sehr gefährdet.

    ich hoffe ich hab jetzt nichts übersehn aber meine browsergame entwickler zeit ist schon ein bisschen her.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!