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

24.02.2013, 16:10

SDL Projekt richtig gliedern

Hey Leute

Habe bis jetzt viel mit der SDL rumprobiert.

Bis jetzt habe ich eine Map, kann mit der Maus Bäume pflanzen und diese mit einem Spieler und den Pfeiltasten abbauen.

Das ganze ist auch schon mit einem Timer versehen.

Ich habe bloss leider ein problem mit der Strukturierung wollte mich jetzt an das erste richtige Spiel wagen.

Weiß halt nicht genau, wie ich das nun Gliedern soll in die einzelnen Hpp dateien.

Habe bis jetzt immer eine Framework hpp benutzt die halt die SDL intialisiert, bloss kommt nacher dann immer Chaos bei raus.

Habt ihr vielleicht ein paar gute Tipps, wie die Planung von nem Projekt als erstes sein sollte, z.b Diagramm oder eine Liste mit Klassen, welche was übernimmt.

Gruß Leri

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

2

24.02.2013, 18:07

Es kommt darauf an was du dir unter Projektplanung genau vorstellst. Da gibt es dann zum einen so Schlagworte wie SCRUM, XP … und was auch immer. Ich denke aber mal, dass du so was nicht meinst ;).

Ich versuch dir aber mal zu antworten so wie es mir bei solchen Problemen hilft. Dein Problem, also die Umsetzung deiner Idee ist ja sehr Komplex. Es macht fast immer Sinn Diese Probleme in Einzelteile zu zerlegen, ob es jetzt eine Idee ist die man versucht auf zu schreiben und zu gliedern oder ein Programm zu schreiben.

Versuch dir vorzustellen was die Eckpfeiler deines Problems sind. Z.B. Eingabe, Ausgabe, Berechnungen usw. Versuch sie so zu formulieren, dass sie möglichst wenige Verbindungen untereinander haben und für sich fast alleine stehen können.

Die Punkte die dann nicht mehr getrennt werden können sind dann deine Schnittstellen, also die Kommunikationspunkte zwischen diesen Eckpfeilern. Jetzt kannst du Dich an die Lösung jedes einzelnen Punktes machen, ist ein Punkt wieder zu Komplex, versuchst du genauso vor zu gehen wie bei dem Gesamtproblem.

Das mag jetzt alles etwas sehr abstrakt ausgesagt zu sein und dir wohl auch nicht so konkret helfen. Jedoch liegt da auch vieles bei dir selbst. Wie in einem Team wo Vereinbarungen getroffen werden müssen um gut miteinander zu arbeiten so musst du dies mit dir im Kleinen allein ausmachen.

Zum Strukturieren können dir dann Hilfsmittel wie Mindmaps oder UML helfen, zu den Themen gibt es aber viel im Netz zu finden.

Unified Modeling Language
Mind-Map
Endlicher Automat
Pflichtenheft
:love: := Go;

3

24.02.2013, 19:50

:) Ok habe soweit alles strukturiert, bloss bin ich immernoch an die verwendung von arrays gefesselt.

Habe jetzt schon über ne stunde in google nach einem Tutorial zu vectoren die maps beinhalten gesucht, und finde nichts wirklich gescheites.

ich möchte halt ne tilemap machen also sprich

map={0,0,0,0,1,0,0,}
{0,0,0,0,1,0,0,};

Arrays sind schön und gut, aber möchte doch lieber mit array arbeiten, leider finde ich in meinem Buch zwar was über Vektoren, aber nichts was jetzt genau halt diese ausfüllung des arrays behandelt.

Möchte ungern jetzt alle array daten einzeln mit push_back in den vektor schieben.

Kennt da vielleicht jemand ein gut und leicht verständliches tutorial?

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

4

24.02.2013, 20:36

Ein Vektor ist immer dann angebracht wenn die Größe sich dynamisch ändern soll. Ein Array (das C++ std::array) benötigt eine konstante Größe. Zum speichern von Bits ist das ++ std::bitset wirklich praktisch. Und auch wenn es mächtig wirkt so nimmt es wenig Speicher in Anspruch.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using std::bitset; // Im Bitset können wir leicht einzelne Bits setzen und löschen, sogar mit Strings.
using std::vector; // Der Vector ist unser dynamischer Container.
                      // es geht auch mit std::array, aber nur wenn wir die Größe wissen. (Constante)

// Ein Vector wird mit einem Bitset erstellt. Das Bitset hat eine Länge von 7 bit.
vector<bitset<7>> bsv( 10 );   // Wir setzen die Anfangsgröße auf 10 Elemente.
bsv[0] = bitset<7>( "1001001" );    // [0] Bitset 0 wird mit einem neuen Bitset befüllt.
bsv[1].set( 0x02 );   // [1] Wird Hex 0x02, Bin 0000010 gesetzt.
bsv.push_back(bitset<7> ( "1111001" ) );   // Ein neues Element hinten dran hängen.

for ( auto x : bsv )  // Wir iterieren über alle Bitsets.
{
   TolleFunktion(x); // Und können hier jedes bitset verarbeiten.
                        // ! unser Vector hat jetzt 11 Elemente ! die nicht veränderten haben auch Werte.
}


std::bitset
std::vector
std::array

Ich hoffe ich hab deine Frage richtig verstanden.
:love: := Go;

5

24.02.2013, 20:44

naja hab mit vectoren bis jetzt nur die grundlagen

ich möchte halt einfach eine map sozusagen darstellen, 0 ist dabei das gras und 1 halt ein weg.

ich hab mir grad deinen code angeguckt und bin entsetzt XD, wie gesagt, in dem Buch wird wirklich nur die grundlagen von vektoren bearbeitet, und nicht wirklich sowas, deswegen bin ich grad davon ein bisschen erschlagen.

Ich guck mir die links mal an, vielleicht bekomme ich ja was hin.

6

24.02.2013, 20:46

eigentlich möchte für die map ja ein zweidimensionales array benutzt werden also so

map[10][10]={
{0,0,0,0,0,0,1,0,0},
{0,0,0,0,0,0,1,0,0},
{0,0,0,0,0,0,1,0,0},
{0,0,0,0,0,0,1,0,0},
}

7

24.02.2013, 21:01

habe halt ein spiel gesehen, und weiß halt nicht, ob derjenige auch tilemap benutzt hat oder nicht b.z.w wie er das gemacht haben könnte

hier das video

http://www.youtube.com/watch?v=0w30dP9qbao

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

8

24.02.2013, 21:15

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using std::bitset;
using std::array;

// Per Value.
array<bitset<10>, 4> bsv1 = {
   0x01,
   0x02,
   0x03,
   0x04,
}; 

// Oder per moveconstructor (kein Kopieren)
array<bitset<10>, 4> bsv2 = {
   bitset<10>("0000000001"),
   bitset<10>("0000000010"),
   bitset<10>("0000000011"),
   bitset<10>("0000000100"),
}; 

if ( bsv2[2][1] ) // Wir fragen mal ein Bit nach. ArrayElement 3 [2], Bit 2 [1].
{
  // Hmm, steht hier ein Baum oder nicht?
}


Das ist etwa die Lösung mit den C++ Elementen die deinem Beispiel entspricht. Ich kann aber verstehen, dass es etwas viel ist. Zumal einiges wie von Geisterhand zu funktionieren scheint. Da hilft dann nur reinlesen wenn man wissen will warum es so funktionier. Benutzen kann man es aber ja schon vorher.

Edit:
Hab mir das Video noch nicht angesehen, aber du solltest bei dir bleiben. Frag dich ob deine Idee mit deinem Vorgehen umsetzbar ist? Denkst du ja, versuch es. Du kannst dabei nur dazu lernen. Es gibt viele Wege etwas zu erreichen. Wer sagt dir denn, dass dein weg nicht sogar besser als der im Video ist? ;)
:love: := Go;

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »H5::« (24.02.2013, 21:24)


9

24.02.2013, 21:24

naja der punkt ist, ich denke schon ein bisschen weiter, sollte ich das ganze jetzt mit einem array versuchen, muss ich vielleicht später alles änder.

Wobei ich denke, lieber einmal ein spiel mehr geschrieben als zu wenig :)

ich möchte erstmal 2d spiele richtig programmieren können und dann mit dem buch von david scherfgen weitermachen, ich denke das ist die beste lösung.

Nur wie ich dann die map jetzt mit dem array besetze und die kollision anstelle ^^ da qualmt mir schon wieder der schädel.

Ich möchte eignt vorerst nur eine map mit einem boden und ein paar steinen wo der Spieler drüberspringen kann, aber halt nicht durch die steine laufen kann :)

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

10

24.02.2013, 21:36

Ich denke wenn du erstmals den Umgang mit einem std::vector übst dann bist du auf der sicheren Seite, später kannst du ja immer noch ein std::array nehmen wenn dir alles etwas klarer ist wie du etwas einsetzt. Der Vektor hat im Übrigen auch eine data() Methode die ermöglicht dir den Zugriff auf die Rohdaten und verhält sich in etwas wie ein c array, aber wenn man es nicht braucht sollte man das auch nicht benutzen.

Was die Umsetzung deiner Vorstellungen angeht so probiere einfach aus, aus jedem Fehler kann man mehr lernen als aus Dingen die man zufällig oder wegen nachmachen richtig macht. Und ums lesen kommt man nicht drum herum. Versuch am besten nicht zu viel zu wollen sonst kann es passieren, dass es dich enttäuscht wenn du nicht so weiter kommst wie du es willst.

Edit:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using std::bitset;
using std::vector;

// Oder per move (kein Kopieren) // nur nicht per initializer list
vector<std::bitset<10>> bsv(4);
bsv[0] = bitset<10>("0000000001");
bsv[1] = bitset<10>("0000000010");
bsv[2] = bitset<10>("0000000011");
bsv[3] = bitset<10>("0000000100");

if ( bsv[2][1] ) // Wir fragen mal ein Bit nach. VectorElement 3 [2], Bit 2 [1]. (alles wie beim std::array)
{
   // Hmm, steht hier ein Baum oder nicht? 
}


So das Ganze noch mal per Vektor, gar nicht so viel anders oder?
:love: := Go;

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »H5::« (24.02.2013, 21:47)


Werbeanzeige