tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
372
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Subwoover Subwoover ist offline Mitglied Platin
    Registriert seit
    Dec 2001
    Ort
    Wien
    Beiträge
    532
    Jo das thema hatte ich schon mal erwähnt und damals waren die ideen und vorschläge sehr interessant.

    leider ging das thema irgendwie unter und die erwähnten ideen wurde nicht weitergesponnen.
    Hier also noch einmal, dort angefangen wo das thema aufhörte:

    Ich entwickle gerade ein browsergame, mein erstes und alle Berechnungen die nötig sind damit das Spiel aktuell bleibt werden in einer Datei ausgeführt die bei jeder Seite eingebunden ist.
    Bei jedem Laden einer Page also, wird die Datei auch geladen.

    Das Problem das sich nun stellt sieht wie folgt aus:
    Bei jedem Klick eines Users -> Aktualisierung!

    Angenommen der letzte Besuch findet um 20.18 statt. Um 6:25 in der Früh sieht der nächste Spieler nach seinem Account, dabei wird alles berechnet was in der Nacht "passierte" oder passieren sollte.
    Die Frage ist jedoch, wie ich die Ereignisse chronologisch ordnen kann.

    User A schickt seine Truppen weg und die kommen um 0.00 an und erobern die feindliche Burg.
    User B schickt seine Truppen weg, welcher erst um 0.15 ankommen und er wiederum erobert die Burg.
    Nur wie kann man das korrekt berechnen?

    Ich hab die Zeiten aller Truppenbewegungen und Gebäude-Konstruktionen etc. gespeichert, also den Timestamp wann es fertig ist.
    Trotzdem kann ich nicht alle Daten hernehmen und die beliebig bearbeiten, nach welchem Muster also?
     

  2. #2
    KoMtuR KoMtuR ist offline Mitglied Brokat
    Registriert seit
    Apr 2002
    Ort
    Chemnitz
    Beiträge
    440
    Naja ich würde die ganzen Ereignisse aus der Datei auslesen und in einem array speichern. Dann solltest du als Schlüssel den Timestamp haben und als Wert das Ereignis. Nun solltest du einfach das Array sortieren.

    Nunmusste es nur noch an die entsprechende Funktionen schicken und alles sollte gehen. Zumindest von meinem Wissensstand her
     

  3. #3
    JocalAreaNetwork JocalAreaNetwork ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    82
    Habe auch ein Spiel geproggt, mach es so:

    Generell würde ich Forschungen/Truppen- oder Schiffsproduktionen/Gebäude erst fertig werden lassen, wenn der Spieler sich einloggt, bzw in seinem Acc aktualisiert.

    Bei jeder Aktualisierung musst du jedoch im Truppenbewegungstable überprüfen, ob da was passiert ist und - sollte dies der Fall sein, dann chronologisch abarbeiten.
    DANN schaust du, was diese Truppenbewegung besagt, führt sie eine Aktion durch, bei der aktuelle Bestände des betroffenen Accounts betroffen sind, DANN arbeite die Ereignisse ab, lese aus, was fertig wurde und berechne dann z. Bsp den Kampf.

    So sollte es eigtl ohne Probs klappen.
     

  4. #4
    Subwoover Subwoover ist offline Mitglied Platin
    Registriert seit
    Dec 2001
    Ort
    Wien
    Beiträge
    532
    schon nur kann ich nicht aktualisieren wenn sich der Benutzer einloggt.

    Wenn er mal 2 tage nicht reinschaut sollten seine truppen trotzdem kämpfen, seine gebäude und forschungen fertig werden und sich seine einheiten über die karte bewegen.
    Ist eben nur die frage wenn ich nun 1000 bewegte truppen hab, wie ich das bearbeite...

    1 für 1?
    also eine armee ankommen lassen -> kämpfe generieren, nächste einheit kommt an -> wieder kämpfe berechnen so?
    wird zwar aufwendig aber das script und die geschwindigkeit lebt von den usern - je mehr benutzer desto weniger muss jeder einzelne bei einem klick durch ladezeiten einbüßen

    welches game hast du geproggt?
     

  5. #5
    JocalAreaNetwork JocalAreaNetwork ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    82
    Hoi.

    Aaaalso, überleg mal, müssen die Gebäude und Forschungen wirklich fertig werden, wenn keine Einheiten ankommen? Wieso?

    Ansonsten würde ich halt wirklich alle Truppenbewegungen in EINEM Table halten, mehr macht normalerweise ja auch keinen Sinn. Und dieses Table muss halt bei jedem Klick auf abgelaufene Ereignisse abgefragt werden, wie, das siehe mein oberes Posting.

    Und naja, mit 1000 Einheiten meinst du 1000 separat abgeschickt, nicht ein großer Truppenverband von 1k Leutz, oder?

    Ansonsten, zur Anhäufung von Berechnungen, das klappt schon. Alleine mit 100 aktiven Leutz geht das einigermaßen, wenn du mal 500 bis 1000 hast, dann ist das vergessen. Wichtig ist nur eine extrem schnelle Berechnung des Kampfes um zu garantieren, dass wirklich die Reinfolge eingehalten wird. Manche Spiele haben den Fehler Flotten zu überspringen etc, doppelt zu berechnen und son Schmarn. Am besten ein C-Programm dafür schreiben und das dann per PHP aufrufen. *g*

    PS: Mein Spiel ist atm ne Alpha mit rund 50 Leuten, schwer geheim. Sind aber auch erst rund 500kb php-Quellcode.
     

  6. #6
    Subwoover Subwoover ist offline Mitglied Platin
    Registriert seit
    Dec 2001
    Ort
    Wien
    Beiträge
    532
    klingt interessant, also du meinst einfach eintrag für eintrag abarbeiten?
    das wird dann sowieso durch die massen an spielern ausgeglichen

    naja es sollte jeder user + account up2date sein, wenn EIN spieler on ist, da der ja spionage / angriffe etc. an alle spieler durchführen kann und somit die aktuellen informationen nötig sind.

    jo meins ist auch grad in ner testphase, ich progg nur grad erweiterungen und fixe paar bugs auch schwer geheim aber statt 50 leut nur 7
    kannst mir ja mal emailen wie dein game heißt bzw worums da geht
     

  7. #7
    JocalAreaNetwork JocalAreaNetwork ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    82
    Hi,

    lies bitte nochmal meinen ersten Post, da habe ich das beschrieben:

    Es gibt ein Table mit Flotten/Truppenbewegungen, wie immer du es nennst. Diese müssen bei jeder Aktualisierung abgearbeitet werden.
    So, wenn du nur einen Transport durchführst, dann musst du das Ziel ja nicht automatisch updaten, da könnteste einfach Ressourcen adden. Wäre die Aktion aber anstatt eines Transportes eine Spionage oder ein Angriff, dann wird erstmal der Account komplett upgedatet. Dann liest du aus, was da an Gebäuden,Truppen und Forschungen fertig wird, und dann berechnest du den Angriff oder die Spionage.

    Hilft das?
     
    Solange Menschen denken, dass Tier nicht fühlen, müssen Tiere fühlen, dass Menschen nicht denken.

  8. #8
    Subwoover Subwoover ist offline Mitglied Platin
    Registriert seit
    Dec 2001
    Ort
    Wien
    Beiträge
    532
    jap alles klar danke

    ich leg mal los hrhr!
    danke dir...
     

  9. #9
    JocalAreaNetwork JocalAreaNetwork ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    82
    NP, viel Spaß dabei.
     
    Solange Menschen denken, dass Tier nicht fühlen, müssen Tiere fühlen, dass Menschen nicht denken.

Ähnliche Themen

  1. Chronologische Datenzählung mit einer Query
    Von hoctar im Forum Relationale Datenbanksysteme
    Antworten: 9
    Letzter Beitrag: 19.01.11, 11:08
  2. Keine sequentielle Abarbeitung?
    Von usafnetworx im Forum Java Grundlagen
    Antworten: 3
    Letzter Beitrag: 19.07.09, 15:48
  3. Popup mit besonderen Funktionen und Ereignissen
    Von azoo im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 20.02.08, 15:09
  4. Antworten: 3
    Letzter Beitrag: 04.12.05, 19:24
  5. Dreamweaver Mx problem mit Ereignissen
    Von Doofkatze im Forum HTML-Editoren
    Antworten: 1
    Letzter Beitrag: 17.12.02, 13:22