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

06.02.2019, 12:40

4X RPG - Vorstellung - Benötige Rat

Hallo!

Ich möchte euch heute mein aller erstes Spiel vorstellen, zu dem ich euch herzlichst einladen würde, Kritik zu hinterlassen. Doch eins nach dem anderen.

Ich bin Erik, 22 Jahre alt und wohne in Osnabrück. Ich habe die Welt der Nullen und Einsen vor ca. 7 Jahren für mich entdeckt. Seitdem fühle ich mich in der Sprache C# heimisch. Seit Jahren will ich mein eigenes Spiel entwickeln. Angefangen habe ich vor 2 Jahren mit dem Monogame Framework an einem 2D RTS-RPG-TD Spiel zu arbeiten, in dem auch schon mindestens 300-400 Stunden rein geflossen sind. Da es aber ein Mammutprojekt ist, programmierte ich immer nur Phasenweise an dem Spiel.
Vor 2 1/2 Wochen kam dann spontan die Idee, dass ich für mich und Kollegen das Brettspiel "Siedler von Catan" nachprogrammiere, da wir es auch gerne mal zu zweit mit Computergegner spielen wollen, anstatt immer auf 3-4 Personen angewiesen zu sein. Hier mit fing alles an. Die Idee an sich wurde von mir mittlerweile über Bord geworfen. Ich entschied mich, meine eigene Kreation auf Basis eines 4X Spieles, wie eben Siedler von Catan, zu programmieren. Ebenfalls mit dem Monogame-Framework.

Das Spiel
Der Grundgedanke von Siedler von Catan dient als Basis für mein Spiel. Rohstoffe durch Würfelglück ergattern, Straßen und Siedlungen bauen um noch mehr Rohstoffe zu ergattern und schließlich irgendwann gewinnen. Da ich ein absoluter RPG-Fan bin, wird das Spiel eine Mischung aus 4X und RPG. Bisher ist es möglich Krieger auszubilden, diese zu bewegen und Barbaren sowie die Krieger vom feindlichen Spieler anzugreifen.

Die groben Features beinhalten bisher:
- Bauen von Straßen, Siedlungen, Städte, Krieger
- Bewegen und angreifen von Kriegern oder Barbaren
- Zufallsspawn von Barbarendörfer & Barbaren
- Die Spielkarte wird zufallsartig erstellt
- Gewinn einer Zufallsressource wenn ein Barbar/Krieger getötet wurde
- Anzeige von jeglichen relevanten Informationen
- Speichern und Laden

Besonderheit/meine persönliche Vorliebe:
Ich liebe Brettspiele. Einfach weil wir dann wirklich real am Tisch sind, ein Spiel über Stunden spielen, uns unterhalten. Der Geselligkeitsfaktor ist für mich von großer Bedeutung. Daher ist mein Spiel steuerbar über die Android-App ControllerPC. Mit der App kann man sich, sofern das dazugehörige Programm auf dem Laptop installiert ist, verbinden und seinen eigenen Controller selber bauen. Bedeutet konkret, dass das Spiel via Laptop auf ein Fernseher gestreamt wird und wir sitzen ganz gemütlich auf unsere Couch und nutzen unsere Smartphones um das Spiel zu spielen. Geil!

Vision
Nur kurz erzählt über meine Vision des Spieles. Einen ausgefeilten Plan habe ich bisher noch nicht, da ich noch dabei bin das GUI zu optimieren. Geplant sind aber Features wie: Einen eigenen Helden besitzen, mehrere Einheiten, bestimmte Gebäude wie eine Schmiede zum Craften von Items oder ein Gebäude um andere bestimmte Ressourcen aus den Hexafelder zu generieren, leveln von eigenen Einheiten sowie als gesamter Spieler, Integration von einem Skillbaum (ich liebe Skillbäume! :D), zusätzlicher Gewinn von Ressourcen durch bestimmte Aktionen von Einheiten an Hexafelder, größere Karten über den Bildschirmrand hinaus (scrolling), etc.

Da Bilder mehr sagen als 1000 Worte, hier nun zwei Screenshots vom aktuellen Stand:


Rat/Kritik
Generell bin ich offen für jegliche Meinungen und Äußerungen! Speziell habe ich allerdings zwei Punkte, zu dem ich gerne euer Wissen benötige.
1.: Ich will die App irgendwann ablösen durch eine selbstgeschriebende App. Programmiert, selbst mit dem Monogame-Framework, habe ich auf Androidbasis ebenfalls schon. Doch wie kann das technisch umgesetzt werden? Ich müsste ja irgendwie Kommandos vom Handy (Client) zum Laptop (Server) schicken, der die einkommenden Kommandos verarbeitet. Und da ich eh schon so etwas vor habe, will ich gleich auch noch spielerspezifische Inhalte auf die jeweiligen Smartphones auslagern, wie z.B. Anzahl der eigenen Ressourcen. Die Daten kann ich ja einfach von meiner Datenbank abrufen, doch wie soll die Kommunikation von statten laufen zur Steuerung des Spieles?
2.: Ich habe noch nie jemanden einen Einblick in meinem Quellcode verschafft. Dementsprechend habe ich die Sorge, dass ich mich, in Punkto Fähigkeiten des Programmierens an sich, nicht wirklich weiterentwickle. OOP sagt mir natürlich etwas, doch in wieweit nutze ich diese geballte mögliche Kraft von OOP? Beispiel: Meine Klasse 'World' in der fast alles von statten geht, hat mittlerweile knapp 2000 Zeilen Code, ca 35 Eigenschaften und abgesehen von Getter und Setter, ca 50 Methoden die ich auch noch mit #region und #endregion in 8 Themenbereiche unterteilt habe. Ich habe einfach absolut keine Ahnung ob ich es mir in manchen Bereichen viel zu schwer mache obwohl es viel einfacher gehen würde. Wie könnte mir da geholfen werden und wie würde das aussehen?

Vielen Dank für's durchlesen und noch einen schönen Tag,
Erik

2

06.02.2019, 15:35

Zitat

2.: Ich habe noch nie jemanden einen Einblick in meinem Quellcode verschafft. Dementsprechend habe ich die Sorge, dass ich mich, in Punkto Fähigkeiten des Programmierens an sich, nicht wirklich weiterentwickle. OOP sagt mir natürlich etwas, doch in wieweit nutze ich diese geballte mögliche Kraft von OOP? Beispiel: Meine Klasse 'World' in der fast alles von statten geht, hat mittlerweile knapp 2000 Zeilen Code, ca 35 Eigenschaften und abgesehen von Getter und Setter, ca 50 Methoden die ich auch noch mit #region und #endregion in 8 Themenbereiche unterteilt habe. Ich habe einfach absolut keine Ahnung ob ich es mir in manchen Bereichen viel zu schwer mache obwohl es viel einfacher gehen würde. Wie könnte mir da geholfen werden und wie würde das aussehen?

Aus eigener Erfahrung kann ich sagen, dass es sehr schwierig ist ein Spiel unter verwendung von Prinzipien und Pattern zu entwickeln. Gerade als Anfänger verzettelt man sich meistens dabei wenn man versucht konsequent damit zu entwickeln. Daher würde ich an deiner Stelle den Code gar nicht unter diesen Gesichtspunkten bewerten. Wichtig ist in erster Linie, dass der Code wartbar ist (also Fehler schnell gefunden werden und neue Features unkompliziert dazukommen können).
Du hast deinen Code ja schon in Regionen unterteilt. Eventuell kannst du die Regionen in eigene Klassen auslagern und diese über Komposition wieder in der 'World' verwenden. Dann wird der Code übersichtlicher und du wirst schnell merken welche Abhängigkeiten die Regionen untereinander haben. Hier helfen dann Techniken wie Dependency Injection und Entkoppelung z.B. durch Interfaces. Generell sind Getter und Setter in OOP ein Antipattern. Besser ist es sich zu überlegen, welche Dienstleistung eine Klasse für andere Klassen anbieten kann anstatt interne Informationen nach außen zu geben.

Spieleentwicklung an sich ist schon schwierig genug. Daher fokusiere dich erst einmal auf ein Ergebnis (dass irgend Etwas überhaupt funktioniert). Meistens muss man Dinge erst einmal zu kompliziert Lösen um darauß lernen zu können. Gerade in den ersten Jahren lernt man auch schneller als die Projekte sich entwickeln können. Daher verliert man meistens das rennen den Code sofort an die neusten Erkenntnise anzupassen (z.B. OOP).

3

06.02.2019, 17:07

Vielen Dank für deine Ansicht!
Gut wartbar ist es bisher, ja. Dank den Regionen weiß ich eigentlich sofort in welcher Kategorie ich schauen muss wenn Problem X auftritt. Dank kompletter Kommentierung der Methoden muss ich dann auch nur, wenn überhaupt, mir eben diese durchlesen und ich weiß bescheid was Sache ist. Inwiefern die Integration von neuen Features problemlos klappt, bleibt erst einmal abzuwarten. Das wäre nun das, was ich als nächstes vorhabe, da ich mit der Überarbeitung von dem GUI erst einmal durch bin.
Die Punkte dass ich einzelne Regionen durch Klassen auslagern kann sowie alles weitere was du danach geschrieben hast, werde ich mir mal anschauen. Da geht bestimmt etwas.

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

4

06.02.2019, 17:46

Auslagerung in Klassen ist immer eine gute Idee. Besonders dann, wenn diese unabhängig verwend- und erweiterbar sind.

Ich hab mir für unser aktuelles Projekt (auch mit MonoGame übrigens) ein eigenes UI-System gebaut und immer wieder erweitert. Angefangen hat es mit einer Klasse die weißen Text auf schwarzem Grund angezeigt hat. Mittlerweile sieht das so aus:

(Link)



Worauf ich hinaus will, du kennst deinen Code am besten, und daher kannst du selber auch beurteilen wo dir die Struktur zu starr vorkommt, oder unsauber. Welche Teile kannst du wiederverwenden? Hast du manches doppelt? Usw.

5

09.02.2019, 13:29

Das sind alles sehr gute Fragen. An einigen Stellen habe ich schon das Gefühl, es kommt mir zu starr vor. Deine Übersicht hilft mir schon, zumindest gibt das mir einen Gedankenstoß wie ich etwas anders und besser machen kann.

Btw bin ich hier überhaupt im richtigen Bereich? Bin mir da gerade etwas unsicher. :hmm:

Werbeanzeige