kostenloser Webspace werbefrei: lima-city


Gebäudesystem für Browsergame

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Hallo zusammen,
    ich habe mir mal vorgenommen, ein Browsergame zu programmieren. Ich habe bereits ein Login und ein Rohstoffsystem programmiert. Als nächstes wollte ich mir das Gebäudesystem vornehmen. Leider fehlt mir im Moment die Idee, wie ich das umsetzen kann.

    Ich habe alle Gebäude in einer Datenbank Tabelle mit Werten wie z.B. Kosten, Produktion, Beschreibung, Bauzeit etc... Meine erste Idee war es, dass die Bauzeit abgerufen wird und in ein neues Tabellenfeld "im_bau" gespeichert wird. Dann soll es so funktionieren wie bei den Rohstoffen. Das heißt es wird ein timestamp der letzten Aktualisierung gemacht und das mit der aktuellen Zeit verglichen und dann werden die produzierten Rohstoffe in Abhängigkeit der Differenz dieser Zeiten gutgeschrieben. Das heißt es wird diese Differenz auch von der Zeit im Feld "im_bau" abgezogen und der neue Wert gespeichert.

    Jetzt weiß ich nicht weiter, wie man es macht, dass wenn die Zeit abgelaufen ist, die Stufe des Gebäudes um 1 erhöht wird. Ich bezweifle das man das mit meiner Idee so umsetzen kann, da man ja nur feststellen kann, ob die zeit abgelaufen ist, wenn man die Seite aktualisiert.

    Also falls ihr auch schonmal ein Browsergame programmiert habt und mir Ideen und Denkanstöße geben könnt würde ich mich freuen.
    Liebe Grüße
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Nunja, da gibt es mehrere Wege.

    Man könnte beispielsweise einen Cronjob benutzen um in festen Intervallen ein Updatescript laufen zu lassen. Ist aber nicht so das wahre.
    Mach dir am besten ersteinmal Gedanken darüber, wann diese Daten interessant sind. Wann musst du die Gebäude level wissen? Immer wenn die Daten benötigt werden rufst du vorher die Updateroutine auf.


    Es gibt wahrscheinlich noch andere Wege, aber nunja, ich glaube nicht, dass die so das wahre sind.
  4. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Ja ich habe mir schon mal Gedanken gemacht, wann ich die Daten benötige. Zuerst habe ich ja gedacht, man brauch die Daten erst beim nächsten Einloggen/Aktualisieren. Aber dann ist mir eingefallen, dass man die Daten eigentlich direkt nach Ablauf der Zeit braucht, da die Rohstoffproduktion ja auch von der Stufe des Gebäudes abhängig ist. Also wenn z.B. ein Gebäude Nachts um 2 Uhr fertig wird soll ab dem Zeitpunkt auch die Rohstoffproduktion entsprechend erhöht werden, und nicht erst am nächsten Morgen, wenn man sich einloggt. Gibt es noch weitere Ideen?
  5. Du musst dir in der Datenbank vermerken ob ein Gebäude existiert bzw. was seine aktuelle Stufe ist (das kann man in einem machen wenn bspw. nicht existierende Gebäude die Stufe -1 bekommen, die Grundstufe für Gebäude 0 ist und jede weitere Stufe den Wert der aktuellen Stufe um +1 inkrementier.)wann ein Gebäude (Aus)Bau fertig ist und ob der (Aus)Bau gerade aktiv ist, und dann lässt du vom Server zyklisch die Datenbank prüfen, wenn bei einem Gebäude die aktuelle Zeit gleich oder größer der Fertigstellungszeit ist dann wird der Eintrag der Gebäudestufe aktualisiert und die Rohstoffberechnung kann beim nächsten Durchlauf ebenfalls mit der aktualisierten Gebäudestufe arbeiten.

    Wie oft du durch die Datenbak laufen musst hängt davon ab wie oft / schnell sich deine Resourcen aktualisieren, am einfachsten ist es solche Sachen mit sogenannten Ticks zu synchronisieren. Um die Rechenlast zu veringern kannst du auch Gebäude die zwar ausgebaut werden können aber keinen Einfluss auf Rohstoffe haben auf irgend eine Art auslagern und mit der Rohstoffaktualisierung nur die relevanten Gebäude prüfen lassen.
  6. g****e

    Ich würd mal sagen, das müsste man vom Eventhändler abhängig machen.
    Du kannst über verschiedene Wege an den Eventhändler ran gehen. Wenn du beispielsweise wie bei XGP oder 2Moons rangehst, hast du kein großen defizit. Hier werden alle 10sek (viel zu oft) der Eventhändler von einem Bashscript aufgerufen. Dadurch sind die Gebäude immer aktuell Gebaut, und du kannst direkt, sobald das Event passiert, die Ressourcen Updaten. Einen defizit von den paar Sek wird keiner merken. Du kannst den Cronjob auch alle 1min, oder sogar 5min, jenachdem was für eine Art von BG sogar alle 15min ausführen lassen, das reicht. Dabei müssen dann die Klicks der Nutzer trotzdem den Eventhändler triggern, es darf nur eine zusätzliche Methode sein.
    Du könntest auch einen Eventcaller schreiben, also ein nebenbei System in C++, Java oder Javascript (NodeJS), bei welchem du die Events registrierst, und wo ein Timeout läuft, welches dann bei einem Event entsprechend den Eventhändler aufruft.

    Du könntest auch sagen "who gives a fugg", und es garnicht erst beachten. Man kann alle drei Methoden nehmen. Vllt gefällts dir ja.

    Liebe Grüße
  7. Hatte das selbe Problem.
    Hab es so gelöst:
    Gebäude werden nur aktualisiert, wenn die Gebäude wichtig sind.
    Wenn ein Ressigebäude aktualisiert wird, werden die Ressis, die nicht produziert worden sind, einfach dazu gerechnet.

    Beitrag zuletzt geändert: 2.1.2013 11:04:10 von unlikus
  8. s**************3

    Hallo,
    ultimate-bravery schrieb:
    ...wenn z.B. ein Gebäude Nachts um 2 Uhr fertig wird soll ab dem Zeitpunkt auch die Rohstoffproduktion entsprechend erhöht werden, und nicht erst am nächsten Morgen, wenn man sich einloggt...

    warum? Es genügt doch völlig das beim nächsten Login entsprechend auszurechnen, also Produktion bis zum Ausbau plus Produktion danach oder auch Produktion auf dem Level vorher über die gesamte Zeit plus Zusatzproduktion seit dem Ausbau.
    Schwierig wird es erst, wenn die Güter parallel wo anders verbraucht werden und es im Lager knapp wird (oder umgekehrt, wenn das Gebäude verbraucht, ob das Lager zwischendurch voll war). Das alles sollte die Aktualisierungsroutine aber in jedem Fall berücksichtigen, man muss aber halt dran denken.
    Zusätzlich sollte man aber auch bei den Spielern, die sich nicht so oft einloggen alles auf den aktuellen Stand bringen, dann sind z.B. Ranglisten aktueller und ein Spieler, der ein paar Tage off war hüpft nach dem Login nicht auf einmal viele Plätze rum.

    LG strommanager

    Beitrag zuletzt geändert: 2.1.2013 14:06:44 von strommanager2013
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!