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

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

1

24.09.2014, 18:06

"Blaupausen" speichern

Mein derzeitiges Spiele-Projekt ist jetzt schon ziemlich gross geworden und ist somit das grösste Projekt, an dem ich je gearbeitet habe. In diesem Spiel gibt es viele Gebäude, die gebaut und verbessert(Level 1,2,3...)werden können. Ausserdem gibt es einen Forschungstree, welcher nicht linear ist, also praktisch das Gegenteil von Civilization 5s Forschungssystem. Bisher sind allerdings logischerweise noch nicht alle Features eingebaut.

Die "Blaupausen" der Gebäude habe ich bisher hard gecodet. Mit Blaupausen meine ich die Werte, welches ein neu gebautes Gebäude bekommt, genauso wie die Grundwerte (verbessert durch Gebäudeupdates und andere Einflüsse).

Allerdings frage ich mich, ob es nicht an der Zeit wäre, all diese Werte anders zu speichern. Meine Ideen wären einersets Dateien (Text, Binär oder sonst was) oder eine Datenbank im Hintergrund. Beide haben Vor- und Nachteile. Oder sollte ich doch vielleicht einfach beim hardcoding bleiben? Bei dieser Möglichkeit ist es aber zB schwieriger einen Balancing Patch rauszubringen oder einfach Änderungen durchzuführen ohne die Exe zu bearbeiten.

Könnt ihr mir Empfehlungen geben, oder sonst irgendwie einen Tipp? Wie macht ihr das?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ERROR« (24.09.2014, 18:11)


2

24.09.2014, 18:14

Nimm doch einfach Dateiformate wie INI, oder XML, oder denke dir etwas binäres aus (dazu kannst du ja noch ein kleines Programm schreiben). Dateien sind einfach zu handhaben und du kannst, wie du schon gesagt hast, die Werte einfach ändern. Du kannst auch eine Scriptsprache wie LUA verwenden, um komplexere Berechnungen durchzuführen und das ganze dynamisch halten.

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

3

24.09.2014, 18:21

Wie wäre es mit einem LUA Bind? Klasse Übung und genau für solche Zwecke gemacht, außerdem kannst du darauf direkt aufbauen und noch viel cooleres Zeug machen.
WIP Website: kevinheese.de

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

4

24.09.2014, 19:08

Vielen Dank euch beiden für die Antworten :)

Die Sache mit Lua hört sich sehr interessant an. Bisher habe ich noch nie Skript Sprachen in meine Projekte eingebunden. Ich bin jetzt dabei mich in die Lua Sache einzulesen. Aber eine Frage habe ich dazu: Wofür genau sollte man Lua verwenden? Berechnungen wurden erwähnt und meine "Blaupausen" waren ja die Anfangsfrage. Da ich auch bisher absolut Null Ahnung von der Einbindung von Skriptsprachen habe, könnt ihr mir ein sehr gutes Tutorial empfehlen?

EDIT: In WoW wird das Interface ja auch von Lua geregelt. Sollte ich das vielleicht auch einbauen oder ist das viel zu viel?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ERROR« (24.09.2014, 19:21)


KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

5

24.09.2014, 19:32

Du kannst Lua genau so wie XML & co auch zum Speichern deiner Daten verwenden.
Du kannst also deine Blaupausen in eine Klasse auslagern und von dieser dann, mit Hilfe von Lua, Instanzen erzeugen.

Du kannst natürlich auch XML zum Speichern dieser Daten verwenden und dann Lua nur für Skripts. Aber Lua kann halt das selbe + ein wenig mehr.
Heißt aber noch lange nicht, dass Lua die ultmativ bessere Lösung ist. Allerdings habe ich es vorgeschlagen, weil du mit Lua ein wenig mehr anfangen kannst und es sich imho lohnt sich das anzugucken.
WIP Website: kevinheese.de

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

6

24.09.2014, 19:37

Ich persönlich würde für ein solches Problem ein JSON-Dateiformat empfehlen. Damit kann man sehr kompakt und übersichtlich alle wesentlichen Informationen in einer Datei speichern, die man ohne Probleme auch von Hand erstellen und lesen kann.

XML kann man auch verwenden, halte ich für den angestrebten Zweck allerdings eher für unpraktisch, da deutlich schwieriger lesbar und damit auch deutlich schwerer selbst zu schreiben (da braucht man dann fast unbedingt einen Editor für, weil es 1001 Möglichkeiten gibt, die gleiche Information darzustellen).

Scriptsprache halte ich für absolut überdimensioniert für diesen Zweck. Man kann damit zweifelsohne coole Sachen machen, aber ich persönlich würde bevorzugen Logik und Daten hierbei entsprechend zu kapseln. Beispielsweise kann ich mit einer Scriptsprache die Logik für Abwehrgeschütze mit Lenkraketen schreiben, aber evtl. soll es davon verschiedene Gebäude geben, die die gleiche Funktion aber unterschiedliche Statuseigenschaften haben (beispielsweise Upgrades oder Gebäude verschiedener Fraktionen). Da fände ich es deutlich übersichtlicher die Gebäudeinformationen gesammelt zu haben und die Logik an einem anderen Punkt in Skripten zu beherbergen. Wenn ich die ganzen Eigenschaften nämlich wieder in irgendwelchen Skripten hardcode, habe ich genau das gleiche Problem, das ich eigentlich umgehen wollte.

Deshalb empfehle ich das ganze erst einmal so einfach wie möglich so halten. Wie gesagt wäre mein Ansatz JSON, ich habe in einem älteren Projekt aber auch schon deutlich einfachere Systeme verwendet, die hier vmtl. auch ausreichend wären und einfach Zeile für Zeile Textdateien ausgelesen wurden und entsprechende Statuseigenschaften wurden auf Werte in einer Map gespeichert und später beim Erstellen verarbeitet.

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

7

24.09.2014, 21:37

Werde mir die Möglichkeit mit JSON mal angucken.

Das mit den Verteidigungsgebäuden kommt meinem Spiel schon sehr nahe :D. Ich werde mich dann mal darein arbeiten und probieren diese Art von Logik per Skript zu regeln.

Ich habe derzeit "nur" das online Buch von der Lua Seite zu verfügung. Ist das gut, oder kennt jemand vielleicht ein andere/besseres Tutorial?

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

8

24.09.2014, 21:42

Völlig ausreichend - wie aber Fred schon gesagt hat ist das tatsächlich überdimensioniert. Ich habe es wie gesagt primär wegen der Experimentiermöglichkeiten empfohlen. Wenn es dir erstmal nur darum geht die Blaupausen zu speichern und dann mit anderem Kram weitermachen willst, ist JSON tatsächlich eine sehr gute Wahl. Ich habe damit recht wenig Erfahrung aber es sieht ziemlich gut aus.
WIP Website: kevinheese.de

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

9

24.09.2014, 21:47

Also ich würde sehr gerne beides nutzen.
JSON: für die Blaupausen und halt generell Daten
Lua: würde ich gerne probieren in das Programm einzubauen um damit teilweise die Logik zu scripten.

Ich denke das ist eine gute Möglichkeit Lua zu lernen. Ausserdem kann ich so lernen Script Sprache einzubinden und Teile der Logik "auszulagern".

EDIT: Es handelt sich bei meinem Projekt um eine Art Tower Defense. Ich denke, dass ich dort Skripte besser nutzen kann als hardcoding. Es gibt verschiedenste Tower, die auf verschiedenste Arten agieren und für Dinge wie die Forschung ist Lua denke ich auch eine Hilfe. Ich denke, dass ist Grössenwahn, aber vielleicht schaffe ich ja sogar das Interface á la WoW auf Skripte umzustellen :hmm: :crazy:

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ERROR« (24.09.2014, 21:57)


Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

10

25.09.2014, 11:49

An Lua (oder Python oder JavaScript oder ...) sehe ich nicht als problematisch, dass es für diesen Fall überdimensioniert wäre, sondern vor allem, dass es einfach nur falsch wäre, dafür Lua zu verwenden.
Fred hat es mehr oder weniger schon geschrieben: es sollen Daten gespeichert und zur Laufzeit geladen werden. Lua ist eine Scriptsprache und beinhaltet ausführbaren Code, nicht aber Daten. Man kann zwar in Lua Informationen Hardcoden, aber dennoch sind Lua-Scripte nicht für die Speicherung von Daten gedacht.
Problematisch wird das dann, wenn die Dateien nicht nur geladen werden sollen, sondern bspw. von einem Tool auch erstellt werden sollen. Da Lua-Scripte auch andere Dinge enthalten können, als nur die relevanten Daten, müsste man beim Laden den gesamten Code auswerten, um beim Speichern nichts außen vor zu lassen.

@ERROR:
Im weitesten trifft auch hier wieder "write games, not engines" bzw. "YAGNI" ("You Aint Gonna Need It") zu.
Vielleicht wäre es auch ganz gut, wenn du Lua erst dann einbindest, wenn du es auch wirklich benötigst. Du kannst genauso das verhalten über die von dir verwendete Programmiersprache (C++? C#?) definieren und anhand der gespeicherten Daten entscheiden, welcher Code für den jeweiligen Turm ausgeführt werden soll. Sollte sich wirklich ergeben, dass ein Scripting (bspw. Lua) notwendig ist, weil sich sonst Features nicht umsetzen lassen, dann kann immernoch auf Lua umgestellt werden.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige

Ähnliche Themen