Einfaches SDL Spiel mit OOP realisieren...

Darian

Erfahrenes Mitglied
Hallo Leute,

ich habe zum C++ lernen ein kleines Spiel programmiert. Und überlege gerade wie ich es sauber machen könnte. Leider habe ich von dem ganzen Software Planung keine Ahnung, und daher fällt es mir schwer das ganze in OOP zu machen.

Hier der Code:
http://nopaste.de/p/aDqy8kqrpb

Zum Spiel:

Es gibt Boden wo man gehen kann und Mauern. Es läuft ein kleines Smily herum, dass Kristalle sammelt. Das ist eigentlich alles. Das Spiel selbst schnell gemacht, aber ich muss einmal anfangen mehr Erfahrungen mit OOP zu sammeln.

Habe begonnen mit einer Map und einer Player Klasse, aber dann bin ich noch so am überlegen eine Controll Klasse die die beiden Klassen benutzt?

Bitte um Infos, da ich es gerne verstehen möchte, und auch in die Richtung denken zu lernen.

lg aus Guatemala, ich freue mich über jede Antwort
Darian
 
OOP ist einfach der Versuch so viele Teile eines Programms wie irgend möglich in sich geschlossen zu halten, ohne dass so ein Teil irgendetwas von ausserhalb braucht.
Das macht Sinn bei riesengrossen Anwendungen, wo man sonst leicht die Übersicht verliert, und wenn 100 verschiedene Funktionen auf die gleichen Flags zugreifen, dann ist das kaum synchron zu halten.
In kleinen Programmen das Ganze via OOP in noch kleinere Teile zu teilen ist ein gewaltiger Aufwand, und auch wenn man es zu Lernzwecken mal probieren kann, heraus kommt dabei ein Programm, was durch die ganzen Umwege die es wegen unsichtbarer Variablen gehen muss viel langsamer läuft, bzw. mehr CPU Zeit braucht als nötig.

Effektiv ist OOP mehr eine Philosophie als ein Plan.
Genau genommen kann man gar nicht sagen, dass man etwas in OOP macht, man behält einfach den Gedanken im Kopf so viel wie möglich von allem Anderen abzuschotten, dann ergibt sich der Rest von alleine.
 
Hallo, und danke für deine Antwort.

Stimmt schon, ich möchte es aber zwecks Lernen dennoch so machen, und dann später vielleicht mehr draus machen. Feind einbauen, ein Menü. Eventuell oben eine Anzeige wieviel Kristalle noch fehlen...usw

Es ist ja ein relativ einfaches Beispiel, nur weiß ich leider nicht wie ich es aufteilen könnte. In welche Klassen?

lg Darian
 
Das Ganze ist ja recht übersichtlich. Man muss nicht alles krampfhaft in Klassen packen, dann kommt nämlich sowas wie Java dabei rum.

Du kannst aber mit dem Gesichtspunkt rangehen:
-Welche Teile deines Spiels haben eine recht enge Verknüpfung mit bestimmten Daten.
-Welche Programmteile würdest du für ein neues Spiel wiederverwenden?
-Gestalte den Code so, dass es DIR leicht fällt, damit zu programmieren. Was nützt einem toller eleganter Code, wenn man sich als Programmierer einen abbrechen muss, um damit zu arbeiten (STL, böser Blick in deine Richtung).

Als Beispiele hast du ja schon den Player genannt. Eine Art Level-Klasse wäre auch nicht schlecht (die die Map beinhaltet und Felder-Setz und -Lese-Funktionen bietet; evtl. auch Laden und Speichern). Wie wäre es mit Spiel-Objekten (ich denke da an bewegte Gegner oder Ähnliches)? Die können in der Map in einer Liste aufbewahrt werden.

Globaler gesehen eine GameApplication-Klasse, die quasi ein Framework für deine Spiele darstellt.
 
also erst einaml wenn du das ganze in 3d realisieren möchtest mach es sehr viel sinn alles in klassen zu packen und auch z.b. wenn du viele gegner hast und auch werschiedene dann verebst du z.b. die klasse enemy an alle weiter z.b. alle gegner brauche leben können sich alle bewegen... und zur planung einfach klasse erstellen und los geht es wenn du schon weißt as es genau werden soll wie die map aussieht...
 
Hallo Leute,

ja mit 3D dauert es schon noch ein bisschen, habe früher schon einmal ein Sonnensystem mit OpenGL programmiert, aber weiß auch nicht mehr wie.

Aber so mit einer GameApplication die dann auf die Player und Map Klasse zugreift, so werde ich es einfach mal probieren, und mein Ergebniss dann natürlich hier posten.

STL? Ich habe das aber mit SDL gemacht. *fragenden Blick in seine Richtung*

Ja ja, das Software Design ist wohl ein sehr kompliziertes Gebiet, mangelt mir da noch an Erfahrung.

lg aus Guatemala
Darian
 
Die STL (Standard Template Library) ist eine Sammlung von unterstützenden Klassen/Funktionen, SDL ist deine Library für die Grafik/Fenster/Sound-Routinen.

Die STL stellt unter anderem einige schicke Container-Klassen zur Verfügung (std::string, std:.vector, std::list, std::map). Die eignen sich sehr gut zum Speichern von zum Beispiel Spiel-Objekten). Die ist von Haus aus bei deinem Compiler in C++ dabei.

Aber einfach alles ruhig angehen lassen, nicht alles auf einmal versuchen :)
 
Hallo Leute, ich weiss es ist schon lange her, aber ich bin gerade mit ein paar PHP Sachen fertig geworden (d.h. fast) und werde daher hier wieder weiter machen.

Danke für die ganzen Infos, ich habe es jetzt mal unter map.h, player.h und GameApplication.h unterteilt.

So wird das jetzt einfach mal probiert, muss ja nicht gleich richtig sein.

Leider kann ich das leere Gerüst schon nicht kompilieren..:-)

lg und danke für Infos
Darian
 
Zuletzt bearbeitet:
Tja, das habe ich jetzt hin bekommen, habe ein paar Schönheitsfehler gehabt :-D

Aber das Problem ist jetzt dass ich cout nicht nutzen kann. Wenn ich nur in gameApplication.cpp das cout nutze, brauche ich ja auch nur dort #include <iostream> inkludieren.

Zumindest hat es bei älteren Klassen die ich vor Jahren gemacht habe so funktioniert.

Werde wohl Morgen mal den genaueren Code posten müssen.

Wenn es viele Files sind, soll ich sie dann verpackt posten, oder wie würdet ihr das machen?

lg aus Guatemala
Darian
 
Zurück