Hilfe^^



  • Hi Leute!

    Ein Kumpel von mir und ich wollen ein Spiel programmieren, sind aber noch ziemliche Newbies und machen relativ viele Fehler. So haben wir versucht ein 2D-Programm zu erstellen, was ziemlich in die Hose ging, da der Compiler mindestens 10 Fehlermeldungen ausgegeben hat. Vlt kann uns jemand helfen.
    Hier die Quellcodes:

    Leveleditor.h

    //*********************                  Level.h            ****************************//
    //  This class manages the 2D Levels of the Engine                                      //
    //**************************************************************************************//
    
    //Include files
    #include <iostream>
    #include <fstream>
    Anzeigen
    
    #include <vector>
    
    //Saves the stuff
    struct LevelData
    {
        unsigned int iMapID;
        unsigned int iWidth;
        unsigned int iHeight;
    };
    
    //Saves the informations if its a teleport field
    struct TeleportField
    {
        int iMapID;
        int iTargetWidth;
        int iTargetHeight;
        int iTeleporttype;
    };
    
    //Saves the field informations
    struct MapField
    {
        char* strBitmapName;
        TeleportField Teleport;
    };
    
    //This class manages the 2D Levels
    class Level
    {
        public:
    
            //Initialize the class
            void Init(LevelData *pLevelData)
            {
                this->Init(pLevelData,"",0,0);
            }
    
            //Initialize the class
            void Init(LevelData *pLevelData,std::string strStandardFilename,int iWidth, int iHeight)
            {
                m_pLevelDatas = pLevelData;
    
                m_pLevelDatas->iWidth    = iWidth;
                m_pLevelDatas->iHeight    = iHeight;
    
                if(iWidth && iHeight)
                    this->MakeNewMap(iWidth,iHeight,strStandardFilename);
            }
    
            void SetSizeOfMap(int iWidth, int iHeight)
            {
            }
    
            //Makes a new map (deletes all old datas)
            void MakeNewMap(int iWidth, int iHeight,std::string strStandardFilename)
            {
                m_pLevelDatas->iWidth    = iWidth;
                m_pLevelDatas->iHeight    = iHeight;
    
                //Clears it if there is already a version
                if(!m_bMap)
                    m_bMap = true;
                else
                {
                    //Resize it an sets it 0
                    for(int i = 0;i < m_pLevelDatas->iWidth;i++)
                        m_MapField[i].clear();
    
                    m_MapField.clear();
                }
    
                //Creats iWidth elements
                m_MapField.resize(m_pLevelDatas->iWidth);
    
                //Creates for each iWidth element iHeight elements
                for(int i = 0;i < m_pLevelDatas->iWidth;i++)
                {
                    m_MapField[i].resize(m_pLevelDatas->iHeight);
    
                    for(int z = 0;z < m_pLevelDatas->iHeight;z++)
                    {
                        //Sets it 0/pStandardFilename
                              m_MapField[i][z].strBitmapName        = (char*)strStandardFilename;
                        m_MapField[i][z].Teleport.iMapID    = 0;
                    }    
                }
            }
    
            //Returns the Field
            MapField* GetField(int iX, int iY)
            {
                if ((iX > m_pLevelDatas->iWidth) || (iY > m_pLevelDatas->iHeight))
                {
                    std::cout << "Error, field doesn't exist." << std::endl;            
                }
    
                return &m_MapField[iX-1][iY-1];
            }
    
            //Gives the map out, only for test (DOS)
            void GiveMapOut()
            {
                for(int i = 0;i < m_pLevelDatas->iHeight;i++)
                {
                    for(int z = 0;z < m_pLevelDatas->iWidth;z++)
                    {
                        std::cout << m_MapField[z][i].pBitmapName << " ";
                    }
    
                    std::cout << std::endl;
                }
            }
    
            //Saves the level
            int SaveLvl(std::string strFilename)
            {
                if(!m_bMap)
                    return 1;
    
                std::ofstream ofStream; 
    
                //Opens the file binary
                ofStream.open(strFilename.c_str(),std::fstream::out | std::fstream::binary); 
    
                //Writes the LevelData
                ofStream.write((char*)m_pLevelDatas, sizeof(*m_pLevelDatas));
    
                for(int z = 0;z < m_pLevelDatas->iWidth;z++)    
                    for(int i = 0;i < m_pLevelDatas->iHeight;i++)
                        ofStream.write((char*)&m_MapField[z][i], sizeof(m_MapField[z][i]));
    
                //Close the file 
                ofStream.close();
    
                return 0;
            }
    
            //Loads the level
            void LoadLvl(std::string strFilename)
            {
                std::ifstream ifStream; 
    
                //Opens the file binary
                ifStream.open(strFilename.c_str(),std::fstream::in | std::fstream::binary); 
    
                //Reads it
                ifStream.read((char*)m_pLevelDatas,sizeof(*m_pLevelDatas));
    
                this->MakeNewMap(m_pLevelDatas->iWidth, m_pLevelDatas->iHeight, "");
    
                for(int z = 0;z < m_pLevelDatas->iWidth;z++)    
                    for(int i = 0;i < m_pLevelDatas->iHeight;i++)
                        ifStream.read((char*)&m_MapField[z][i],sizeof(m_MapField[z][i]));
    
                //Close the file 
                ifStream.close();
            }
    
        private:
    
                //If the map exist
                bool m_bMap;
    
                //The map
                std::vector < std::vector <MapField> > m_MapField;
    
                //This struct saves the header of the file
                LevelData *m_pLevelDatas;
    }; [/i]
    
    [u]Leveleditor.cpp[/u][i]
    //******************************* FOR MORE SEE THE .h file ********************************//
    
    #include "Level.h"
    
    #include <cstdio>
    
    LevelData LevelInfo;
    
    Level Lvl;
    
    using namespace std;
    
    int main()
    {
        LevelInfo.iMapID = 36;
    
        Lvl.Init(&LevelInfo,"Test.jpg",5,4);
    
        Lvl.GetField(1,1)->pBitmapName = "sdf.png";
        Lvl.GetField(3,4)->pBitmapName = "sdf.png";
    
        Lvl.SetSizeOfMap(1,1);
    
        Lvl.GiveMapOut();
    
        Lvl.SaveLvl("test.drg");
    
        Lvl.LoadLvl("test.drg");
    
        cout << "ende" << endl;
        cout.flush();
        getchar();
    
        return 0;
    } [/i]]
    
    [u]Leveleditor X,Y Achsen[/u][i]
    //Geht alle Felder durch
    for(int iHeight = 0;iHeight < LevelInfo.iHeight;iHeight++)
    {
        for(int iWidth = 0;iWidth < LevelInfo.iWidth;iWidth++)
        {
            //Zeichnet das Sprite (pBitmapName)
    
            //Wenn das Sprite nicht ausserhalb des Bildschirms ist (60 ober und links vom Bildschirm, und über den unteren und rechten Teil des Bildschirms
            if(((x+ScrollX> -60) && (x+ScrollX < MeineXAuslösung) && ((y+ScrollY > -60) && (y+ScrollY < MeineXAuflösung))))
                MeineDrawFunktion(Lvl.GetField(x,y)->pBitmapName,x+ScrollX,y+ScrollY);
    
            //Sprite ist 50 Breit
            x += 50;
        }
    
        //Sprite ist 50 hoch
        y += 50;
    }
    

    Wir schaffen es einfach nicht, den Fehler zubeheben, gechweige denn, zu verstehen, was der Compiler uns sagen will, da wir erst in der 7. Klasse sind.
    PS:Wer will kann sich uns auch anschließen. Unter Skype: freemmorpgforfun oder unter diesen Links: http://freemmorpgforfun.forumieren.org/index.htm

    Wir freuen uns über jede Hilfe und sind wissenshungrig auf neue Methoden :essen:



  • Und was für Fehler sind das nun? Ohne die mit zu nennen wird das zu Fehlerraten.

    Da ist am ende der main eine eckige Klammer ] die sollte da bestimmt nicht sein, dann scheint MeineDrawFunktion nicht zu existieren. also alles im allem wenig Angaben zu deinem/eurem Problem.

    Vielleicht sollte man sich dann doch erstmal mit den grundlagen befassen, bevor man sich ans programieren eines Games wagt, so was macht man nicht als Anfängergrundübung.



  • Oh entschuldigt...
    So große Anfänger sind wir nun auch wieder nicht^^

    Zu den Fehlern:
    Das ist es ja grad.
    Wir wissen nicht welche Fehler drin sind^^
    Wir haben am Anfang entdeckt, dass wir vergessen haben die anderen beiden Dateien in die Leveleditor.cpp (ist ja kein Game wie der Name schon sagt) einzubinden.
    Das haben wir korrigiert (Die gezeigten Dateien sind in der Urform).
    Um das mit den Klammern werde ich mich gleich kümmern.

    LG Nico



  • na aber wenn der compiler daraus eine exe bauen soll wird er doch Fehler anzeigen die ihr hier posten sollt. Oder vermutet ihr nur das ihr Fehler drin habt, oder denkt ihr das ihr Fehler drin habt, oder wie soll man das jetzt verstehen?



  • CTecS schrieb:

    Und was für Fehler sind das nun? Ohne die mit zu nennen wird das zu Fehlerraten.

    Da ist am ende der main eine eckige Klammer ] die sollte da bestimmt nicht sein, dann scheint MeineDrawFunktion nicht zu existieren. also alles im allem wenig Angaben zu deinem/eurem Problem.

    Vielleicht sollte man sich dann doch erstmal mit den grundlagen befassen, bevor man sich ans programieren eines Games wagt, so was macht man nicht als Anfängergrundübung.

    Normalerweise, bei "normalen" Fehlern, kannst Du Doppelklick auf die Fehlermeldung
    machen, dann zeigt der Compiler Dir die Zeile, wo der Fehler erkannt wird.



  • @CTecS:

    Zitat von mir:

    "Zu den Fehlern:
    Das ist es ja grad.
    Wir wissen nicht welche Fehler drin sind^^"

    @Minispiri:

    Danke dir, wusst ich nicht



  • und wenn da nich expiliziet steht "bitten mach hier einen doppelklick" dann bekommt ihr das nicht mit, na eure programme möchte ich testen, und dann mein kommentar abgeben^^



  • klar wenn du willst^^
    aber erst mal müssen sie fertig werden

    LG Nico



  • Dann mal so rum:

    , was der Compiler uns sagen will,

    Was sagt euch der Compiler?



  • Das sagt uns der Compiler:

    3:Level.h: No such file or directory
    7:'LevelData' does not name a type
    9:'Level' does not name a type
    15:'LevelInfo' undeclared (first use this function)
    in function 'int main()':
    (Each undeclared identifier is reported only once for each function it appears in.)
    17:'Lvl' undeclared (first use this function)
    30:'cout' undeclared (first use this function)
    30:'endl' undeclarde (first use this function)
    [Build Error] [Leveleditor.o] Error 1



  • freemmorpgforfun schrieb:

    Das sagt uns der Compiler:

    30:'cout' undeclared (first use this function)
    30:'endl' undeclarde (first use this function)

    benutze die präprozessor-direktive

    <iostream>
    

    und

    unsing namespace std;
    


  • Und überprüfe zusätzlich wo deine Level.h liegt, denn wenn die korrekt eingebunden wird, wird damit der restliche Rattenschwanz wohl auch verschwinden.



  • Wie, liegt??
    Wenn du den Ordner meinst, dann kann ich sagen dass ich alle in einen gepackt habe.

    Achso und:

    using namespace std;
    

    ist schon drin...

    Ich hab jetzt auch

    #include <iostream>
    

    reingeschrieben...

    LG freemmorpgforfun



  • Welche Fehlermeldungen sind denn nun noch vorhanden? Der Ordner von level.h muss als Header-Ordner (includes) eingebunden sein in deinem Projekt. 😉



  • Na liegen halt 😉
    Fakt ist nunmal, dass deine Header-Datei nicht inkludiert wird, weswegen auch die ganzen Strukturen und Klassen nicht gefunden werden können. Wenn du Visual Studiuo nutzt, schau mal, ob die Dateien korrekt im Projekt eingefügt sind (.h unter header files, .cpp unter source files), und schau dir unter den Eigenschaften an (zusätzliche Include-Verzeichnisse).



  • Du erstellst einfach eine Headerdatei, die sich dann z.B. in deinem Fall "level.hpp" nennt. Wenn du nun die datei inkludieren möchtest inkludierst du in der Datei, wo du sie brauchst einfach

    #include "level.hpp"
    

    Achtung: Groß -und kleinschreibung beachten, sowie Dateiendung (.hpp oder .h).



  • @D-U-D-E, Minispiri

    Danke an euch.. ich probiers direkt aus

    LG freemmorpgforfun



  • Lasst es doch einfach bleiben 🙂



  • Wieso??
    Wir haben Spaß dran... Und außerdem: das Forum ist doch dazu da zu helfen und nicht um jemanden zum aufgeben zu bringen.

    Wir machen solange weiter bis wir es geschafft haben^^



  • freemmorpgforfun schrieb:

    Wieso??
    Wir haben Spaß dran... Und außerdem: das Forum ist doch dazu da zu helfen und nicht um jemanden zum aufgeben zu bringen.

    Wir machen solange weiter bis wir es geschafft haben^^

    Diese Einstellung habe ich auch 😉
    Ich würde Dir aber anraten einmal selbstständig nach Fehlern zu suchen, was dank
    Google meistens recht leicht ist. Denn wenn du ein Projekt codest suchst Du - je
    nach größe des Projekts - ungf. 10% der Arbeit nach Fehlern/Verbesserungen/usw.


Anmelden zum Antworten