![]() |
MySQL Online Spiel! Zeit Problem!
Moin,
Ich werd bald meine Ausbildung als Fachinformatiker für Anwendungsentwicklung anfangen! Um schonmal ein wenig zu üben will ich ein Online Spiel mit Delphi basierend auf eine MySQL Datenbank schreiben. Es vorerst ganz schlicht sein mit wenig funktionen. Jedoch hab ich eine Denksperre im Kopf und hab keinen schimmer wie ich den Faktor Zeit richtig umsetz! Das heißt: Wenn der Spieler ein Gebäude baut und das Spiel ausmacht, soll es trotzdem in der datenbank als fertig dargestellt sein damit mögliche angreifer es auch als fertig sehen. Zusätzlich sollen die Rohstoffe die man durch dieses Gebäude bekommt zusammen mit den normalen rohstoffen auch sichtbar sein wenn ein angreifer oder gar der spieler selbst wieder kommt. Wenn ich die Rohstoffe im Programm zb mit einem Timer erhöhe, werden sie nicht weiter erhöht wenn der benutzer offline geht! Das heißt man bekäme nur Rohstoffe wenn das Programm an wär! Bis jetzt hab ich nur das login realisert. Es gibt eine tabelle in der alle user stehen! jeder user hat dann eine weitere tabelle die die id als namen hat! Ich bin mir nicht sicher ob diese variante schnell ist, weshalb ich auch hier vorschläge bräuchte! jedoch ist das zeit problem wichtiger! Ich hab daran gedacht die Zeit (datum) es ausloggens in die datenbank zu schrieben! Wenn nun wemand auf die daten zugreift bei einem angreifen, wir in einer Prozedure im Programm die fehlenden Rohstoffe von den Datum bis zu dem Zeitpunkt es neueinloggens oder spionierens nachgerechnet! Dann hat man jedoch wieder das problem mit den dazugebauten gebäuden! Als vorbild für dieses Programm dient das spiel spaceinvasion! Es soll eine Art demo werden in der man den besten anfang testen kann! Ich freu mich über jeden lösungsansatz! Achja ich benutze DirectMySQL! mfg Torley |
Re: MySQL Online Spiel! Zeit Problem!
hi,
du musst doch eigentlich nur den Zeitpunkt der jeweils letzten Aktion festhalten. BeispielAblauf: Spieler Angos fängt mit dem Spiel an 08:00 DB-Eintrag: Spieler Angos Startressourcen 2000 08:00 DB-Eintrag: Spieler Angos Ressourcen/Stunde 200 08:00 SPieler Angos baut/erweitert Ressourcensystem für 1500 Ressourcen 08:00 DB-Eintrag: Spieler ANgos Ressourcen 500 08:00 DB-Eintrag: Ressourcensystem fertiggestellt um 10:00 10:00 Ressourcensystem fertiggestellt. 10:00 DB-Eintrag: Ressourcen Spieler ANgos = 500 + 2 * 200 = 900 10:00 DB-Eintrag: Spieler Angos Ressourcen/Stunde 300 ... ... Das ist natürlich nur ein grobes System. Du musst halt darauf achten, wenn sich das Einkommen je Stunde erhöht, einmal den Wert wegzuspiechern. Ansonsten Einfach den Wert errechnen Gruß Angos |
Re: MySQL Online Spiel! Zeit Problem!
Du musst serverseitig ein Programm laufen lassen. Nicht nur während ein Anwender angemeldet ist. Das ist dann die große Herausforderung. Denn Browserspiele haben leicht mehrere hundert Spieler, und da den Server nicht unnötig zu belasten ist eine Kunst.
Ich schau mal ob ich was weiterführendes zu dem Thema finde. Und das von Angos hört sich auch gut an :D Edit: Angos Methode hat einiges für sich. Du sparst Dir tatsächlich einen Serverprozess und es ist eigentlich ziemlich einfach. Beim Login eines Spielers errechnest Du einfach aufgrund der Logs den aktuellen Resstand. Sobald ein fremder Spieler auf diesen Spieler "zugreift" (per Angriff, Spionage, was weiss ich) musst Du halt auch aktualisieren. Ziemlich cool. Edit2: Genauso machst du das auch mit Gebäuden, Einheiten, Forschungen etc. Sherlock |
Re: MySQL Online Spiel! Zeit Problem!
ich denk die erste idee ist einfacher, weil zur zeit der server nur auf meinem pc lokal ist und ich will ja ncht andauernt ein programm am laufen haben!
das heißt ich muss jetzt eine weitere tabelle für jeden spieler haben wo die rohstoffe und die gebäudeproduktion drinn stehen! Torley |
Re: MySQL Online Spiel! Zeit Problem!
Zitat:
nein nicht ganz. Du brauchst genau EINE weitere Tabelle. Nicht eine pro Spieler. Das läßt sich sonst später fast gar nicht mehr realisieren. (stell dir mal vor du würdest alle tabellen für 1000 Spieler anlegen müssen ;) ) Du speicherst in der Tabelle: ID // Fortlaufende Nummer Zeitpunkt Aktion // Das was passiert ist Wert // z.B. bei Aktion: RessourcenSetzen: 2000 Spieler // Die Nummer des Spielers. Das ganze kann man dann nach belieben ausbauen, erweitern |
Re: MySQL Online Spiel! Zeit Problem!
Ich hab Dich hoffentlich missverstanden ;) Du wirst jetzt nicht für jeden Spieler eine neue Tabelle anlegen, oder?
Das solltest Du anders lösen. Zum Programmlauf sollten in der Regel eher selten neue Tabellen angelegt werden. Sherlock |
Re: MySQL Online Spiel! Zeit Problem!
ok dann halt eine neue für alle!
das heißt ich hab jetzt tabelle user, für jeden user eine tabelle in der die stufe der gebäude und so stehen und eine log tabelle in der die aktionen stehen! wird diese log tabelle nicht zu groß? wenn ich für jeden spieler aus dieser tabelle die daten holen muss, es 12 gebäude gibt und 4 vershciedene rohstoff arten?! das heißt ich muss eine procedure schreiben die die daten aktualisiert fals darauf zugegriffen wird! wenn nun aber im spiel eine übersicht der rohstoffe sein soll die sekündlich wachsen kann ich das nicht über den server laufen lassen! das heißt ich brauch im spiel einen timer der am start die rohstoffe aus der tabelle holt und dann selber immer erhöht. erst wenn ich ein gebäude bau wird überprüft ob die summe der rohstoffe stimmt.?! mfg torley |
Re: MySQL Online Spiel! Zeit Problem!
Ich kenn jetzt ad Hoc kein Spiel, bei dem Rohstoffe sekündlich wachsen. Es ist in der Regel so, daß alle 15 Minuten aktualisiert wird (zB bei
![]() Zu den Tabellen: Mal sie Dir halt mal auf und schau ob alles drinsteht, was Du Dir so vorstellst. Dann überleg, wie die zusammen passen, ob Du eindeutige Zuordnungen zwischen den Tabellen hinbekommst. Dann hast du fast schon ein Datenmodell ;) Sherlock |
Re: MySQL Online Spiel! Zeit Problem!
Zitat:
Zitat:
Zitat:
|
Re: MySQL Online Spiel! Zeit Problem!
Zitat:
Das macht bei 100 Spielern a 10 Planeten a 12 gebäude, 10 forschungen und 15 flotten =3700 datensätze?! ist das nicht ein wenig zu viel?! Ich mein, es wär viel einfacher für jeden spieler eine tabelle mit 10 datensätzen zu schreiben in denen alles steht! das macht dann bei 100 spielern 100 tabellen mit 10 datensätzen = 1000 datensätze !? MFG Torley |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz