[Projekt] 2D-Adventure

Just-for Fun :ugly:
Beruf steht noch in weiter Ferne (in ner Woche gehts weiter mit der 10.Klasse Gymn.), und auch nichts in Richtung Informatik geplant
Es macht mir einfach Spaß verschiedene Sachen mal auszuprobieren, ohne Stress, und irgendwelche "erzwungenen" Ziele
Ich mach einfach das worauf ich grad Lust hab, und da kam halt schon vor längerem die Idee eines kleinen Spieles (hatte schon vorher zig Ideen für andere Spiele, aber die waren mir dann irgendwie alle zu groß :D)
 
Ich fang im WS an mit dem Studium mal schauen wie ich zurecht komme.

Mit welchem Buch hast du denn gelernt und seit wann.

Da ich Wirtschaftsinformatik studiere und auf der Schule auch Wirstschaftsinformatik hatte, habe ich nur Ahnung von Anwendungen also wie man ERP Software erstellt bzw.allgemein Software für Prozesse wie Produktion oder Lager etc.
 
Zuletzt bearbeitet:
@Fadade
Das ist ja ne coole Seite, danke für den Link!

@Low
Ich habe vor etwa 2,5 Jahren angefangen, mit den Büchern "C: Programmieren von Anfang an" und danach gleich "C++ Objektorientiertes Programmieren von Anfang an".
Etwas später noch mein 3.Buch "C++ Lernen und professionell anwenden", um noch ein bisschen tiefer einzutauchen :D Kann alle 3 Bücher empfehlen
Zum Thema Spieleprogrammierung hatte ich mir mal "Spieleprogrammierung mit DirectX 11 und C++" besorgt, aber schon bald weggelegt. Keine Ahnung, obs das Buch war, oder DirectX, ich konnte nix damit anfangen :kotz:
Und für die ganzen Libraries gibts ja haufenweise Tutorials im Internet

Es läuft jetzt wieder unter XP, aber irgendwie check ich nicht so ganz, was der Fehler war...
Auf jeden Fall machte folgender (Lua-)Code Probleme:
Code:
Level.Sporthalle = function()
    setBackground("./Media/Level/L_1/Scene_1/ground.png")
    Player = createPlayer("./script/Player/Jana.lua")
    --Facebook = createEnemy("./script/Enemy/Facebook.lua")
    createEnemy("./script/Enemy/Facebook.lua")
    Engine_setNextLevel("END_OF_GAME")
    io.write("Skripting: Level geladen!\n")
end
So stürzt das Programm unter XP ab,
so nicht:
Code:
Level.Sporthalle = function()
    setBackground("./Media/Level/L_1/Scene_1/ground.png")
    [B]print("OLLA")
[/B]    Player = createPlayer("./script/Player/Jana.lua")
    --Facebook = createEnemy("./script/Enemy/Facebook.lua")
    [B]print("MERCATONE")[/B]
    createEnemy("./script/Enemy/Facebook.lua")
    Engine_setNextLevel("END_OF_GAME")
    io.write("Skripting: Level geladen!\n")
end
Lustig, oder? Auch wenn ich zB im 2.Code das "Player = " vor createPlayer wegnehme, stürzt es ab...
Ich schau mir nachher nochmal die createPlayer, bzw. createEnemy Funktionen an (sind aus Engine importiert), vielleicht ist da ja irgendeine (Lua-)Stack-Verwurschtlung drin.
Aber dass das unter Win7 nicht abstürzt? Das einzige was ich mir denken könnte, ist dass es der XP VM nicht schmeckt, kein VS-Runtime, kein .Net Framework, und kein DirectX zu haben...
Naja, ich teste dann mal ein bisschen herum, wird sich schon lüften :D
Sonst ist die Engine jetzt schonmal viel stabiler, hatte mir da vorher einige grobe Schnitzer erlaubt :ugly:
 
l "Spieleprogrammierung mit DirectX 11 und C++"

:D
Genau das habe ich auch, damit habe ich den Grundstein meiner kleinen 3D-Engine programmiert :daumen:

ich kenne mich zwar mit Skriptsprachen nicht so aus, aber vielleicht benötigt "setBackground(...)" einfach ein bisschen Zeit, die z.B. schon die Print-Anweisung liefert bzw. direkt ein Screen-Update, was durch Print direkt danach iniziiert werden könnte ...
 
Ich schau mir nachher nochmal die createPlayer, bzw. createEnemy Funktionen an (sind aus Engine importiert), vielleicht ist da ja irgendeine (Lua-)Stack-Verwurschtlung drin.
Aber dass das unter Win7 nicht abstürzt? Das einzige was ich mir denken könnte, ist dass es der XP VM nicht schmeckt, kein VS-Runtime, kein .Net Framework, und kein DirectX zu haben...
Wusst ichs doch :D
Ich hab mal absichtlich den Stack von Lua noch mehr "falsch" benutzt, und siehe da, auf WindowsXP stürzt es in jedem Fall ab, Win 7 bleibt stabil...
Und es hat wirklich WinXP nicht geschmeckt, kein VS Runtime zu haben, denn mit Runtime-Libraries stürzt es genauso wenig ab wie unter Win 7 :D
Und dabei will ich doch grad vermeiden, ein Runtime vorrauszusetzen, indem ich statisch die Libraries einlinke, aber das mag Lua net...
Naja, heißt zum einen, dass ich wirklich einen Stack-Fehler habe, und zum anderen, dass ich noch ein Lua suchen muss, dass bei einem Stack-Fehler net sofort ohne Runtime abschmiert. Vielleicht kann hier ja irgendein Lua-Gesegneter damit etwas anfangen:
Code:
         void CSkriptengine::callFunction(string File, string Funktionnname, int Param1)
         {
            int AnzahlParams = 0;
            lua_dofile(LuaInstance, File.c_str());
            lua_getglobal(LuaInstance,  Funktionnname.c_str()); /* function to be called */
            if(Param1 != -1)
            {
                lua_pushnumber(LuaInstance, Param1);
                AnzahlParams++;
            }


            int luaresult = lua_pcall(LuaInstance, AnzahlParams, 0,0);     /* call 'f' with 1 (0) arguments and 1 result */
            if(luaresult != 0)
            {
                string serror = "Problem beim Aufruf der Funktion " + Funktionnname + "() in der Datei " + File + " !!!\n";
                Log->ErrorOut(serror);
            }
        }
        bool LuaOK(lua_State * Lua, int Parameter, bool Warn = true)
        {
            bool OK = lua_gettop( Lua ) == Parameter;
            if(!OK)
            {
                if(Warn)
                {
                    string Error = "Parameter stimmen nicht überein: Falscher Aufruf durch Lua!!\nAnzahl erwarteter Parameter: ";
                    Error += Parameter + 48; Error += "\nAnzahl gegebener Parameter: "; Error += lua_gettop(Lua) +48 ; Error += "\n\n";
                    Log->ErrorOut( Error);
                
                }
                return false;
            }
            
            
            return true;
        }

       //Das hier wird im Lua Script aufgerufen, benutzt obige Funktionen
        int createPlayer(lua_State * Lua) //Gibt Nummer des neuen Spielers zurück
        {
            CEntity * Entity = CEngine::getActLevel()->createEntity();
            Entity->setMode(Mode_Player);
            if(LuaOK(Lua, 1, false)) //1 Parameter
            {
                string Path = lua_tostring(Lua, 1);
                Entity->setScript(Path);
                CSkriptengine::callFunction(Path,"init", Entity->getNumber());
            }
            lua_pop( Lua, lua_gettop( Lua ) );
            lua_pushnumber(Lua, Entity->getNumber());
            return 1;
        }
Ich hab auch ein bisschen am Rendern herumgeschrieben, jetzt gibts keine komischen "Sprünge" von den Bildern mehr, wenn sich die Figuren bewegen, durch eine virtuelle vertikale Achse durch den Spieler, bzw. den Bildern von den Spielern
 
Hab jetzt mal das Projekt unter CodeBlocks (GNU GCC Compiler) erstellt, um mal vollständig unabhängig von den VS Runtimes zu sein.
Und damit läuft es dann auch unter WinXP :hail:
Werd's in Zunkunft dann auch immer so machen, dass ich unter VS programmiere, und dann die GCC version weitergebe.

edit: Sorry für Doppelpost, wollte eig. editieren, irgendwie aber das Antworten-Feld erwischt :D.
 
Zurück