Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

04.01.2013, 19:38

Browsergame mit Hintergrundprozessen

Hi Leute ich hab mal eine neue Richtung eingeschlagen und versuch mich in der Browsergame Welt.
Ich bin noch ziemlich am Anfang meine Projektes aber mir stellen sich schon jetzt eine Fragen.

Im Spiel soll es später darum gehen,ein User hat 1 Kreature und die kann er Füttern, trainieren, Schlafen schicken,,, und noch so typische RPG Sachen.
Die Kreaturen müssen z.b. jede 10. sec aktualisiere werden.

Was ist jetzt wenn ich 1000 User hab und ein update (mit Datenbank auslesen, updaten, schreiben...) kann so 0.5-1 sec dauern.
Dann wird beim 1000. User er was in 100 sec passiert.
Dazu kommt noch die andere Abfragen für die Website,das Login, ...

Jetzt ist meine Aktueller stand so.
Ich update nicht alle 1000 Kreaturen auf ein mal sonder nur Stückchen weise so 10 Kreaturen pro Durchlauf.
Damit noch Rechnerzeit für die anderen Sachen bleibt.

Ich hab mit jetzt überlegt das ganze noch mal zu unterteilen z.b. das bei eingeloggten User das updaten normale dauert und bei ausgeloggten doppelt so lange.
Jetzt müssen nicht alle Kreaturen jede 10 sec. geupdatet werden sondern vll nur jede Minute.
Jetzt ist die Frage ob das Aufteilen nicht zu viel Zeit kostet und es sie lohnt, den es klingt nach vielen SQL-Abfragen.


Jetzt ist meine Fragen wie machen es die Großen Projekte.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »kiba« (04.01.2013, 19:59)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

04.01.2013, 19:48

Schau mal hier:
http://bit.ly/hA9yIL
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

3

04.01.2013, 19:52

Haha BC :D

@Threadersteller: Du kannst das ganze auch ohne Hintergrundprozess lösen, angenommen dein User füttert dein Vieh und dann brauchst es 100 sec zum wachsen oder so einen blödsinn und jede sec geht es halt 1% hoch. der trick: speicher die zeit, an der das teil gefüttert wurde und berechne aus dem zeitoffset den aktuellen fortschritt. die datenbank wird erst aktualisiert wenn a) der prozess beendet ist und b) der user wieder zugreift. Es sollte aber nicht so schwer sein, sich das selbst auszudenken...

Übrigens: Browsergames gibt es wie sand am meer...

Viel Spaß

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

4

04.01.2013, 20:17

@BG habs noch mal überarbeitet.

Das mit den Timer ist ja nicht schwer und es macht auch nichts wenn es statt +1% erst später +5% angezeigt wird.
Es geht mehr darum was passiert wenn es mal mehr als 50%, 100% oder über 100% kommt.
Denn davon sind noch einige andere Dinge abhänig.



Z.b. muss es auch von selber schlafen gehen wenn es müde ist.
Und selbst auch wieder aufwachen.
Jetzt wird es so sein das während es Schlafes z.b. der Hunger langsamer steigt.
Oder wenn es Trainiert und ab einer bestimmt Müdigkeit wird das Training abgebrochen, man z.b. weniger Punkte bekommt. und es geht Schlafen.

Es ist alles von einander abhänig und ich kann nicht einfach so warten bis der User etwas macht, denn es kann sein das während dessen schon etwas passiert ist z.b. das es sich weiter Entwickelt und neue Statuswerte bekommt und somit weniger Hungerzeit braucht.
Oder das es Krank wird und daran stirbt anstatt zu verhungern weil der User nicht da war.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

05.01.2013, 19:07

Kannst du trotzdem genau so lösen. Du guckst wie die Werte beim letzten Zugriff waren un berechnest dann was danach passiert ist. Zum Beispiel ergibt sich, dass deine Kreatur sich nach 2 Tagen und 17 Stunden weiter entwickelt, dann führst du genau das durch und simulierst dann danach die restliche Zeit. Du musst den Updateschritt ja nicht auf einmal machen sondern kannst da Schrittweise vorgehen. Das Updaten muss man nicht immer nur bei eigenem Zugriff machen, sondern manchmal auf bei anderem Zugriff. Möglicherweise sollen andere Leute ihre Kreaturen gegen deine im Kampf antreten lassen. Sobald auch hier auf deine Kreatur zugegriffen wird musst du sie natürlich fix auf den neusten Stand bringen. Im Prinzip hast du einfach keine kontinuierlichen Updates, sondern nur nachträgliche Updates sobald du diese benötigst. Setz doch mal Testweise etwas einfacheres nach diesem System um. Eine vereinfachte Version deiner Kreatur mit weniger Möglichkeiten vielleicht für den Anfang.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

6

11.01.2013, 20:24

Ja so in die Richtung hab ich auch gedacht.
Hab mir schon mal überlegt damit ich nicht jetzt jede sec. updaten muss.
kann ich die Zeit ermitteln oder Vorhersagen wann etwas passieren könnte.
Das kann man dann als factor benutzt muss die Zeit zu beschleunigen.
Dann darum noch eine while-Schleifen paken bis die aktuelle Zeit erreicht wurde.

Aber was ist wenn jetzt wenn eine Kreature lange nicht mehr geupdatet wurde weil der User nicht on war oder es keiner besucht hat.
Dann loggt sich der User irgent wann wieder ein und muss lange Zeit warten bis die Kreature wieder aktuell ist.
So dacht ich mir so ein Hintergrundprozzes wäre da was um es um entlassten.

fkrauthan

Supermoderator

Beiträge: 979

Wohnort: Vancouver

Beruf: Software engineer

  • Private Nachricht senden

7

12.01.2013, 02:13

Ich glaube dir fehlen die grundlagen um so ein Browsergame zu erstellen.
Homepage: fkrauthan.de | Browser-game: flowergame.net

Noctarius

Treue Seele

Beiträge: 120

Wohnort: Düsseldorf

Beruf: Manager of Developer Relations at Hazelcast, Inc. & Consultant for Scaleable Gameserver Systems

  • Private Nachricht senden

8

12.01.2013, 09:13

Ne Bekannte hat neulich toll den Unterschied zwischen "klassischer Gameprogrammierung" (also jede Sekunde alles überprüfen) und einem Event-basierten System (das was Faule Socke meinte) erklärt.

Stell dir einmal vor du hast eine Pizzaria und darin sind 20 Pizzaöfen. Jetzt sind in allen Öfen Pizzen drin und du wartest, dass sie fertig werden. Bei der alten Variante machst du jede Sekunde jeden Ofen auf und guckst ob die Pizza fertig ist. Bei Event-basierten Systemen stellst du dir für jeden Ofen einen Wecker, der dir sagt "die Pizza ist fertig".

Tatsächlich haben wir aber auch bei uns in der Firma Leute die sich mit letzterem Ansatz schwer tun, weil das einfach nicht dem entspricht, was sie in den letzten 20 Jahren programmiert haben.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

12.01.2013, 16:59

Du musst keine Zeit beschleunigen. Sagen wir mal deine Kreaturen können kämpfen und heilen sich nach einem Kampf über einen bestimmten Zeitraum. Sagen wir mal die Kreatur hat 100HP wenn sie volles Leben hat. Sie kann sich mit 10HP pro 5 Minuten regenerieren. Die Kreatur hat nach einem Kampf noch 20HP über. Nach dem Kampf wird nun ein update ausgeführt, sodass in der Datenbank die 20HP gespeichert sind. Wenn jetzt 27 Minuten später eine Anfrage an die Kreatur gemacht wird, wird in der DB geguckt wann das letzte Update war. Jetzt muss die Kreatur natürlich vor der Abfrage noch mal ein Update ausführen. Das letzte Update ist 27 Minuten her, wodurch die Kreatur auf 70HP gesetzt wird. In meinem Fall zählen nur vollendete 5Minuten und nicht angebrochene, das kannst du aber lösen wie du möchtest. So könntest du das jetzt mit allem lösen. Du ermittelst wie oft ein Ereignis eingetreten ist, ermittelst dann die neuen Werte und Bedingungen durch diese Ereignisse und aktualisierst die Datenbank. Stell dir vor du entwickelst ein Tamagotchi, welches nicht immer angeschaltet ist. Du schaltest es ein und das Tamagotchi muss beim starten alles berechnen was in der Zeit geschehen ist, als es ausgeschaltet war. Im Prinzip wäre das das selbe Problem.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige