Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   MySQL Online Spiel! Zeit Problem! (https://www.delphipraxis.net/115756-mysql-online-spiel-zeit-problem.html)

Torley 17. Jun 2008 14:05


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

angos 17. Jun 2008 14:20

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

Sherlock 17. Jun 2008 14:25

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

Torley 17. Jun 2008 15:22

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

angos 17. Jun 2008 15:28

Re: MySQL Online Spiel! Zeit Problem!
 
Zitat:

Zitat von Torley
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

Hi,

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

Sherlock 17. Jun 2008 15:29

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

Torley 17. Jun 2008 15:41

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

Sherlock 17. Jun 2008 15:49

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 d-wars.com so gemacht).

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

mquadrat 17. Jun 2008 15:54

Re: MySQL Online Spiel! Zeit Problem!
 
Zitat:

Zitat von Torley
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!

Ähh nein. Du hast deine Tabelle User. Eine Tabelle mit den Stufen der Gebäude für alle (!) User und deine Log-Tabelle.

Zitat:

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?!
Kommt drauf an wie lang dein Spiel laufen soll. Ggf. kannst du alte Datensätze wieder entfernen, wenn du sie nicht mehr brauchst.

Zitat:

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.
Da hätten deine Spieler glaub ich was dagegen ;) Die Zähler könnten nämlich auseinander laufen, da nicht alle Uhren gleich schnell laufen.

Torley 17. Jun 2008 19:00

Re: MySQL Online Spiel! Zeit Problem!
 
Zitat:

Ähh nein. Du hast deine Tabelle User. Eine Tabelle mit den Stufen der Gebäude für alle (!) User und deine Log-Tabelle.
Das heißt ich soll von jedem spieler alle gebäudedaten(12), alle forschungen(10) und alle Flotten(15) in eine tabelle schreiben, wobei jeder spieler 10 Planeten haben kann!

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 14:25 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz