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

1

20.03.2014, 16:13

Gesucht: Bücher und Grundlagen für rundenbasiertes Strategiespiel

Hallo Zusammen!

Erstmal ganz kurz eine Vorstellung wegen der Höflichkeit:
Ich bin nicht mehr der Jüngste. Ich schätze mal, ich werde locker das Doppelt an Lebensjahren angesammelt haben wie der Durchschnitt der hier teilnehmenden Forumsmitglieder. Sei's drum, das kann ich nicht ändern... ;)
Meine Brötchen verdiene ich mit 3D-Design. Keine Spiele, sondern Infofilme im naturwissenschaftlichem Bereich. Und das seit nunmehr 16 Jahren. Sollte ich jemals in die Verlegenheit kommen, 3D-Modelle für meine Spiel zu benötigen, wird dies also meine geringste Sorge sein.

Meine Erfahrung in Sachen Programmierung sind hingegen eher gering. Vor Jahr und Tag versuchte ich mich in Visual Basic. Zwar konnte ich im Prinzip erreichen was ich mir vorgestellt hatte, aber alles lief so unglaublich zäh und langsam, dass ich meine Versuche schließlich aufgab.
Nichtsdestotrotz hat mich der Wunsch, mich mit der Programmierung von Spielen zu befassen nie so richtig verlassen. Und nunmehr wage ich wieder einmal einen neuen Anlauf...

--

Den ersten konkreten Schritt habe ich getan: Mich hier anzumelden.

Was ich mir nun wünsche, wären ein paar Tipps für sinnvolle Literatur und eventuell nützliche Links. Und zwar, wenn es geht, nützlich im Hinblick auf die Programmierung von rundenbasierten Strategiespielen.

1) Welche Programmiersprache ist am besten geeignet? Ich tendiere zu C++ und dem Buch "C++ für Spieleprogrammierer" (von Heiko Kalista) zum Einstieg, auch wenn C++ wohl am Anspruchsvollsten zum Erlernen ist. Überwiegt die anscheinend allgemein anerkannte Qualität und der sehr konkrete Fokus dieses Buches die höhere Komplexität von C++ gegenüber C#?

2) Gibt es hilfreiche Bücher/Websites zu grundlegenden Programmierstrategien für diese Art von Spielen? Wie werden die Daten am besten organisiert? Welche unterschiedlichen Ansätze gibt es?

3) Gibt es gute Literatur zur KI-Programmierung von Strategiespielen? Insbesondere hier wäre der Fokus sehr wichtig. Tolle Bücher über das Ausweichverhalten von KI-Gegnern bei Ego-Shootern helfen mir nicht weiter.

Über ein paar Antworten, die mir helfen, den ersten (riesigen) Berg an Unwissenheit zu erklimmen, würde ich mich sehr freuen! Oder die mir wenigstens dabei helfen, abschätzen zu können, wie hoch der Berg eigentlich ist...

--

Um das eines klarzustellen: Es geht mir nicht um professionelle Spieleprogrammierung!

Es geht um ein mögliches neues (altes) Hobby. Um die Erweiterung meines Wissens auf dem Sektor der Programmierung. Natürlich gibt es da Ideen, die schon lange im Kopf herumgeistern. Aber sie dienen mehr der Motivation und bieten ein Ziel. Es scheint mir allemal besser, an der Lösung eines konkreten Problems zu arbeiten als ohne Bezug vor mich hinzulernen. Ich hoffe nicht, dieses Spiel jemals fertig zu stellen oder gar zu verkaufen.






======

Nur für diejenigen, die es interessiert (ja, ja, ich weiß... niemanden!), hier ein paar ganz kurze Features meiner Idee:

Mir schwebt ein rundenbasiertes Wirtschafts-, Militär- und Aufbau-Strategiespiel vor, mit...:
• einer ökologisch basierter Ertragsberechnung und Konsequenzen von Übernutzung.
• Planung der Warenlogistik zwischen Herstellungs- und Verbrauchsorten.
• militärischen Einheiten nebst Nachschublinien (eng eingebunden in Warenlogistik).
• "natürlicher" Forschung basierend auf Spielerhandlungen und nicht auf einem Forschungsbaum.

Dieser Beitrag wurde bereits 15 mal editiert, zuletzt von »Deggial« (21.03.2014, 15:28)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

25.03.2014, 13:32

Hey,
etwas spät, aber besser als nie (bezogen auf meine Antwort).
Das mit der Sprache ist immer so eine Sache. Es gibt viele die schwärmen von der einen und viele die schwärmen von einer anderen. Eigentlich soll eine Programmiersprache Mittel zum Zweck sein. Willst du ein Haus bauen würdest du vermutlich zu Stein tendieren. Willst du danach ein Schiff bauen dann wirst du vermutlich eher zu Stahl oder vielleicht auch Holz tendieren. Bei wieder anderen Dingen würdest du wieder andere Werkstoffe nehmen. Jetzt kann man aber nicht immer unbedingt so einfach sagen welche Sprache sich in welchem konkreten Problem am besten eignet. Hinzu kommen persönliche Vorlieben und das Wissen der/des Entwicklers. Möglicherweise ist es interessant auf welchen Plattformen die Software am Ende laufen soll. Im Prinzip könnte man hier Stundenlang weiter reden. Wichtig ist eigentlich nur, vor allem Anfänger neigen dazu dich von ihrer Sprache überzeugen zu wollen (so sehe ich das zumindest). Möglicherweise liegt das daran, dass sie noch keine Vergleichsmöglichkeiten zu anderen Sprachen haben und ihnen die Erfahrung fehlt je nach Problem die passende Sprache zu wählen. Wenn du was über Sprachen liest dann nimm das nicht unbedingt als gegeben hin. Behalte es vielleicht im Hinterkopf und mach dir da später selbst noch mal ein Bild zu. Nun jetzt willst du allerdings erst mal anfangen. Da gibt es verschiedene Wege.
Der Weg über C++ ist natürlich die eine Variante. C++ ist wie du selbst schon gesagt hast nicht unbedingt die einfachste Sprache für den Anfang. Wenn du dir Sprachen vorstellst, dann kann man da ganz gut in Schichten einteilen und denken. Ich vereinfache es mal und nehme Assembler als unterste Ebene an. Diese Sprache ist sehr Maschinennah aber dafür kannst du tolle technische Sachen damit machen. Weiter darüber kommen dann Sprachen die versuchen davon zu abstrahieren. Als Beispiel könnte man C an nächste Stelle stellen. Danach käme dann die C++ Schicht und danach C#/Java. Darüber würde ich dann zum Beispiel Python anordnen. Jetzt habe ich einfach mal ein paar Sprachen genommen und sie in etwa auf die Schichten eingeteilt. Man kann da auch noch viele Zwischenschritte denken aber darum soll es mir gar nicht gehen. Dir ging es ja um C++ und C#. C++ ist etwas näher an der technischen Seite als C#, C# abstrahiert dafür mehr. Das bedeutet im Prinzip nur, C# nimmt dir mehr arbeit ab, die C++ dich selbst machen lässt. Das kann nun gut aber auch schlecht sein. Stell dir das vielleicht anhand von 3D Software vor. C++ sagt du sollst jeden Vertex selbst bearbeiten und C# lässt dich nur die gesamten Strukturen verändern. Das ist ein sehr sehr grober Vergleich, aber vielleicht zeigt er dir grob auf was ich meine.
Ich behaupte du kommst am Ende mit beiden Sprachen zum Ziel. Du könntest dir auch eine andere Sprache wählen und kannst es schaffen. Was jetzt besser oder schlechter ist hängt da auch stark von dir ab. Auch da vielleicht wieder die Analogie zur 3D Software, der eine modelt gerne von Hand und der andere mag sculpting lieber. Beide können am Ende ein schönes Modell erstellen, auch wenn sie möglicherweise stark unterschiedliche Ansätze gewählt haben. Was du lieber magst kann dir schlecht abgenommen werden. Du kannst zum Beispiel einfach mal in Beide Sprachen rein schnuppern und dann spontan entscheiden was dir besser gefällt.
Es gibt aber noch eine weitere Variante. Anstatt den Weg zu gehen und von Grund auf eine Sprache zu lernen und dich langsam zur Spieleentwicklung hinzuarbeiten kannst du auch den direkteren Weg gehen. Es gibt mittlerweile einige Engines bei denen man immer weniger Programmieren können muss. Ein Beispiel wäre Unity. Du hast einen Editor (hat ein wenig was von Maya, auch was teile der Steuerung angeht). Hier kannst du deine Modelle per Drag and Drop platzieren und kannst einiges schon darüber lösen. Programmieren kannst du aber auch. Du schreibst deinen Code in sogenannte Skripte und fügst sie deinen Objekten an. So kannst du für Objekte verschiedenste Verhalten festlegen. Das nimmt dir einiges an Arbeit ab und du musst am Anfang nicht zu viel programmieren.
Vielleicht hast du diesen Weg ja noch nicht betrachtet und vielleicht guckst du dir das ganze ja noch mal an. Ich hoffe ich konnte dir ein wenig weiter helfen.
„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.“

3

25.03.2014, 15:40

Ich kann Schorsch eigentlich nur beipflichten: Ich habe mich letzten Endes für C++ entschieden, weil ich ihre Syntax, ihre Möglichkeiten aber auch ihre Tücken zu schätzen gelernt habe. Ich habe allerdings auch kein Problem mit Java, VB.Net oder C#. Sogar CSIL hzabe ich zusammen mit Assembler mal ausprobiert.

Allerdings war dieser Weg relativ zeitaufwendig, und ich war mir nicht immer sicher, welche Sprache ich am Besten finde. Das kann sich auch von jetzt auf nachher ändern. Momentan scheinst du das Problem zu haben, dass du ja auch Bücher über eine Sprache benötigst um selbige zu lernen, d.h. du musst dich erst entscheiden, bevor du ein Buch kaufen kannst. Mein Vorschlag wäre, dass du dir erstmal anschaust, was du denn programmiertechnisch eigentlich erreichen willst. Du könntest dir beispielsweise die Vorteile von DirectX und OpenGL durchlesen, vllt. kommt dir ja dabei auch schon eine Idee, welche Sprache am Besten geeignet wäre. Dann schaust du dir diese Sprache genauer an. Lass dich allerdings nicht davon überrumpeln, dass C++ so extrem viel schneller ist. Das mag zwar für riesige Spielepublisher relevant sein, für dein Projekt aber wahrscheinlich nicht (Als Beispiel möchte ich an dieser Stelle Sims 3 anführen: EA nutzte C# als Scriptsprache und verfasste sämtliche Routing-AIs, die gesamte SimAI und nahezu alle Spielelemente in C#).

Als Bücher (leider jetzt fast alle auf C++ bezogen) kann ich dir folgende empfehlen. Alle fett unterlegten Bücher sind - wie ich finde - geradezu schon Pflicht, wenn du dich für den gegebenen Bereich interessierst:

Sprachen - Java:
1.a) Jetzt lerne ich Java 7
b) Java 7 Kompendium

Sprachen - C++:
2.a) C++ für Spieleprogrammierer
b) Effective C++

Spieleprogrammierung allgemein (unter Verwendung von C++):
3.a) Gamecoding comlete
b) Game Engine Architecture
c) GameInstitute

4. Gaaaaanz viele Dokumentationen

Mein Senf zu jedem dieser Bücher:
1.a) ist wirklich gut für den Einstieg. Ich habe mich - als ich mich mit Java beschäftigte - nach einiger Zeit nochmal mit diesem Buch beschäftigt, um Grundlegendes zu vertiefen, und fande das Buch wirklich sher gut geschrieben, perfekt für Einsteiger!
1.b) ist dann die gelungene Referenz für Java. Nahezu alles dazu steht hier drin.
2.a) für den Leser schön an die Thematik der Spieleprogrammierung heran, und erklärt auch viele Aspekte von C++ gut verständlich.
2.b) ist für jeden C++ Programmierer einfach das Standard-Buch zur Verbesserung der eigenen Fähigkeiten: Ein Must-Have.
3.a) erklärt viele Aspekte einer Game Engine, und bringt auch nette Ideen mit sich, worauf es in einer Engine ankommt. Außerdem liegt der Quellcode der Schritt für Schritt besprochenen Engine offen, was natürlich zum Selbstlernen anregt. Allerdings hat das Buch das Problem, dass einige interessante Aspekte nicht näher vertieft werden. Aber dafür steigt ja dann auch
3.b) ein. Dieses Buch ist einfach genial. Es erklärt nahezu alle Aspekte eine Game Engine, und alle, die es weglässt, sind nach dieser Lektüre nahezu im Alleingang implementierbar. Es wird zwar relativ wenig Code geschrieben, allerdings ist das Buch voll mit Informationen, und ich finde es ist ein absolutes Must-Have.
3.c) ist, nun ja, etwas teuer, bringt dem Leser allerdings viele, viele Aspekte bei. Gerade an Anfänger gerichtet, kann nahezu jeder noch was hieraus lernen. Ich bin zufrieden mit den Kursen.

Liebe Grüße,
~ EuadeLuxe ~

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

25.03.2014, 15:58

Wenn es darum geht ein Spiel zu schreiben sollte man meiner Meinung nach die Finger von OpenGL und DirectX lassen. Beides setzt auf einem so niedrigen Level an dass man sich extrem viel Verwaltungsarbeit beschert. Wenn man als Entwickler sagt, hey mich interessiert sowas, dann ergibt es Sinn sich das anzugucken. Genau das selbe mit Game Engines. Interessiert mich aus Entwicklersicht wie so Engines aufgebaut sein können, dann kaufe ich mir vielleicht ein Buch zu dem Thema. Will ich aber eigentlich ein Spiel entwickeln, so nehme ich eine fertige Engine. Alleine aus Zeit gründen. Man hat ja das Ziel irgendwann damit fertig zu werden. Und normal kommt es mit dem Alter so, dass man eher weniger Zeit hat sich in alle möglichen Gebiete einzuarbeiten. Selbst mit geeigneten Hilfsmitteln bringen die meisten ihre Spiele nicht bis zum Ende. Wenn man sich dann Arbeit abnehmen lassen kann ist das nichts schlechtes, sondern eher eine Hilfe zum Ziel. Will man sich die Arbeit nicht abnehmen lassen ist das natürlich etwas anderes.
„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.“

5

25.03.2014, 16:58

Natürlich, das stimmt auf alle Fälle. Allerdings dachte ich, er wollte sich die Spieleentwicklung bzw. den Aufbau von Engines anschauen.

Zitat

Wie werden die Daten am besten organisiert? Welche unterschiedlichen Ansätze gibt es?

Ich will aber nicht ausschließen, dass ich da etwas falsch verstanden habe. Wenn dem so ist, dann kannst du meinen Post einfach überlesen, Deggial ;).

Das mit OpenGL und DirectX war eigentlich nur als Beispiel gedacht. Er sollte sich einfach mal alle Möglichkeiten anschauen, die ihm offen stehen, und danach sollte er sich festlegen. Nur die wenigsten nutzen OpenGL und DirectX gleichzeitig. Bei Sprachen mag es zwar so sein, dass man mehrere lernt, aber nicht direkt am Anfang.

6

25.03.2014, 18:24

Die Sprache ist ein Werkzeug, wie schon erwähnt. Da Du nur wenig bis keine Erfahrung zu haben scheinst, empfehle ich eine Sprache auf einem möglichst hohen Abstraktionsniveau (weiter weg von der Hardware). Rundenbasierte Spiele sind nicht zeitkritisch. Geschwindigkeit ist nett, aber nicht zwingend.

Eigene Meinung: Java war mir bisher (1.7) zu unflexibel und ich hatte immer das Gefühl unnötig viel Code schreiben bzw. erzeugen lassen zu müssen.

Zitat

Ich bin nicht der Messias.
Ich sage, du bist es, Herr. Und ich muss es wissen, denn ich bin schon einigen gefolgt.

https://bitbucket.org/bwbg

7

10.04.2014, 17:17

Vielen lieben Dank für eure netten und ausführlichen Antworten!

Ich hatte ja schon gefürchtet, dass nichts mehr kommt (und dann auch nicht mehr geschaut) - weil ich eventuell doch all zu sehr wie einer dieser Phantasten mit zu großen Spielideen aber ohne jegliche Grundlagenkenntnissen erscheine. Ich kann mir durchaus vorstellen, dass es irgendwann ermüdend sein muss, immer wieder den gleichen Zahn ziehen zu müssen, auf die gleichen blauäugigen Anfängerfragen zu antworten.

Ich habe mich inzwischen für C# entschieden. Und zwar weil...
- mir nach weiterem Durchstöbern des Forums und den Codebeispielen dessen Sprachstruktur am sympatischsten (lesbarsten) erschien.
- es anscheinend schnell genug für meine Vorhaben ist. Wobei ich fürchte, dass bei genug Berechnungsarbeit/Komplexität auch ein rundenbasiertes Spiel irgend wann zu langsam werden kann.
- C# den 'Garbage Manager' hat und ich schon im echten Leben meinen Müll nur ungerne runterbringe. ;)
- es diese ansprechende, gut strukturierte und kostenlose Galileo Online-Lehrbuch zu C# gibt.
- ich nicht vorhabe, systemübergreifend zu programmieren, sondern mich gerne auf meinen PC bescheide.

Tatsächlich geht es mir erst einmal und primär um das Erlernen einer Programmiersprache und den sinvollen Entwurf von Programmen. "Zielführende Abkürzungen" wie UNITY sind daher zunächst einmal nichts für mich, denke ich. Allerdings war UNITY durchaus ein weiterer Grund, mich für C# zu entscheiden. Was die Zukunft bringt, weiß man nicht und eventuell habe ich ja später doch noch Lust, mich mit dieser Engine zu beschäftigen.

A propos 'Engine':
Auch wenn die von Dir (@EuadeLux) vorgeschlagenen, allgemeineren Bücher sich eher an C++-Nutzer wenden, werde ich sie zumindest einmal im Hinterkopf behalten. Game 'Engines', also im engeren Sinne die 3D-Programmierung, interessieren mich allerdings weniger. Ich werde völlig zufrieden sein, wenn am Ende kleine 2D-Sprites über meinen Bildschirm wuseln.

Was ich nach wie vor suchen würde, um nochmal auf den Punkten 2) und 3) meines Eingangsbeitrages zurück zu kommen, wären Bücher/Tutorials zur allgemeinen Programmierstrategie. Also nicht, wie bestimmte Probleme als konkreter Code gelöst werden, sondern eher, wie ich meine Daten ganz grundsätzlich am besten organisiere. Was genau ist ein "Spielfeld" eigentlich? Welche Eigenschaften werden dort sinnvollerweise abgelegt, welche anderweitig gespeichert? (Zum Beispiel: Wenn ich irgendwo eine Mine baue, ist es dann sinvoll, deren Ertrag als Eigenschaft des Spielfeldes zu definieren, oder steht dort besser nur ein Verweis auf ein Variablen-Array mit allen Minen im Spiel? Oder ist eine 'Mine' sogar eine eigene Klasse mit Eigenschaften und Methoden?). Welche Strategien gibt es für die Wegfindung? Welche, allgemeine strategische Ziele zu erkennen und zu definieren?
Ich meine damit also ganz prinzipielle Fragen, die sich mit einem grundlegenden Verständnis von Logik und halbwegs zuverlässigem Verstand nachvollziehen lassen, ohne tiefer gehende Kenntnisse einer Programmiersprache zu vorauszusetzen.

Sind die von Dir genannten Bücher in dieser Art? Falls nicht - gibt es so etwas überhaupt? Sind sie grundsätzlich Code-orientiert und daher für mich (noch) zu fortgeschritten? Oder muss sich gar jeder Spieleentwickler diese Grundlagen immer wieder selbstständig erarbeiten, weil sie zu speziell auf die jeweiligen ANforderungen eines jeden Projektes zugeschnitten sind?

--

So viele Fragen.... Aber ich bin auf dem Weg! :)

Inzwischen habe ich ("hurra!") sogar schon mein allererstes Miniprogramm (eine selbst auferlegte Übungsaufgabe) geschrieben und kann nun eine Dezimal- als Binärzahl ausgeben... *hust* :rolleyes:

Nur noch ungefähr eine Millionen weiterer Schritte zu gehen...

Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von »Deggial« (10.04.2014, 17:49)


Werbeanzeige