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

MadKat

Frischling

  • »MadKat« ist der Autor dieses Themas

Beiträge: 8

Wohnort: Schweiz

Beruf: Lernt Elektroniker

  • Private Nachricht senden

1

15.11.2013, 12:58

Von C und C# auf C++

Guten Tag zusammen

Das hier ist mein erster Post in diesem Forum, weil mir dieses Forum gefällt (was ich so gelesen habe).
Ich komme aus der Schweiz und mache momentan meinen Abschluss als Elektroniker. In dieser Ausbildung habe ich C für Mikrocontroller gelernt und ausserdem noch ein bisschen "Konsolen-C". Im Moment arbeite ich in einer Abteilung, die Visualisierungen für Beschichtungsmaschinen programmiert. Dies wird mit C# realisiert und ich musste mich zuerst einige Zeit einarbeitet, damit ich jetzt sagen kann, ich verstehe die Grundlagen von C#.

Ich habe vor ca. 2 Jahren angefangen mich für die Spieleentwicklung zu interessieren und habe dann auch viel über C++ u.Ä. gelesen. Ich habe mich ein wenig mit SFML auseinandergesetzt und beschlossen mein eigenes Spiel zu machen. Dies ging soweit auch ganz gut und mein erstes kleines Spiel war Snake mit Tilegrid.

Nachdem dieses Projekt "fertig" (soweit Spiele jemals fertig sind) war, liess ich diese Geschichte ein wenig ruhen. Vor ca. 4 Monaten habe ich das Interesse an der Spieleentwicklung wieder aufgenommen und das Buch C++ für Spieleprogrammierer durchgelesen. Ausserdem habe ich mir ein allgemeines Buch zu C++ angeschafft und viel über Polymorphie, Kapselung, Templates, Pointer usw. gelesen. Danach habe ich das SFML-Buch gekauft und durchgelesen.

Nun wollte ich mich an ein grösseres Projekt wagen (2D Platformer), aber da mein Snake vom Programmierstil eher nach C anstatt C++ aussieht, wollte ich euch mal fragen, wie ihr das macht?

Schreibt ihr den Code, schaut ob alles funktioniert und lagert dann alles in Funktionen und Klassen ab oder erstellt ihr ein Klassendiagramm von A-Z und implementiert dieses? Mir fällt letzteres einfach schwerer.

Mich würde einfach eure Vorgehensweise interessieren, da ich immer noch eher in C anstatt in C++ denke, obwohl es nach der Arbeit mit C# besser geworden ist ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

15.11.2013, 13:04

Schreibt ihr den Code, schaut ob alles funktioniert und lagert dann alles in Funktionen und Klassen ab oder erstellt ihr ein Klassendiagramm von A-Z und implementiert dieses? Mir fällt letzteres einfach schwerer.
Weder noch. Ich nehme mir *ein* Feature der großen Liste, überlege in etwa, wie ich das clustere und schreibe dann den Code direkt in Interfaces und Klassen.
Ein Diagramm von A-Z zu erstellen (siehe "Wasserfallmodell") geht meist in die Hose. Alles nachträglich erst irgendwo rein zu packen ist chaotischer Overkill.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

3

15.11.2013, 13:04

Das ist ein typisches Problem wenn man mit C anfängt und erst später mit einer objektorientierten Sprache anfängt. Ich persönlich mach weder das eine noch das eine, ich schreibe automatisch alles mit Klassen. Aber das geht halt weil ich das so drin habe und manchmal verrenne ich mich natürlich aufgrund mangelnder Planung schon. Verrennen kann man sich aber auch bei prozeduraler Programmierweise.
Ich glaube da hilft einfach nur Übung. Und in C# static Klassen und Methoden vermeiden und erstmal überlegen, ob das nicht ein Designfehler ist (ist es oft, aber nicht immer). In C++ dann das entsprechende.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

4

15.11.2013, 13:24

So we meet again! ;)

Ja es ist nicht ganz einfach an Projekt ranzugehen und ich würde sogar behaupten, dass es unmöglich ist für jemand der noch fast keine Erfahrung hat. Ich denke jeder von uns hat Angefangen in dem er/sie einfach Mal ausprobiert hat. Für meine Maturarbeit hatte ich alles schön auf Papier ausgeplant, am Ende hat jedoch nichts mehr wirklich so gepasst und das ganze schöne Design war für nichts. Auf der anderen Seite hab ich schon öfters einfach drauf los geschrieben und kam dann bald Mal in Probleme wo ein vorheriges Design vieles hätte erleichtern können. Was ich damit sagen will ist, dass man ohne Erfahrung nicht den nötigen Überblick hat was man braucht und was nicht. Man sollte jedoch genügend Geduld haben, den eigenen Code immer und immer wieder zu überarbeiten, auch wenn es mühsam ist, aber nur so lernt man Details fürs Code Design und kann gleichzeitig seien Code kompakter machen.

Ich kann dir mal noch den Artikel von Tank (SFML Forum/IRC #sfml) empfehlen (und natürlich auch die anderen GDD): Game Development Design 2: Good Habits, Techniques and Workflows
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

5

15.11.2013, 13:53

Hallo,

also ich mache es derzeit so, dass ich erstmal überlege was ich für mein Spiel brauche.

Ich mache im Moment etwas mit einer Wegfindung, wo Gegner den Spieler suchen und dieser sich verteidigen muss.

Also war erstmal die Implementierung eines A* Algorithmus gegeben usw.

Schöne Grüße

Fb

6

15.11.2013, 14:27

Schreibt ihr den Code, schaut ob alles funktioniert und lagert dann alles in Funktionen und Klassen ab oder erstellt ihr ein Klassendiagramm von A-Z und implementiert dieses? Mir fällt letzteres einfach schwerer.

Tendenziell das erstere. Natürlich kann man auch beim ersten mal hinschreiben darauf achten, dass er irgendwie "sauber" (ein Wort, das man nicht exakt definieren kann) ist. Aber gerade als Anfänger sieht man dann doch viele Dinge erst, wenn man den fertigen Code vor sich hat. Dann empfiehlt es sich natürlich, ihn nochmal zu überarbeiten und irgendwie schöner zu machen.

Das Problem beim planen ist einfach folgendes: Zahlreiche Probleme treten erst auf dem konkreten Implementierungslevel auf. Natürlich kann man grob planen, welche Klassen man benutzen will und wofür sie zuständig sind, implementiert man danna ber die Details, passiert es oft, dass man auch auf höheren Ebenen Dinge ändern muss oder möchte. Letztendlich ist eine Planung, die alle Details berücksichtigt, das selbe wie eine Implementierung. Berücksichtigt man hingegen nicht alle Details, weiß man nie, ob der Plan später tatsächlich ohne Probleme aufgeht.
Im Grunde genommen steckt da sehr viel Intuition hinter, die man nur durch Erfahrung bekommt. Man kann dann irgendwann auch auf höheren Ebenen Probleme vorausahnen, die man beim implementieren später vermutlich bekommen wird. Darum ist es einfach das beste, was man machen kann, möglichst viel zu üben und zu experimentieren und sich nicht davor zu scheuen, Dinge auch mal umzuschreiben.
Lieber dumm fragen, als dumm bleiben!

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

7

15.11.2013, 15:32

Zitat

Schreibt ihr den Code, schaut ob alles funktioniert und lagert dann alles in Funktionen und Klassen ab oder erstellt ihr ein Klassendiagramm von A-Z und implementiert dieses? Mir fällt letzteres einfach schwerer.
Ich bin mit den Jahren auf eine sehr wirkungsvolle Strategie gekommen, von der ich seit letzter Woche weiß, dass sie einen Namen hat. Es handelt sich dabei um Test-Driven Development (TDD). Die Idee dahinter ist simpel und lässt sich grob formuliert auf drei Schritte reduzieren:
  1. Füge einen einzelnen Testfall hinzu.
  2. Füge ein Minimum an Code hinzu oder ändere ein Minimum, um alle Tests zu bestehen.
  3. Wiederhole den Quatsch so lange, bis das Programm fertig ist.
Als Beispiel könnte man sich dieses Video hier antun. Ist eine ganz bequeme Strategie und hat den Vorteil, dass man sich primär darauf konzentriert, wie bequem das eigene API ist, um ein gewünschtes Ziel zu erreichen, anstatt sich erstmal durch eine Auswahl an Algorithmen und den idealen Datenstrukturen zu kümmern.

Im Übrigen folgen auch Performance-Optimierungen aus der TDD-Strategie, wenn man (wirklich erst sehr spät!) als Test-Bedingung eine maximale Laufzeit oder einen maximalen Speicher-Bedarf für einen Algorithmus hat.

TDD wende ich momentan beim Bau einer Script-Sprache samt VM an. Für mein anderes Projekt ist es ein wenig kompliziert, von oben nach unten zu implementieren.

P.S.:
Von Klassen-Diagrammen usw. war ich im Übrigen nie ein wirklicher Fan. Sie sind ganz süß, um grobe Szenarien zu modellieren, aber sobald es in die Feinheiten geht ist der Aufwand, solche Diagramme zu erstellen, derart groß, dass ich auch gleich von Null an programmieren könnte. Und grobe Szenarien kann ich auch ganz bequem durch Klassen- und Funktions-Rümpfe modellieren, was den Vorteil mit sich bringt, dass ich ein Grundgerüst an Code gleich mit dabei habe.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

MadKat

Frischling

  • »MadKat« ist der Autor dieses Themas

Beiträge: 8

Wohnort: Schweiz

Beruf: Lernt Elektroniker

  • Private Nachricht senden

8

18.11.2013, 09:34

Vielen Dank für eure Erfahrungsberichte.
Ich habe nun gemerkt, dass ich es ähnlich wie ihr mache und das nicht so falsch sein kann :D

@eXpl0it3r Ja genau so hört man sich wieder ;). Ich wusste gar nicht, dass du in diesem Forum auch so aktiv bist. Du belebst wirklich diese Community in der Schweiz :D

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

9

18.11.2013, 10:37

@eXpl0it3r Ja genau so hört man sich wieder . Ich wusste gar nicht, dass du in diesem Forum auch so aktiv bist. Du belebst wirklich diese Community in der Schweiz
Hehe, so riesig aktiv bin ich hier auch nicht, ich versuche vor allem SFML Fragen zu beantworten. ;)
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

Dreat

Frischling

Beiträge: 86

Wohnort: Heilbronn

  • Private Nachricht senden

10

18.11.2013, 18:51

Wenn du schon mit C# arbeitest kannst du dir ja auch SFML.Net anschauen. Ist im Prinzip dasselbe wie SFML für C++ gibt nur minimale Unterschiede(für mich zumindest).
SFML.Net

Werbeanzeige