2 Funktionen mit derselben Variable aber doch nicht...



  • Über 400 views aber keiner will mir helfen? Ich steck irgendwir seit tagen an dem selben problem und ka wo der wurm drin ist... Kann sich keiner kurz zeit nehnen für mein problemchen? 😞


  • Mod

    Flutscherino schrieb:

    Über 400 views aber keiner will mir helfen? Ich steck irgendwir seit tagen an dem selben problem und ka wo der wurm drin ist... Kann sich keiner kurz zeit nehnen für mein problemchen? 😞

    Na, etwas mehr Geduld am Samstagabend. 🙂

    Ein Problem dürfte hier sein, dass deine letzte Frage ziemlich unklar ist. Du sagst, du bekommst es nicht so hin, wie du es haben willst. Na toll! 🙄 Wenn man dir nun helfen wollte, dann müsste man den ganzen Thread aufmerksam durchforsten, wo wohl steht, was du willst, wenn du es überhaupt schon einmal beschrieben hast. Im ersten Beitrag steht es jedenfalls nicht. So hat der Leser schon zwei ziemlich lange Beiträge gelesen (den ersten und den letzten) und hat immer noch keinen Plan, was gefragt ist. Da werden die meisten Leser, die nicht sowieso schon den ganzen Thread verfolgt haben, einfach abbrechen.

    Daher etwas leserfreundlicher posten wenn man schnell Antworten haben möchte. Präzise Fragestellungen auf den Punkt gebracht, nicht lange schwafeln, Beiträge nicht mit unnötigem Code zumüllen (aber auch nicht zu wenig Code! Siehe dritten Link in meiner Signatur für Tipps). Und auf keinen Fall mitten im Thread das Thema wechseln!



  • Warum zur Hölle speicherst du einen Zeiger auf dein Game in der BombMap? Das ist doch ein schwerer Design-Fehler. Mach dir eine Klasse Game , welcher du ein Element oder besser einen unique_ptr vom Typ BombMap spendierst. BombMap hält ein Feld(kannst dir ja einen Wrapper um ein zweidimensionales Feld machen) aus Bomben. So in etwa:

    class Bomb
    {
        unsigned damage;
    
        public:
    
            explicit Bomb(unsigned d) : damage(d) {}
    };
    
    class BombMap
    {
        typedef vector<vector<unique_ptr<Bomb> > > Tda;
        Tda bombs;
    
        public:
    
            explicit BombMap(Tda const&); //was auch immer du da machen willst
    };
    
    class Game
    {
        unique_ptr<BombMap> map;
    
        public:
    
            explicit Game();
    
            void RenderGame()//Spiel rendern, entweder holst du dir die
                             //map als ganzes oder renderst jedes feld einzeln
                             //hab selbst noch nie mit sfml gearbeitet
    };
    

    Am allerbesten ist es natürlich, wenn du die Fensterhandles/-zeiger getrennt vom Spiel verwaltest und das in irgendeiner Art verbindest. Auf jeden Fall ist dein Design komplett falsch, wenn deine BombMap einen Zeiger auf sowohl das gesamte Spiel, als auch auf das Fenster hält. Der Sinn der OOP ist, dass jede Klasse ihre individuelle Aufgabe erfüllt und alle Aufgaben, die nicht die ihren sind weiter delegiert. Mein Code soll nur eine Art Pseudocode sein, bevor sich hier alles streitet, ob man einen unique_ptr in einem vector speichern soll^^



  • Vielen dank für die antworten, ich dachte eigentlich das meine frage klar ist lol.. Was ich haben wollte ist ein zeiger in der CPlayer klasse die auf das Window in der CGame klasse zeigt zum zeichnen des spielers.. Ich weis shon das ich es auch anders lösen kann, aber mir ging es halt darum es genau so hinzubringen 😉



  • Flutscherino schrieb:

    class CGame
    {
    public:
    //...
    private:
      CBombMap bombmap;
    //...
    };
    
    class CBombMap
    {
    public:
    //...
    private:
      CGame *game;
    //...
    };
    
    void CGame::Init()
    {
      gWindow.create(sf::VideoMode(400, 400, 32), "Boom");
      bombmap.Init();
      Run();
    }
    
    void CBombMap::Init(){
      game = new CGame;
    }
    

    Also: ich sehe das richtig und das ist auch so gewollt:

    • CGame hat ein bombmap member, das wiederum einen Zeiger auf CGame hat.
    • CGame::Init ruft Bombmap::init auf, dass diesen Zeiger auf ein neu erstelltes CGame Objekt umbiegt.

    Das scheint suspekt. Ausserdem riecht es nach Speicherleck und wie die C'tors aussehen würde mich noch interessieren.



  • Naja, ja.. Ich will halt bloss in der CPlayer klasse das fenster abrufen können wo ich in der CGame klasse erstelle.. Nicht mehr ujd nicht weniger 😉



  • Okay und wofür genau brauchst Du das?

    Ich meine, den Spieler sollte doch eigentlich das Fenster gar nicht interessieren, oder? Oder hat das Fenster Renderaufgaben, sodass der Spieler sich dort rendern lassen kann?



  • Flutscherino schrieb:

    Naja, ja.. Ich will halt bloss in der CPlayer klasse das fenster abrufen können wo ich in der CGame klasse erstelle.. Nicht mehr ujd nicht weniger 😉

    Wann weis die CPlayer Klasse wann sie den SPieler zeichnen soll?
    Wenn CGame eine Methode in CPlayer dafür aufruft, dann kann doch CGame einfach das entsprechende Fenster mit übergeben.



  • firefly schrieb:

    Flutscherino schrieb:

    Naja, ja.. Ich will halt bloss in der CPlayer klasse das fenster abrufen können wo ich in der CGame klasse erstelle.. Nicht mehr ujd nicht weniger 😉

    Wann weis die CPlayer Klasse wann sie den SPieler zeichnen soll?
    Wenn CGame eine Methode in CPlayer dafür aufruft, dann kann doch CGame einfach das entsprechende Fenster mit übergeben.

    Es stimmt schon das ich es einfach übergeben könnte, so hab ich das vorher auch gehabt, nur will ich wegkommen von "Ach, ich übergebs doch einfach..." Mentalität 😉

    weil eben vorhin war meine aufrufe immer so ewigs lang ^^



  • Das ist meist nicht so schlimm, aber wenig Abhängigkeiten zu haben ist Gold wert, wenn Du Dein Programm später änderst und/oder erweiterst.



  • Naja ich weis ja eh noch nicht genau WAS ich mache, ich will nur wissen WIE ich es mache 🙂



  • Doof nur, dass Du vor dem WIE das WAS wissen musst 😉



  • Ok, falsch formuliert 😃 ich weis WAS ich machen möchte jetzt, aber später ka 🙂



  • omfg!



  • Naja dennoch weis ich immernoch nicht weiter wie ich mein Problem angeh...

    Ich brauch ja das später sicherlich nochmehr, alles was ich will ist:

    - Ein Objekt generieren in CGameInit

    CGame game;
    game.Init();
    

    - Diese Objekt weiterverwenden in CPlayer

    CGame game; //hier, wie krieg ich irgendwie mit, welches Objekt ich schon in der CGameInit habe? so mache ich doch eifnach ein neues objekt und das weis halt nix vom alten...
    game.draw(player);
    

    Ich mache am anfang meines Codes ein Objekt von der CGame, mit dessen Objekt ich dann ein Fenster generiere, und diese Fenster brauch ich dann ja weiter von der CPlayer init, auch WENN player halt nich wissen muss welches Fenster ich habe, damit ich vom CPlayer aus auf das Fenster zugreifen kann, muss ich ja wissen welches Objekt das Fenster kreiert hat damit ich darauf zugreifen kann...

    auch wenn ich das Fenster erst später generier, oder in einer Seperaten Klasse, ich komme immer an einen Punkt wo 2 Klassen auf dasselbe Objekt zugreifen müssen, woher wissen die welches Objekt ich meine?



  • Puh, schwer für mich da durch zu blicken. Ich habe versucht, das was ich verstanden habe, so umzusetzen wie ich es verstanden habe. Ich bin aber auch nur Hobbyprogrammierer, also keine Garantie für richtige Umsetzung.

    class CWindow {};
    
    class CGame
    {
    private:
        CWindow* _window;
    
    public:
        void createWindow()
        {
            _window = new CWindow();
        }
    
        CWindow* getWindow()
        {
            return _window;
        }
    };
    
    class CPlayer
    {
    private:
        CWindow* _window;
    public:
        void init(CWindow* window){
            _window = window;
        }
    };
    
    int main()
    {
    // 1.Ich mache am anfang meines Codes ein Objekt von der CGame
        CGame cgame_object;
    // 2.mit dessen Objekt ich dann ein Fenster generiere
        cgame_object.createWindow();
    
        CPlayer cplayer_object;
    // 3.und diese Fenster brauch ich dann ja weiter von der CPlayer init
        cplayer_object.init(cgame_object.getWindow());
    
        return 0;
    }
    


  • Oh danke vielmals, ich werd das mal anschaun und mich wieder mit fragen melden 😃



  • Und bitte lass die C-Praefixe bleiben.



  • Kellerautomat schrieb:

    Und bitte lass die C-Praefixe bleiben.

    Grund?
    Was ist standard?



  • Soweit ich weiß, gibt es keinen allgemeinen Standard. Es gibt verschiedene Coding Styles an die man sich halten kann, aber wenn man alleine arbeitet und dies auch weiter vor hat, ist es so ziemlich egal, solange du den Überblick behältst.

    Hier ist mal der C++ Style von Google: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml


Anmelden zum Antworten