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

Rushh0ur

Frischling

Beiträge: 67

Beruf: Student Elektrotechnik

  • Private Nachricht senden

11

05.04.2011, 18:58

drakon, ich glaub du hast die Frage nicht verstanden.

Er hat ein MAP-Array und will durch verschiedene Funktionsaufruf neue Daten zu weissen.

Mfg Rushh0ur

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Rushh0ur« (05.04.2011, 21:03)


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

12

05.04.2011, 20:15

Sicher? - Das oben sieht mir sehr stark nach einer Initialisierung aus und dass er die Map zur Laufzeit so verändern will kann ich nicht finden.

13

05.04.2011, 20:27

Ich kann ja mal einfach alles posten was ich habe :D

Game.hpp

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
24
25
26
27
28
29
#ifndef GAME_HPP
#define GAME_HPP

#include "Sprite.hpp"

class CGame
{
    public:
        CGame ();

        void Init               ();
        void Run                ();
        void Quit               ();

    private:
        void ProcessEvents      ();
        void Tilemap            ();
        static const int map_breite = 20;
        static const int map_hoehe = 20;
        static const int tile_breite = 40;
        static const int tile_hoehe = 40;
        static const int sprite_anzahl = 2;
        CSprite *map_sprites[sprite_anzahl];
        int tilemap[map_hoehe][map_breite];
        bool     m_bGameRun;            // Läuft das Spiel noch?

};

#endif


Game.cpp

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include "Game.hpp"

// Konstruktor
//
// Aufgabe: Allgemeine Initialisierungen
//
CGame::CGame ()
{
} // Konstruktor

// Init
//
// Aufgabe: Spieler, Hintergrund und Asteroid initialisieren
//
void CGame::Init ()
{

    Tilemap();

    // Grafiken laden
    map_sprites[0] = new CSprite;
    map_sprites[0]->Load("Texturen/boden.bmp", 0, 40, 40);
    map_sprites[1] = new CSprite;
    map_sprites[1]->Load("Texturen/wand.bmp", 0, 40, 40);

    // Spiel läuft
    m_bGameRun = true;
} // Init

// Quit
//
// Aufgabe: Instanzen freigeben
//
void CGame::Quit ()
{
    delete map_sprites[0];
    map_sprites[0] = NULL;
    delete map_sprites[1];
    map_sprites[1] = NULL;
} // Quit

// Run
//
// Aufgabe: Hauptschleife des Spiels
//
void CGame::Run ()
{
    // Hauptschleife des Spiels durchlaufen
    //
    while (m_bGameRun == true)
    {
        // Events bearbeiten
        ProcessEvents ();

        // Framework updaten und Buffer löschen
        g_pFramework->Update ();
        g_pFramework->Clear ();

        for( int i = 0; i < map_hoehe; i++)
        {
            // alle zeilen durchlaufen
            for( int j = 0; j < map_breite; j++)
            {
                    // boden zeichnen
                map_sprites[tilemap[i][j]]->SetPos(static_cast<float>(j*tile_breite), static_cast<float>(i*tile_hoehe));
                map_sprites[tilemap[i][j]]->Render();

            }
        }

        // Buffer flippen
        g_pFramework->Flip ();

    }

} // Run

// ProcessEvents
//
// Aufgabe: Events bearbeiten
//
void CGame::ProcessEvents ()
{
    SDL_Event Event;

    // Gab es ein Event?
    if (SDL_PollEvent (&Event))
    {
        // Ja, also schauen welches
        switch (Event.type)
        {
            // Beenden?
        case (SDL_QUIT):
            {
                m_bGameRun = false;

            } break;


            // Wurde eine Taste gedrückt?
        case (SDL_KEYDOWN):
            {
                switch (Event.key.keysym.sym)
                {
                case (SDLK_ESCAPE):
                    {
                        // Ja, also Spiel beenden
                        m_bGameRun = false;

                    } break;
                }
            } break;
        }
    }

} // ProcessEvents

// Tilemap
//
// Aufgabe: Aufbau der Tilemap
//
void CGame::Tilemap()
{
    // die map
    int mapdata[map_hoehe][map_breite] =
    { 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};

    memcpy(tilemap, mapdata, sizeof(tilemap));
}

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

14

05.04.2011, 20:36

Ja. Das sieht eher nach Initialisierung aus, als nach wirklicher Veränderung des Arrays. ;)

Also. Sofern du das Array wirklich so statisch haben willst (und nicht eher von einem File laden oder so), dann würde ich das Array nicht in der Klasse speichern, sondern rausnehmen. Also das "extern tilemap", dass ich oben geschrieben habe aus der Klasse nehmen und sonst im Header lassen. Dann kannst du im .cpp File (ausserhalb der Klasse) die Initialisierung mit dieser Zuweisung machen.
Ist auch nicht gerade das schönste, was man machen kann, aber bei einem kleinen Projekt spielt es nicht so eine Rolle.
Von dem her könntest du das auch so lassen, wie dus schon jetzt hast, aber naja. Hab dich trotzdem richtig verstanden. ;)

Das nächste mal wär es gut, wenn du ein kleines Testprojekt machen kannst, damit wir ein vollständiges Beispiel haben. Dann kann man solche Fragen auch schneller beantworten.

Rushh0ur

Frischling

Beiträge: 67

Beruf: Student Elektrotechnik

  • Private Nachricht senden

15

05.04.2011, 20:37

@drakon (Sry, so wie Drache auf RU?)
Ja ich weiß das macht eigentlich nicht wirklich sinn.

@Chris13
Im prinzip wäre es sinnvoler die Map-Daten aus einer externe Datei zu laden, zB. Textdatei.
Aber solange du es so besser kannst und richtig machst und es läuffähig ist kannst du es auch so machen.

Mfg Rushh0ur

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Rushh0ur« (05.04.2011, 20:44)


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

17

05.04.2011, 20:54

mhh ich hab noch nie was aus einer Datei geladen :D. Das ist mein Testprojekt ich habe bis jetzt nichts außer die Tilemap drin das einzige was ich verändert habe ist das Game.hpp und cpp und die Main das das Framework passend Initialisiert wird. Das extern tilemap aus der Klasse nehmen würde doch bedeuten das es Global ist?

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

18

05.04.2011, 21:00

Das extern tilemap aus der Klasse nehmen würde doch bedeuten das es Global ist?

jup, wenn du die map konstant machst ist das nicht so wild.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Rushh0ur

Frischling

Beiträge: 67

Beruf: Student Elektrotechnik

  • Private Nachricht senden

19

05.04.2011, 21:02

Wenn du dich darüber schlau machen willst kannst dir ja mal fstream anschauen.

@drakon
Sry, hab mich jedesmal vertippt, habs geändert. ;)

Mfg Rushh0ur

20

05.04.2011, 21:02

Heißt es nicht immer man sollte auf Globale Variablen verzichten.

Werbeanzeige