Echtzeitberechnung

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

  • Echtzeitberechnung

    Guten Abend liebe Programmierer.

    Mein Kopf ist kurz davor zu explodieren. Ich habe ein Problem und finde komischerweise keine Lösung. Seit ich programmiere, habe ich gelernt mir slebst zu helfen Google machts möglich. Aber ab und zu gab es Dinge, die ich einfach stundenlang selber ausprobieren musste, bis es schließlich klappte.

    Aber jetzt sitze ich seit Tagen, Abend für Abend, vor ein und dem selben Problem. Zu dem Problem.

    Ich habe ein voll funktionsfähiges Echtzeitbrwosergame in PHP geschrieben. ( echtzeit nicht in diesem Sinne. Ihr versteht schon )
    Sowas ist ja einfach, wenn man einmal verstanden hat, das man einfach nur immer wieder Zeiten in die Datenbank einfügen und überprüfen muss.
    Wenn ich z.B ein Gebäude baue, dann wird das Gebäude erst fertig gestellt, wenn die Bauzeit abgelaufen ist. Alles schön und gut. Funktioniert alles.
    Nun habe ich angefangen die erste Funktion zu schreiben um einen anderen Spieler anzugreifen. Da fing das ganze dann an.
    Wenn ich nun z.B einen Spieler um 12:00 AM angreife und der Angriff um 13:00 PM stattfindet, ich aber erst den nächsten Tag wieder online komme, dann würde der Kampf mit völlig falschen Werten ablaufen, weil es ja sien kann, dass der Gegenspieler in der Zwischenzeit schon was gebaut hat.
    Das heiß, bei jedem Login muss ich überprüfen, was alles passiert ist. Aber da muss ich so unglaub,ich viel beachten und zurückrechnen, das es am Ende doch immer wieder falsche Ergebnisse gibt. Nun wollte ich von euch wissen, wie Ihr an die ganze Sache rangehen würdet. Gibt es eine Möglichkeit, das ganze simpel zu halten, oder muss ich wohl oder übel ALLE Daten des Gegenspieler ermitteln, zurückrechnen, berechnen usw usf ???
    Ein weiteres Problem z.B ist, dass ja auch ein dritter Spieler mit in das Geschehen kommen kann. Der müsste dann auch nochmal alles Werte von den anderen beiden Spielern ermitteln. Das ist mir zu viel.

    Ich hoffe Ihr habt ein paar gute Tipps für mich auf Lager

    MFG Abraxus
    Zuletzt geändert von Abraxus; 04.10.2010, 21:32.

  • #2
    Hallo Abraxus,

    der Spieler der als erstes online ist bzw. die Seite aktualisiert und an irgendein Ereigniss beteiligt ist.

    Aktualisiert alle bis dahin abgeschlossenden Ereignisse aller beteiligten Spieler.

    so oder so ähnlich .

    VG
    gourmet

    Kommentar


    • #3
      Nunja, so hätte ich es ja gemacht. Aber wenn der Angriff eigendlch schon 1 Tag her ist, und ich hier und jetzt alle abgeschlossenene Ereignisse berechne und DANN den Kampf ausführe, dann sind die Werte ja völlig falsch.

      Kleines Beispiel.

      A greif B an.
      A kommt um 02:00PM an.
      B baut Verteidigung. Die Verteidigung ist um 05:00PM fertig.
      A und B sind nun einen Tag offline. Der Angriff wurde noch nicht ausgeführt.

      Nächster Tag.

      A kommt online ( nun prüfe ich alles was fertig ist, wie Du gesagt hast )
      Die ganze Verteidigung von B ist fertig weil ein ganzer Tag verstrichen ist.
      Aber eigendlich ist die Verteidigung zur Kampfeszeit noch garnicht fertig geworden. Eigendlich hatte B zu dem Zeitpunkt KEINE Verteidigung.
      Da ich aber bei meinem Login alles geprüft und aktualisiert habe, hat er nun in dem Kampf Verteidigung die eigendlich nicht da sien sollte.

      Das ist mein Problem. Ich muss alles zurückrechnen. Und nicht nur das, es kann ja sein das ein weiterer Spieler, sagen wir Spieler C, auch einen Angriff auf B ausgeübt hat. Und das noch vor meinem Angriff. Dann würde das WIEDER alles ganz anders aussehen. Das ist es ja, was meinen Kopf zum platzen bringt. Es gibt einen Weg, das ist ja klar, aber ich finde nicht mal einen Anfang um es zu realisieren :'(

      Kommentar


      • #4
        Du mußt nichts zurückrechnen

        in der Datenbank steht wann das Ereigniss beendet ist und so werden die Ereignisse auch abgearbeitet.

        Mit dem kleinsten Datum wird begonnen.

        player1 - Angriff - 12.00
        player2 - Ausbau Verteidigung - 13.00
        ...usw.

        Kommentar


        • #5
          Ohhhhhhhhhhhhhh GOOOTTTTTTT

          Es hat gerade gaaanz feste Pling bei mir gemacht und meine Lampe über dem Kopf ist so hell, dass die ganze Strasse draußen leuchtet *_*

          Du bist der Beste. DANKE DANKE DANKE. Warum bin ich da nicht von selbst drauf gekommen. Total easy. Danke nochmal. Dann kann es ja endlich weitergehen. *_*

          Kommentar


          • #6
            kein Problem

            wenn du fertig bist, oder jemanden für nen alpha- oder betatest brauchst, kannst du dich ja mal melden

            Kommentar


            • #7
              Klar, wenn Du erste Screenhots haben willst PN me.

              Und für alle Andren die das hier gelesen haben gillt das Selbe.

              =)

              Kommentar


              • #8
                schau dir mal cronjob.de an das kann dir irgendwann auch mal für dein browsergame weiterhelfen

                Kommentar


                • #9
                  Ja, danke, damit kann ich sicher mal was anfangen. z.B einen Status der Spieler oder des Servers auf der Startseite, auch wenn gerade niemand online ist und der Script nicht von einem Spieler gestartet werden kann =)

                  Kommentar


                  • #10
                    Die Scripte sollten Generell nicht von Spielern gestartet werden.

                    Du Solltest das in mindestens zwei Sektionen unterteilen.

                    1) Alle Skripte wie aufträge, angriffe usw.
                    2) Alle Berechnungsskripte. <--- Cronjob

                    Die Berechnungen Sollten eigentlich voll automatisch ablaufen.
                    Bitte Beachten.
                    Foren-Regeln
                    Danke

                    Kommentar


                    • #11
                      Zitat von Wyveres Beitrag anzeigen
                      Die Scripte sollten Generell nicht von Spielern gestartet werden.
                      Weil?

                      Du möchtest doch nicht wirklich einen Cron im Sekundentakt ausführen,
                      der alle aktuellen Ereignisse abarbeitet.

                      Bei einigen tausend Spielern wird das mit Sicherheit eine Belastungsprobe...

                      Desweiteren sollten nur die Daten aktualisiert werden, die auch benötigt werden.

                      Ich würde es der Performens wegen her so machen.

                      Kommentar


                      • #12
                        Man muss abwägen, Was man mit Cron an Berechnungsskripten übergibt. z.b. Währe es sinnvoller z.b. Ressourcen Scripte in den Cron zu packen.

                        Da es ist im Grunde eine Abwägung ist wie er das macht und da ich seine Grundlage nicht kenne und auch nicht Wissen kann wie er ran geht.

                        Ist eine Ausführung von Cronjobs im Sek. Takt wirklich unsinnig, darauf wollte ich auch eigentlich nicht hinaus.

                        Aber das Thema is extrem schwierig da es eine Menge zu beachten gibt, von der User Interaktion mal abgesehen.
                        Bitte Beachten.
                        Foren-Regeln
                        Danke

                        Kommentar


                        • #13
                          um die punkte der spieler zu berechnen, kann man auch einen cron nehmen der alle "30minuten" aufgerufen wird um die resourcen des servers zu sparen.

                          Kommentar


                          • #14
                            Leute, das was gourmet mir gestern Abend empfohlen hat, ist die beste Variante. Ich habe es gestern Abend und heute den ganzen Tag über realisiert und es läuft super. Ich prüfe NUR die Daten anderer Spieler WENN diese irgendwie mit einem meiner Aktionen zu tun haben und selbst diese Prüfung führe ich ERST aus, wenn es wirklcih notwenidig ist. Wenn z.B die Zeit für eine Aktion gekommen ist.

                            Mal ne Frage am Rande. Is 0.087471 Sekunden für das Laden einer Seite in Ordnung ? Immerhin werden bei mir auf JEDER Seite Querys ausgeführt und das nicht alzuwenig.

                            Vielen Dank euch Allen =)

                            Kommentar

                            Lädt...
                            X