wie speichert ihr die Einheiten (startegie) in die db (mysql)
also ich ahbe schon games gesehen wo jede einheit eine eigene zeile hatte
und wo man nru die anzahl speichert und die stärke etc beim kampf berechnet
was bevorzugt ihr und was hat welche vorteile?
Einheiten(Datenbank)
gepostet vor 18 Jahre, 6 Monate von Kapsonfire
gepostet vor 18 Jahre, 6 Monate von Sh1nto
Das kommt darauf an was du erreichen willst.
bei mir gibt es Flotten, d.h. in einer Zeile stehen alle Einheiten aus diesem Verband. Das macht es natürlich sehr einfach eine Flotte zu verschicken, eine neue Zeile mit den gewünschten Einheiten einfügen, und diese dann aus der Ursprungszeile abziehen. Da alle Einheitentypen fix sind ist es so sehr schnell und wenig aufwand. Und die Wete werden wenn benötigt ausgerechnet.
Speicherst du nun jede Einheit einzeln ab, hast du natürlich vielmehr möglichkeiten, du kannst die Schadenswerte individuell pro Einheit speichern (z.B. für spätere Repaturzeiten der Einheiten, Erfahrungspunkte für die Einheiten, uws.... ), du kannst den Spieler selber Typen basteln lassen, da du sie ja einzeln speicherst. Allerdings musst du dir nun auch überlegen, wie du das mit den Verschicken machst, willst du 10.000 Einheiten verschicken, sind das auch 10.000 Updates (nicht 10.000 Queries) auf die Tabellen. Auch wenn du die Einheiten aus der Tabelle fetchst musst du 10.000 Fetches machen (ich weiß nicht ob es Block-Fetches unter MYSQL gibt)
So macht dieses aus meiner sicht nur sinn, wenn die Spieler die Einheiten selber konfigurieren können und wenn du nicht in Gefahr läufst das hundertausende von Einheiten regelmässig unterwegs sind.
Nachteil alle Einheiten in einer Zeile:
- Ich kann mir nur sehr schwer den Schaden an einzelnen Einheiten merken, da sie ja zusammen gematscht sind.
- Auch individuelle Einheiten sind nicht möglich, da für jeden Einheitentyp eine Spalte benötigt wird.
Vorteile:
- Sehr performant
- einfach zu handhaben
- Auch Riesenflotten haben keine Auswirkung auf die Performance
Nachteil eine Einheit pro Zeile:
- evtl. sehr großes Datenaufkommen
- Viele DB Operation nötig
Vorteile
- Man ist sehr flexibel
MfG
Sh1nto
bei mir gibt es Flotten, d.h. in einer Zeile stehen alle Einheiten aus diesem Verband. Das macht es natürlich sehr einfach eine Flotte zu verschicken, eine neue Zeile mit den gewünschten Einheiten einfügen, und diese dann aus der Ursprungszeile abziehen. Da alle Einheitentypen fix sind ist es so sehr schnell und wenig aufwand. Und die Wete werden wenn benötigt ausgerechnet.
Speicherst du nun jede Einheit einzeln ab, hast du natürlich vielmehr möglichkeiten, du kannst die Schadenswerte individuell pro Einheit speichern (z.B. für spätere Repaturzeiten der Einheiten, Erfahrungspunkte für die Einheiten, uws.... ), du kannst den Spieler selber Typen basteln lassen, da du sie ja einzeln speicherst. Allerdings musst du dir nun auch überlegen, wie du das mit den Verschicken machst, willst du 10.000 Einheiten verschicken, sind das auch 10.000 Updates (nicht 10.000 Queries) auf die Tabellen. Auch wenn du die Einheiten aus der Tabelle fetchst musst du 10.000 Fetches machen (ich weiß nicht ob es Block-Fetches unter MYSQL gibt)
So macht dieses aus meiner sicht nur sinn, wenn die Spieler die Einheiten selber konfigurieren können und wenn du nicht in Gefahr läufst das hundertausende von Einheiten regelmässig unterwegs sind.
Nachteil alle Einheiten in einer Zeile:
- Ich kann mir nur sehr schwer den Schaden an einzelnen Einheiten merken, da sie ja zusammen gematscht sind.
- Auch individuelle Einheiten sind nicht möglich, da für jeden Einheitentyp eine Spalte benötigt wird.
Vorteile:
- Sehr performant
- einfach zu handhaben
- Auch Riesenflotten haben keine Auswirkung auf die Performance
Nachteil eine Einheit pro Zeile:
- evtl. sehr großes Datenaufkommen
- Viele DB Operation nötig
Vorteile
- Man ist sehr flexibel
MfG
Sh1nto
gepostet vor 18 Jahre, 6 Monate von abuzeus
ALs MIttelding lässt sich sicher auch das Fliegengewichtmuster als Datenbankvariante nutzen. Macht nur so viele Zeilen (und damit Updates) wie verscheidene Typen da sind, lässt aber fast alle Flexibilität. Nachteil: Anspruchsvollere Umsetzung.
gepostet vor 18 Jahre, 6 Monate von Störti
Damit der User selbst auch basteln kann, würde ich eine Kombination aus Tabellen vorschlagen.
Einmal die Tabelle FLOTTE bzw. ARMEE, in der die Daten der Armee gespeichert werden (ID, Name, Besitzer, Aktion etc.).
Dann eine Tabelle mit den Einheiten selbst, wo jeder Einheitentyp eine Zeile beschreibt (Typ-Ersteller, Einheitenname, Angriff, Verteidigung etc.). Dort werden nur die Einheiten in allen Einzelheiten definiert, aber keiner Armee zugewiesen.
Das geschieht erst in einer dritten Tabelle, welche dann die drei Spalten ARMEE_ID, EINHEIT_ID und ANZAHL hat. Der Spieler hat so die Möglichkeit, seine Einheiten individuell anzupassen und die Zeilen halten sich doch in Grenzen, da die Einheiten immer gruppert werden (keine 100 Datensätze für 100 Fusssoldaten z.B., sondern nur einer...).
Eine individuelle Schadensberechnung ist damit natürlich auch nicht möglich, aber ab einer Armeegrösse von 100 Einheiten würde ich sowas eh nie empfehlen, da dann das Kampfscript zu lange braucht...
Da zählt auch für den Spieler nur noch die Masse der Einheiten, der macht dann nicht das berühmte "Micro-Battling", wie man es aus C&C-Generals oder so kennt, wo jede Einheit einzeln zählt...
Einmal die Tabelle FLOTTE bzw. ARMEE, in der die Daten der Armee gespeichert werden (ID, Name, Besitzer, Aktion etc.).
Dann eine Tabelle mit den Einheiten selbst, wo jeder Einheitentyp eine Zeile beschreibt (Typ-Ersteller, Einheitenname, Angriff, Verteidigung etc.). Dort werden nur die Einheiten in allen Einzelheiten definiert, aber keiner Armee zugewiesen.
Das geschieht erst in einer dritten Tabelle, welche dann die drei Spalten ARMEE_ID, EINHEIT_ID und ANZAHL hat. Der Spieler hat so die Möglichkeit, seine Einheiten individuell anzupassen und die Zeilen halten sich doch in Grenzen, da die Einheiten immer gruppert werden (keine 100 Datensätze für 100 Fusssoldaten z.B., sondern nur einer...).
Eine individuelle Schadensberechnung ist damit natürlich auch nicht möglich, aber ab einer Armeegrösse von 100 Einheiten würde ich sowas eh nie empfehlen, da dann das Kampfscript zu lange braucht...
Da zählt auch für den Spieler nur noch die Masse der Einheiten, der macht dann nicht das berühmte "Micro-Battling", wie man es aus C&C-Generals oder so kennt, wo jede Einheit einzeln zählt...
gepostet vor 18 Jahre, 6 Monate von Kapsonfire
gut das mein kampfscript auf c++ läuft und mit individuelle schadensberechnung bei 10000 kämpfenden einheiten nru ca. 20 sekunden braucht xD
gepostet vor 18 Jahre, 6 Monate von Störti
Es ging jetzt nicht darum, wie schnell das Script abläuft, sondern wie eine DB optimiert werden soll. Und 10.000 Einheiten als einzelne Datensätze in eine DB zu speichern (die aller EINER Armee angehören), halte ich für SEHR unperformant, da auch viele andere rmeen dabei sind, die die Tabelle dann schnell auf Hunderttausende Datensätze und DAS bringt so ziemlich jedes DB-Programm an seine Grenzen, wenn es suchen soll...
Ausserdem sind 20 sek. nicht unbedingt wenig...
Ausserdem sind 20 sek. nicht unbedingt wenig...
gepostet vor 18 Jahre, 6 Monate von Kapsonfire
du bei 10000 einheiten im kampf und bei 1000 kampfrunden würd ich schon sagen das es relativ schnell geht... ich msus es ja so abuen das script das es den server währendessen nciht allzustark belastet
gepostet vor 18 Jahre, 6 Monate von TheUndeadable
20 Sekunden sind sauviel....
Bei 10.000 Einheiten macht es dann 2ms pro Einheit. 2ms sind etwa 2.000.000 Taktzyklen pro Einheit. Gratulation!
Ein typisches, mir bekanntes Kampfsystem schafft mindestens 1.000.000 Einheiten pro Sekunde (in C++ geschrieben).
Bei 10.000 Einheiten macht es dann 2ms pro Einheit. 2ms sind etwa 2.000.000 Taktzyklen pro Einheit. Gratulation!
Ein typisches, mir bekanntes Kampfsystem schafft mindestens 1.000.000 Einheiten pro Sekunde (in C++ geschrieben).
gepostet vor 18 Jahre, 6 Monate von woodworker
wie realistisch 10.000 kämpfen und was passiert in 2sec alles vorbei
gepostet vor 18 Jahre, 6 Monate von Störti
Original von Browser-Games World
du bei 10000 einheiten im kampf und bei 1000 kampfrunden würd ich schon sagen das es relativ schnell geht... ich msus es ja so abuen das script das es den server währendessen nciht allzustark belastet
Junge, hol dir nen Duden, das hält man ja nicht mehr aus...
Natürlich kannst du gerne sagen, dass ein Script, welches Millionen von Aufgaben in 20 Sekunden erledigt schnell ist (den Unsterblichen ignoriuer ich dabei jetzt mal), aber es geht auch darum, ob es wirklich nötig ist, dass du die Millionen Aufgaben wirklich RECHNEST.
Wenn ich eine Armee mit 10.000 Einheiten habe, interessiert es mich als Spieler einen Dreck, ob davon 1.323 nur noch 10/100 LP haben und 5.259 noch 50/100 HP haben. Ab einer solchen Menge an Einheiten ist es nur wichtig, dass es 10.000 sind, nicht dass die Hälfte fast tot ist, alles andere überfordert den Spieler nur sinnlos und macht das Spiel unnötig kompliziert...
gepostet vor 18 Jahre, 6 Monate von Kapsonfire
lol soll ich die 10 tage lang kämpfen lassen?
bis dahin gibt es 10000 kampfplätze -.-
das tut dem server nur weh
bis dahin gibt es 10000 kampfplätze -.-
das tut dem server nur weh
gepostet vor 18 Jahre, 6 Monate von Störti
Original von Browser-Games World
lol soll ich die 10 tage lang kämpfen lassen?
bis dahin gibt es 10000 kampfplätze -.-
das tut dem server nur weh
2 Interpretationsansätze für woodworkers Kommentar:
1. Es war ein Witz.
2. Du könntest die Anzeige des Kampfberichtes verzögern und die Auswertung zwischenspeichern und den Kampf scheinbar dynamish beliebig zu verlängern. Aber ob sowas überhaupt sinnvoll ist...
gepostet vor 18 Jahre, 6 Monate von Kapsonfire
obs sinnvoll ist genau xD