Snake in Konsole wächst nicht



  • ok hab ich soweit gemacht 🙂 hab aber das feld immer noch in eine vector da ich es besser finde 😃



  • Wunderbar!
    Das ist auch die bessere Wahl.
    Als nächstes machst du die Schlange.
    Die hat wiederum einen vector als Speicher. Der speichert den Index für jedes Element der Schlange. Die Zeichen-Funktion setzt in der Map die Zeichen an jedem gespeicherten Index durch das Schlangenzeichen.
    Die update-Funktion kümmert sich um die Benutzereingabe und bewegt die Schlange entsprechend. Anschließend kümmert sich eine Kollsionsabfrage darum, dass wenn das Feld in der Map, auf dem der Kopf nun ist, Obst war, dass hinten im Vector ein Feld hinzugefügt wird.



  • ist es besser wenn ich die funktionen draw() und update() auch in die klasse mach? Hab da im moment nämlich nur den Vektor drin ...



  • Ja klar in der Klasse, Memberfunktion.



  • jetz gibt das immer ein Fehler aus...
    Hab nochmal komplett neu angefangen mit dem code um die funktionen in die klasse zu tun. Nun weiß ich aber nicht, wo der Fehler liegt 😞

    class cfeld{
    
      public:
      void draw(vector<char>); // fkt die feld ausgibt
      void update (); //fügt obst hinzu
      static vector<char> feld;
    
     // private:
        static int merke;
    
    };
    
    vector<char> cfeld::feld (800);
    int cfeld::merke = 0;
    
    void draw (vector<char> feld)
    {
        for(int x = 0; x < 800; x++)// gibt spielfeld aus (40 * in einer reihe dann endl)
        {
         feld.at(x) = '*';
         cout << feld[x];
         cfeld::merke++;
    
            if (cfeld::merke == 40)// gibt wenn die for schleife 40 mal durchgelaufen ist eine endl aus
            {
            cout<< endl;
            cfeld::merke = 0;
            }
        }
    }
    
    int main()
    {
      cfeld feld;
    
      feld.draw(cfeld::feld);
    
        return 0;
    }
    


  • class map
    {
        std::vector<char> data_;
        std::size_t width_, height_;
    
    public:
        map(std::size_t width, std::size_t height)
        : data_(width * height, '*'), width_(width), height_(height) {}
    
        void update();
        void draw(std::ostream &os = std::cout);
    };
    
    void map::draw(std::ostream &os)
    {
        for (std::size_t y = 0; y < height_; ++y)
        {
            for (std::size_t x = 0; x < width_; ++x)
                os << data_[y * width_ + x];
            os << '\n';
        }
    }
    

    ?



  • das gibt bei mir nach dem linken auch den Fehler aus:
    undefined reference to...



  • update



  • Danke 🙂 bin fast fertig 😃 jetz häng ich wieder daran, die Schlange wachsen zu lassen 😡 hab die Schlange und das Feld ja in einen Vector gespeichert aber jetz weiß ich wieder nicht, wie ich das Verknüpfen soll...

    class cfeld{
    
      ...
    
      public:
      void draw(vector<char>, vector<int>); // fkt die feld ausgibt
      void update (int&); 
      static vector<char> feld;
      static int obst;
      static vector<int> snake;
    };
    
    ...
    

    jetzt weiß ich nicht, wie ich, wenn die Schlange wächst, das auf der konsole ausgeben soll und wie ich das mache, dass wenn man die Schlange steuert die hinteren Teile nicht von dem Kopf getrennt werden. hab im moment einfach nur den kopf zum starten

    feld.at(cfeld::snake[0]) = 'O';
    


  • Danke 🙂 muss nur noch ne kollisionsabfrage machen 😃 hab die bewegung der schlange aber ein bisschen umständlich gemacht 🙄

    if(kbhit()) // Nur wenn auch eine Taste gedrückt ist
        {
            c = getch();
            switch(c)
            {
            case 'w':
             cfeld::snake[9] = cfeld::snake[8];
             cfeld::snake[8] = cfeld::snake[7];
             cfeld::snake[7] = cfeld::snake[6];
             cfeld::snake[6] = cfeld::snake[5];
             cfeld::snake[5] = cfeld::snake[4];
             cfeld::snake[4] = cfeld::snake[3];
             cfeld::snake[3] = cfeld::snake[2];
             cfeld::snake[2] = cfeld::snake[1];
             cfeld::snake[1] = cfeld::snake[0];
             cfeld::snake[0] = cfeld::snake[0] -40 ;
             break;
    
            case 'a':
             cfeld::snake[9] = cfeld::snake[8];
             cfeld::snake[8] = cfeld::snake[7];
             cfeld::snake[7] = cfeld::snake[6];
             cfeld::snake[6] = cfeld::snake[5];
             cfeld::snake[5] = cfeld::snake[4];
             cfeld::snake[4] = cfeld::snake[3];
             cfeld::snake[3] = cfeld::snake[2];
             cfeld::snake[2] = cfeld::snake[1];
             cfeld::snake[1] = cfeld::snake[0];
             cfeld::snake[0]--;
            break;
    
            case 's':
            cfeld::snake[9] = cfeld::snake[8];
            cfeld::snake[8] = cfeld::snake[7];
            cfeld::snake[7] = cfeld::snake[6];
            cfeld::snake[6] = cfeld::snake[5];
            cfeld::snake[5] = cfeld::snake[4];
            cfeld::snake[4] = cfeld::snake[3];
            cfeld::snake[3] = cfeld::snake[2];
            cfeld::snake[2] = cfeld::snake[1];
            cfeld::snake[1] = cfeld::snake[0];
            cfeld::snake[0] = cfeld::snake[0] +40;
            break;
    
            case 'd':
            cfeld::snake[9] = cfeld::snake[8];
             cfeld::snake[8] = cfeld::snake[7];
             cfeld::snake[7] = cfeld::snake[6];
             cfeld::snake[6] = cfeld::snake[5];
             cfeld::snake[5] = cfeld::snake[4];
             cfeld::snake[4] = cfeld::snake[3];
             cfeld::snake[3] = cfeld::snake[2];
             cfeld::snake[2] = cfeld::snake[1];
             cfeld::snake[1] = cfeld::snake[0];
            cfeld::snake[0]++;
            break;
            }
    
        }
    else
    {
        if( c == 'd')
        {
            cfeld::snake[9] = cfeld::snake[8];
             cfeld::snake[8] = cfeld::snake[7];
             cfeld::snake[7] = cfeld::snake[6];
             cfeld::snake[6] = cfeld::snake[5];
             cfeld::snake[5] = cfeld::snake[4];
             cfeld::snake[4] = cfeld::snake[3];
             cfeld::snake[3] = cfeld::snake[2];
             cfeld::snake[2] = cfeld::snake[1];
             cfeld::snake[1] = cfeld::snake[0];
            cfeld::snake[0]++;
        }
        if( c == 'w')
        {
            cfeld::snake[9] = cfeld::snake[8];
             cfeld::snake[8] = cfeld::snake[7];
             cfeld::snake[7] = cfeld::snake[6];
             cfeld::snake[6] = cfeld::snake[5];
             cfeld::snake[5] = cfeld::snake[4];
             cfeld::snake[4] = cfeld::snake[3];
             cfeld::snake[3] = cfeld::snake[2];
             cfeld::snake[2] = cfeld::snake[1];
             cfeld::snake[1] = cfeld::snake[0];
            cfeld::snake[0]=cfeld::snake[0]-40;
    
        }
        if( c == 'a')
        {
            cfeld::snake[9] = cfeld::snake[8];
             cfeld::snake[8] = cfeld::snake[7];
             cfeld::snake[7] = cfeld::snake[6];
             cfeld::snake[6] = cfeld::snake[5];
             cfeld::snake[5] = cfeld::snake[4];
             cfeld::snake[4] = cfeld::snake[3];
             cfeld::snake[3] = cfeld::snake[2];
             cfeld::snake[2] = cfeld::snake[1];
             cfeld::snake[1] = cfeld::snake[0];
            cfeld::snake[0]--;
    
        }
        if ( c== 's')
        {
            cfeld::snake[9] = cfeld::snake[8];
             cfeld::snake[8] = cfeld::snake[7];
             cfeld::snake[7] = cfeld::snake[6];
             cfeld::snake[6] = cfeld::snake[5];
             cfeld::snake[5] = cfeld::snake[4];
             cfeld::snake[4] = cfeld::snake[3];
             cfeld::snake[3] = cfeld::snake[2];
             cfeld::snake[2] = cfeld::snake[1];
             cfeld::snake[1] = cfeld::snake[0];
            cfeld::snake[0] = cfeld::snake[0]+40;
    
        }
    


  • Du hast OOP nicht im Geringsten verstanden.
    Lern es nochmal. Schaue dir die Beispiele an. Schaue dir mein Beispiel an.



  • Ok -.- hab jetzt noch die mit einer for-schleife gemacht. Dann hab ich noch die kollisionsabfrage hinzugefügt. Jetz kann ichs spielen 😃



  • Wie kann ich prüfen ob der kopf der Schlange kleiner ist als der Vector?

    if(snake[0] > feld.size())
      {
       snake[0] = snake[0] - 800;
      }
    

    Dies mach ich, wenn der Kopf größer ist, damit die Schlange auf der anderen Seite des Feldes wieder rauskommt.

    (Hab mir das nochmal angeguckt aber iwi versteh ich das immer genau so wie ich das mit den Klassen mache -.-)



  • if (snake[0] < 0)
        snake[0] += 800;
    


  • Danke 🙂

    bool exit = false;
    while(!exit)
    {
    
        if(kbhit()) // Nur wenn auch eine Taste gedrückt ist
        {
            c = getch();
            switch(c)
            {
            case 'w':
             for(int x = 9; x == 1; )
             {
             cfeld::snake[x] = cfeld::snake[--x];
             }
             cfeld::snake[0] = cfeld::snake[0] -40 ;
             break;
    
            case 'a':
             for(int x = 9; x == 1; )
             {
             cfeld::snake[x] = cfeld::snake[--x];
             }
             cfeld::snake[0]--;
            break;
    
            case 's':
            for(int x = 9; x == 1; )
             {
             cfeld::snake[x] = cfeld::snake[--x];
             }
            cfeld::snake[0] = cfeld::snake[0] +40;
            break;
    
            case 'd':
           for(int x = 9; x == 1; )
             {
             cfeld::snake[x] = cfeld::snake[--x];
             }
            cfeld::snake[0]++;
            break;
            }
    
        }
    
    else
    {
        if( c == 'd')
        {
    
             cfeld::snake[9] = cfeld::snake[8];
             cfeld::snake[8] = cfeld::snake[7];
             cfeld::snake[7] = cfeld::snake[6];
             cfeld::snake[6] = cfeld::snake[5];
             cfeld::snake[5] = cfeld::snake[4];
             cfeld::snake[4] = cfeld::snake[3];
             cfeld::snake[3] = cfeld::snake[2];
             cfeld::snake[2] = cfeld::snake[1];
             cfeld::snake[1] = cfeld::snake[0];
             cfeld::snake[0]++;
    
        }
        if( c == 'w')
        {
    
             cfeld::snake[9] = cfeld::snake[8];
             cfeld::snake[8] = cfeld::snake[7];
             cfeld::snake[7] = cfeld::snake[6];
             cfeld::snake[6] = cfeld::snake[5];
             cfeld::snake[5] = cfeld::snake[4];
             cfeld::snake[4] = cfeld::snake[3];
             cfeld::snake[3] = cfeld::snake[2];
             cfeld::snake[2] = cfeld::snake[1];
             cfeld::snake[1] = cfeld::snake[0];
             cfeld::snake[0]=cfeld::snake[0]-40;
    
        }
        if( c == 'a')
        {
    
             cfeld::snake[9] = cfeld::snake[8];
             cfeld::snake[8] = cfeld::snake[7];
             cfeld::snake[7] = cfeld::snake[6];
             cfeld::snake[6] = cfeld::snake[5];
             cfeld::snake[5] = cfeld::snake[4];
             cfeld::snake[4] = cfeld::snake[3];
             cfeld::snake[3] = cfeld::snake[2];
             cfeld::snake[2] = cfeld::snake[1];
             cfeld::snake[1] = cfeld::snake[0];
             cfeld::snake[0]--;
    
        }
        if ( c == 's')
        {
    
             cfeld::snake[9] = cfeld::snake[8];
             cfeld::snake[8] = cfeld::snake[7];
             cfeld::snake[7] = cfeld::snake[6];
             cfeld::snake[6] = cfeld::snake[5];
             cfeld::snake[5] = cfeld::snake[4];
             cfeld::snake[4] = cfeld::snake[3];
             cfeld::snake[3] = cfeld::snake[2];
             cfeld::snake[2] = cfeld::snake[1];
             cfeld::snake[1] = cfeld::snake[0];
             cfeld::snake[0] = cfeld::snake[0]+40;
        }
    }
    

    Wieso kann ich bei else die blöcke

    cfeld::snake[9] = cfeld::snake[8];
             cfeld::snake[8] = cfeld::snake[7];
             cfeld::snake[7] = cfeld::snake[6];
             cfeld::snake[6] = cfeld::snake[5];
             cfeld::snake[5] = cfeld::snake[4];
             cfeld::snake[4] = cfeld::snake[3];
             cfeld::snake[3] = cfeld::snake[2];
             cfeld::snake[2] = cfeld::snake[1];
             cfeld::snake[1] = cfeld::snake[0];
    

    nicht in eine for- Schleife tun wie bei if?



  • lolipoplol schrieb:

    /* ... */
    
    1>main.cpp(2): error C2059: syntax error : 'while'
    1>main.cpp(3): error C2143: syntax error : missing ';' before '{'
    1>main.cpp(3): error C2447: '{' : missing function header (old-style formal list?)
    1>main.cpp(109): fatal error C1004: unexpected end-of-file found
    

    👍

    Nachdem du hier schon mehrere Male Codefetzen gepostest hast, möchtest du evtl. http://www.c-plusplus.net/forum/304133-full lesen.



  • lolipoplol schrieb:

    Danke 🙂
    nicht in eine for- Schleife tun wie bei if?

    was hindert dich dran?

    Wahrscheinlich hast du was falsch gemacht und deshalb kontest du nicht.


Anmelden zum Antworten