Autor Beitrag
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Mo 25.08.14 17:26 
Hey Leute,

ich weiß Spieleentwicklung ist kein Kinderkram und alleine sowieso sehr aufwendig, aber ich habe eine - wie ich finde :mrgreen: - nette Idee für ein etwas anderes Tower Defense Spiel.
Grafisch soll es gar nicht so aufwendig werden (weil ich eh nicht zeichnen kann :D), doch zuerst muss mal die Logik funktionieren. Jetzt ist meine Frage wie ich sowas angehe. Ich möchte eigentlich keine Engine benutzen, XNA wäre auch nicht zwingend notwendig.
Hat jemand schon mal was mit TD gemacht und kann mir Tipps geben?
Ich weiß nicht genau wie ich so ein Projekt strukturieren soll.

So wäre jetzt meine Variante:
1. WinForms als Oberfläche (ControlStyles.OptimizedDoubleBuffered)
2. Game Manager (beinhaltet 2 Trheads, einen für Logikupdates und einen zum Zeichnen)
3. Basisklasse GameObject (beinhaltet überschreibbare Methode Update() und Draw())
4. Unterklassen Tower, Units, ... erstellen (abgeleitet von GameObject)
5. Klasse für Karte (Map) erstellen mit Raster, Feldgröße, etc.
6. GameObject, Tower, Units, (Game Manager?), ... Klassen in ein neues Projekt auslagern und als API verwenden (für Erweiterungen)

Wie würdet ihr so etwas aufbauen?

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler


Zuletzt bearbeitet von C# am Fr 29.08.14 16:06, insgesamt 1-mal bearbeitet
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Di 26.08.14 21:06 
Hat keiner einen Tipp oder einen Denkanstoß? Ich wäre für jede Hilfe dankbar. Links sind auch super. Mir geht es erst mal um das Grundgerüst, wie man so etwas angeht. Das soll ja kein professionelles oder gar komerzielles Produkt werden.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 26.08.14 21:42 
Hallo,

vom Prinzip her klingt deine Beschreibung doch schon mal ganz gut (auch wenn sie mich sehr an XNA erinnert).
In WinForms darfst du aber nur im Mainthread die Controls ansprechen (d.h. zeichnen). Daher würde ich dir ersteinmal raten, alles im Mainthread (GUI-Thread) laufen zu lassen. Für regelmäßige Aktualisierungen dann einen Timer benutzen (max. 20-50Hz).
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 26.08.14 21:47 
Ich würde mal grob sagen, dass es kein allgemeines Grundgerüst gibt. Das Grundgerüst passt sich sozusagen den Anforderungen an.
Entweder du verrätst die Idee, oder du musst ein eigenes Vorgehen entwickeln.

Ich selber habe kaum Erfahrung mit Spielen, allerdings habe ich bei der Größenordnung von Snake mir nie Gedanken um die Oberfläche gemacht. Ich habe erst einmal das Spiel "im Speicher" zum Laufen gebracht, also das reine Spiel implementiert.
Erst dann habe ich ein bisschen GUI gebaut, unter der Verwendung des MVVM-Patterns.

Ob das bei größeren Spielen genauso gut passt, kann ich dir nicht sagen, aber ich denke, die zwei größten Punkte bei einem Spiel sind die grafische Oberfläche und das Spiel selber. Beides gleichzeitig zu entwickeln stelle ich mir deutlich schwerer vor und ich denke, dass man Beides auch gut trennen kann, selbst bei komplexen Spielen.


Ich kann dir aber sagen, dass ein Spiel im Prinzip genauso ein Prgramm ist wie jedes Andere auch.
Wenn du eine gute Programmarchitektur erkennen kannst, dann wird dir das auch bei deinem Spiel gelingen, allerdings musst du dafür erst einmal ausprobieren. SOll heißen, mach dir ein paar Gedanken und probiere aus. Schau dir das Ergebnis an und reflektiere während der Arbeit dein Programm und überlege dir, ob es gut ist oder nicht. Neu anfangen kannst du immer noch.
Vermutlich musst du gerade bei Spielen genau so vorgehen, da sie doch sehr komplex sind und viel Erfahrung erfordern. Die kann dir leider keiner erklären, die musst du dir selber aneignen.


PS:
Etwas, das ich bei Datenbanken gemerkt habe:
Anfangs mochte ich das EF nicht, ich wollte immer meinen eigenen OR-Mapper bauen und bin ständig an die Wand gelaufen mit dem Projekt.
Mittlerweile habe ich fest gestellt, dass das Blödsinn war und ich doch lieber das EF nutze und jetzt mag ich es.
Ich könnte mir vorstellen, dass das bei anderen großen Frameworks auch so ist. Probiere erst einmal ohne, dann siehst du, wie schwer es ist und schaue dir dann das Framework an, damit du siehst, wie einfach das doch ist.
Dann macht es auf einmal ganz viel Spaß, sich in ein dickes Framework rein zuarbeiten.
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Di 26.08.14 22:54 
Okay danke. Dann werde ich mal ein bisschen rumspielen. Ich hab vor einer weile mal mit der Unity Engine rumgewerkelt aber dass ist dann doch ne Nummer zu groß :).
Den genauen Spielablauf möchte ich noch nicht verraten. Das wird ne Überraschung :mrgreen:. Aber wenn alles so klappt wie ich es mir vorstelle, wird es ein recht amüsantes Spiel ;)

@TH69
Ich wollte eigentlich nicht mit Controls arbeiten, da diese ja eher Event-basiert sind und das für Spiele nicht ganz optimal ist, oder?
Vielleicht verwende ich UserControls als Container der Szenen (Hauptmenü, Spielszene, ...)

@Palladin
Ja genau das wollte ich auch machen. Zuerst mal die Logik zum laufen bekommen und dann die Grafik.

Ich halte euch auf dem Laufenden.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 26.08.14 23:38 
Zitat:
Ich wollte eigentlich nicht mit Controls arbeiten, da diese ja eher Event-basiert sind und das für Spiele nicht ganz optimal ist, oder?


Du willst dafür Winforms benutzten da ist jede Überlegung darunter ob das mehr oder weniger optimal für ein Spiel ist fast irrelevant.
Es ist ungeeignet. Wie genau du es dann machst ist nur noch ein gradueller Unterschied. Letztlich wird dich Winforms zu irgendwas zwingen damit es irgendwie so leidlich funktioniert.
Du wirst also nicht der sein der die Struktur bestimmt sondern Winforms. Wie das genau aussieht ist kaum vorhersagbar.

Zitat:
Zuerst mal die Logik zum laufen bekommen und dann die Grafik.


Schön gedacht nur Winforms ist hier kein pflegeleichter Mitspieler.
Wenn du unbedingt Winforms benutzen willst empfehle ich dir zuerst die graphischen Direktiven die du brauchst zu programmieren und explizit deren Zusammenspiel zu testen. Davon ausgehend kannst du dir dann überlegen wie man das sauber kapselt um da Logik dran zustricken.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mi 27.08.14 00:37 
So oder so kommst du wohl nicht an XNA vorbei.
Ich habe bisher nicht viel damit gemacht, aber was ich gesehen habe, sah einfach aus.

Du kannst ja mal damit rum spielen und schauen, wie du damit klar kommst.
Wenn du aber versuchst, eine eigene Lösung zu bauen (egal womit), wirfst du dir nur selber ein paar Berge in den Weg.
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Fr 29.08.14 15:07 
Also nach einigem hin und her habe ich mich jetzt doch dazu entschlossen die Unity Engine zu benutzen. Das WinForms nicht geeignet ist sehe ich ein :mrgreen:. Allerdings muss ich mich erst mal wieder reinarbeiten. Ich melde mich, sobald mein Projekt konturen annimmt.
Kennt sich zufällig jemand hier mit Unity aus, dass ich hier nachfragen kann wenn ich Probleme habe?

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Fr 29.08.14 15:10 
Probiere es einfach, wenn es soweit ist.

Es gibt bestimmt den Einen oder Anderen, der da was zu weiß