Browsergame Events

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Browsergame Events

    Hiho,

    nein ich bin keiner der in 10 minuten und ohne vorahnung ein Browsergame machen will, das vorweg

    Es geht darum ob es überhaupt möglich ist events mit PHP zu bearbeiten? Wenn man jetzt als Beispiel mal eines der bekannten Weltraumsimulationen nimmt kriegt man z.b. sekündlich Ressourcen und wenn man seine Flotten losschickt kommen diese z.b. erst nach einer Stunde an ihrem Ziel an. Vorher berechnen geht nicht weil sich das Ziel in der Zeit ja noch verändern kann.

    Ist das mit PHP überhaupt möglich, hat da jemand Ideen oder gar Praxiserfahrung?

    Es geht um ein recht komplexes Game und ein Server muss unter Umständen hunderte Events pro Sekunde berechnen.


    MfG Kai

  • #2
    ich kenns von Browser Games her so, das eine Flotte los geschickt wird, dafür x Ticks braucht und danach erst wieder verfügbar ist. d.h. in der zwischenzeit nicht ansprechbar.
    Sunshine CMS
    BannerAdManagement
    Borlabs - because we make IT easier
    Formulargenerator [color=red]Neu![/color]
    Herkunftsstatistik [color=red]Neu![/color]

    Kommentar


    • #3
      Hm ich weiß nicht so ganz was du meinst, es geht mir ja hauptsächlich darum das der Kampf oder was auch immer erst berechnet werden kann wenn die Flotte angekommen ist (nach z.b. einer Stunde). Grund dafür ist das das Ziel sich ja in der Zeit noch ändert (vorhandene Ressourcen, Flotten etc.).

      Und man kann ja nicht für jedes event nen Cronjob anlegen, wenn möglich sollte das PHP-only gelöst werden.


      MfG

      Kommentar


      • #4
        Natürlich wäre es kolossaler Unfug, jede Sekunde irgendwas zu berechnen ...!

        Rechne rückwärts - wenn du weißt, dass eine Flotte x Sekunden unterwegs war, und als Regel definiert ist, dass jede Sekunde y Einheiten wasauchimmer von wemauchimmer abgezogen/hinzuaddiert werden sollen, dann ist das, wenn der Ankunftszeitpunkt verstrichen ist, eine simple Multiplikation und eine Subtraktion/Addition - statt x einzelner Berechnungen im Sekundenabstand ...


        Aber von jemandem, der ein Browsergame programmieren will, würde ich eigentlich erwarten, dass es sich solche grundlegenden Konzepte selber erarbeiten kann.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Ich glaube ich habe etwas Probleme das richtig zu schildern

          Das mit den hunderten Events pro Sekunde meinte ich insgesamt, auf dem Server tummeln sich ja weit mehr als nur ein User.
          Was die Anzeige der Ressourcen angeht habe ich schon eine Lösung gefunden, das sind wirklich nur einfache Rechnungen (wobei ich mich noch frage wie oft der Wert in der DB aktualisiert werden sollte aber das muss wohl die Praxis zeigen).

          Was die Flotten angeht ist es allerdings etwas komplizierter da das "Ziel" ja in den meisten Fällen ein anderer Spieler ist. Zurückrechnen ist da nur bedingt möglich.

          Nun wäre ein möglicher Ansatz bei jedem Request zu gucken welche Events gerade abgelaufen sind und die dann zu berechnen, wenn dies dann etwas später als eigentlich gedacht passiert kann man das ja zurück berechnen wie du es gesagt hast. In der Zwischenzeit kann der andere Spieler ja nichts mehr ändern weil auch er mit einem Request diesen "Trigger" ausgelöst hätte.

          Da der Client sowieso auf Javascript basiert wäre es auch nicht weiter schwer das im Hintergrund ablaufen zu lassen so das der User nicht lange warten muss, damit keine Veralteten Daten angezeigt werden wird beim Aufrufen von Seiten noch zusätzlich geprüft ob ein Event diese Daten noch verändert.


          Wie hört sich dieser Ansatz an? Gibt es bessere? Verbesserungsvorschläge?

          Vielen Dank für eure Mühe alleine diesen Text durchzulesen


          MfG Kai

          Kommentar


          • #6
            Gibt sicher ne elegantere Lösung als meine, aber ich mache zur Zeit folgendes z.B. beim Bau von Gebäuden:

            Ich hab die Bauzeit in Sekunden, addiere die per mktime auf die aktuelle Zeit und trage den Wert anschließend in eine Datenbank ein (inkl. Infos welcher Planet, welches Gebäude, etc.).

            Dazu dann noch nen Daemon, der alle x Sekunden prüft ob sich in der DB Einträg mit einer Endzeit <= der aktuellen Zeit befinden und wenn ja die entsprechenden Gebäudestufen anpasst.

            Hoffe das geht so in die Richtung des Topics...

            Kommentar


            • #7
              @Trybex: genau das ist Unfug, denn dein Server wird total belastet.
              Das mit den Ticks ist wohl die beste Lösung. Alle 15 Minuten läuft der Daemon und prüft die Einträge, so hast du weniger Belastung.
              Sunshine CMS
              BannerAdManagement
              Borlabs - because we make IT easier
              Formulargenerator [color=red]Neu![/color]
              Herkunftsstatistik [color=red]Neu![/color]

              Kommentar


              • #8
                @Benny

                Das des noch nich toll ist, is mir schon klar, deswegen suche ich atm ja auch noch nach Lösungsansätzen...

                Was die letzte Idee von Kai angeht:

                Die Idee mit dem Trigger ist sicherlich für die Flotten ganz gut geeignet. Bedutet aus meiner Sicht, das bei jedem Script-Aufruf geprüft werden muss, ob die Flotte angekommen ist. Spart im Gegensatz zu meinem bisherigen Ansatz auch jede Menge Ressourcen auf dem Server.

                Heißt im Klartext dann aber auch:

                Zu Hochzeiten wo mehrmals pro sekunde seiten aufgerufen werden, ist das ganze nicht sonderlich aufwendig, ABER
                Letzter Scriptaufruf um 2 Uhr, nächste erst um 6 Uhr, Angriff kam um 4 Uhr an. Ich muss in diesem Moment also zurück berechnen wie viel Ressourcen um 4 Uhr in der Basis lagen, auch unter Berücksichtigung von evt. fertiggestellten Minen, anderen die bereits vorher ne Attacke durchgeführt haben etc.
                Meine Lösung für die Attacken wäre die Datensätze aus der Datenbank sortiert nach Ankunftszeit auszulesen und abzuarbeiten. Was den Minenausbau angeht, müsste ich irgendwo fertiggestellte gebäude abspeichern und kontrollieren, ob zwischen Endzeit und aktueller Zeit Minen ausgebaut wurden, da ich die Ressourcen von den Ressourcen zur aktuellen Zeit abziehen müsste.

                Hoffe mein Post ist verständlich und ich seh und versteh das Problem / die Lösung nun richtig...
                Zuletzt geändert von Trybex; 19.08.2006, 00:24.

                Kommentar


                • #9
                  Du sollst die Ticks ja auch auf 15 Minuten rechnen:

                  15:00
                  15:15
                  15:30
                  etc.

                  Und wenn einer etwas baut was 2 Ticks benötigt und es um 15:20 beginnt, dann wäre das Gebäude um 15:45 fertig (15:30 1. Tick, 15:45 2. Tick)
                  Sunshine CMS
                  BannerAdManagement
                  Borlabs - because we make IT easier
                  Formulargenerator [color=red]Neu![/color]
                  Herkunftsstatistik [color=red]Neu![/color]

                  Kommentar

                  Lädt...
                  X