Einzelnes Zeichen auf Konsole löschen



  • Musst du nicht noch cursor_pos ausführen, bevor du das Leerzeichen ausgibst?



  • Funktioniert:

    So meinst du ?

    if (eingabe == key_down)
                    {
    
                             py = py + 1;
    
                             cursor_pos( px  , py);
    
                             cout<<" ";
                             cout<< figur;
    
                    }
    

    Funktioniert aber auch nicht.



  • konsole schrieb:

    Funktioniert:

    ...

    Funktioniert aber auch nicht.

    Ähm, ok... 😃

    Nee, ich meine natürlich so:

    if (eingabe == key_down)
    {
      cursor_pos( px  , py);  //Cursor an die alte Stelle setzen (da hast du zuletzt geschrieben)
      cout<<" ";  //Leerzeichen schreiben, also Figur an der alten Position löschen
      py = py + 1;  //JETZT neue Position festlegen
      cursor_pos( px  , py);  //Cursor an die neue Position setzen
      cout<< figur;  //Figur an der neuen Position schreiben
    }
    


  • Man könnte auch noch eine kleine Zusatzfunktion einführen, die ein Zeichen an eine bestimmte Stelle malt

    void writeChar( int x, int y, char c )
    {
        cursor_pos( x, y );
        std::cout << c;
    }
    

    Und dann eben:

    if ( eingabe == kes_down )
    {
        // Alte Position löschen
        writeChar( px, py, ' ' );
    
        // Position updaten
        ++py;
    
        // Männchen malen
        writeChar( px, py, figur );
    }
    


  • Badestrand schrieb:

    Man könnte auch noch eine kleine Zusatzfunktion einführen,

    Man könnte an dem Code noch eine ganze Menge machen... 😉



  • matze hat einen guten Ansatz. Wenn man nur gerade runter geht, dann funktioniert es. Drückt man vorher links oder rechts, hakt es noch ein bisschen.



  • FreakY<3Cpp schrieb:

    matze hat einen guten Ansatz. Wenn man nur gerade runter geht, dann funktioniert es. Drückt man vorher links oder rechts, hakt es noch ein bisschen.

    Ich habe eigentlich gar keinen Ansatz. 😉 Ich habe nur den einen case-Zweig so umgebastelt, wie es einfach logisch ist. Ob das komplette Programm funzt, weiß ich nicht. Mit links und rechts hab ich mich nicht beschäftigt (das sollte er dann aber selbst locker hinkriegen)...



  • _matze schrieb:

    Man könnte an dem Code noch eine ganze Menge machen... 😉

    Hehe, da haste Recht 🙂

    Drückt man vorher links oder rechts, hakt es noch ein bisschen.
    Noch ne kleine Funktion:

    void updatePosition( int dx, int dy )
    {
        // Alte Position löschen
        writeChar( px, py, ' ' );
    
        // Position updaten
        px += dx;
        py += dy;
    
        // Männchen malen
        writeChar( px, py, figur );
    }
    
    if ( eingabe == key_down )
        updatePosition( 0, +1 ); // x-Position bleibt, y-Richtung plus eins.
    else if ( eingabe == ... )
        ...
    

    edit: Um's ganz deutlich zu machen, ginge natürlich auch updatePosition( +-0, +1 ); 😃



  • Ich hab das jetzt so gemacht:

    Damit bin ich für den Anfang erst mal zu frienden.

    while(1)
            {
    
            eingabe = getch();
    
            cout<<" ";
    
                    if (eingabe == key_left)
                    {
    
                          px = px - 1;
                          cursor_pos( px  , py);
    
                          cout<<figur;
                          cursor_pos( px  , py);
    
                    }
    
                    if (eingabe == key_right)
                    {
    
                          px = px + 1;
                          cursor_pos( px  , py);
    
                          cout<<figur;
                          cursor_pos( px  , py);
    
                    }
    
                    if (eingabe == key_down)
                    {
    
                             py = py + 1;
                            cursor_pos( px  , py);
    
                               cout<<figur;
                          cursor_pos( px  , py);
    
                    }
    
                    if (eingabe == key_up)
                    {
    
                            py = py - 1;
                            cursor_pos( px  , py);
    
                               cout<<figur;
                          cursor_pos( px  , py);
    
                    }
    
            }
    

    Hat wer zufällig ein paar Tipps zu Kollisons abfragen?

    Wenn die Figur z.b. gegen die Wand läuft soll sie einfach stehen bleiben.

    Meine level bau funktion^^

    Die Funktion baut einfach einen Kasten^^ ( Dein der ist nich so krum und schief wie bei meiner "Zeichnung" )

    "Zeichnung"

    oben ____________
    seiten_w | seite_w_a |
    seiten_w |seiten_wa |
    boden _____________

    int level_bauen (char wand, int oben , int seiten_w , int seiten_w_a , int boden)
            {
    
                            for (int i = 0 ; i < oben ; i++ )
                            {
                            cout <<wand ;
                            }
    
                            cout << endl ;
    
                            for (int i = 0 ; i < seiten_w ; i++ )
                            {
                            cout << wand << setw( seiten_w_a ) <<wand<<endl;
                            }
    
                            for (int i=0 ; i< boden ; i++)
                            {
                                 cout << wand ;
                            }
    
                            return 0;
            }
    


  • Das jeweils zweite cursor_pos kannst du dir sparen und es stattdessen einmal vor das Schreiben des Leerzeichens setzen.



  • ok funktioniert ty


Anmelden zum Antworten