Wie funktioniert dieser Code?



  • Hi!

    Ich bin noch am Anfang, C++ zu lernen. Als Buch habe ich mir " C++ lernen und professionnel anwenden" gekauft. Eigentlich gefällt mir das Buch recht gut, nur bei folgendem Code blicke ich mitsamt der Anleitung nicht durch:

    #include <iostream>
    #include <string>
    using namespace std;
    
    #define DELAY  10000000            // Verzögerung
    #define CLS   (cout << "\033[2J")  // Bildschirm löschen
    #define LOCATE(z,s) (cout <<"\033["<< z <<';'<< s <<'H')
            // Cursor in Zeile z und Spalte s positionieren
    int main()
    {
       int x = 2, y = 3, dx = 1, geschw = 0;
       string boden(79, '-'),
              header = "****  SPRINGENDER BALL  ****";
    
       CLS;
       LOCATE(1,25);  cout << header;
       LOCATE(25,1);  cout << boden;
    
       while(true)      // Warum Kommt der Code in eine Schleife?
       {
         LOCATE(y,x);  cout << 'o';        // wenn ich das Beispiel ausführe              
                                          //erscheint der Ball "o" nur manchmal?!   
         for( long warten = 0; warten < DELAY; ++warten)
           ;                                             //Dies soll zur Verzögerung
                                                         // da sein - warum benutzt 
                                                         //man nicht sleep o.ä.? 
         if(x == 1 || x == 79) dx = -dx;                // ab jetzt versteh ich gar 
                                                        // nichts mehr 
         if( y == 24 )                     
         {
           geschw = - geschw;
           if( geschw == 0 ) geschw = -7;  
         }
         geschw += 1;                 
    
         LOCATE(y,x); cout <<  ' ';   
         y += geschw;  x += dx;       
       }
    	return 0;
    }
    

    Könnte mir jemand insbesondere den letzten Abschnitt erklären, ich versteh nämlich da nicht mehr, warum man das hin schreibt. Was soll immer dieses dx+=1 oder gesch+=1? Ich weiß, was es bedeutet, aber nicht was es bringen soll. Und ein weiterer Punkt, was bewegt diesen Ball eigentlich?

    Ich würde mich sehr freuen, wenn mir einer helfen könnte.

    Viele Grüße,

    euer Sebi



  • hallo

    ausgeschrieben heißt das:

    dx=dx+1;

    die punkte werden einfach je schleifeniteration einen punkt weitergesetzt.

    so bewegt er sich dann.

    ich empfehle dir erstmal ein gutes tutorial. zum beispiel von shadeofmine oder volkard (tutorial seite oder suchenbutton)

    so long erstmal

    ps: die verzögerungsschleife ist nicht schön. aber er versucht, die Sleep aus der windows.h zu umgehen.
    nur das er trotzdem keinen standard fährt, da die CLS nicht standard postitionierung benutzt.
    im standard gibt es keine positionierung 😉



  • Wenn diese Codes wenigstens unter Linux und Windows laufen ist es ja schon wieder so portabel, dass es bei den meisten Lesern läuft.



  • Frage: Warum sind CLS und LOCATE Makros?



  • Helium schrieb:

    Frage: Warum sind CLS und LOCATE Makros?

    Weil das Kapitel über inline Funktionen erst noch kommt.



  • SirLant schrieb:

    Wenn diese Codes wenigstens unter Linux und Windows laufen ist es ja schon wieder so portabel, dass es bei den meisten Lesern läuft.

    der code läuft leider nur noch unter win98.

    die kiddies, die ich kenne, fahren aber "leider" alle xp 😉



  • elise schrieb:

    die kiddies, die ich kenne, fahren aber "leider" alle xp 😉

    Wo ist da der Witz? 🙄



  • Helium schrieb:

    Frage: Warum sind CLS und LOCATE Makros?

    Um den Code übersichtlicher zu halten, besonders i += 1 scheint in Mode gekommen zu sein...



  • Hallo erstmal!

    Das wichtigste zuerst: der Code ist portabel, zumindest läuft er auf meinem Gentoo-Rechner (ja, das ist linux 🙂 ) Rechner ohne Probleme und nein, ich hab kein XP!

    Ich wäre dennoch seher dankbar, wenn nicht alle gleich voller Vorurteile antworten könnten, sondern mir helfen könnten, meine Wissenslücke zu schließen. Bis jetzt hat nur elise mir wirklich etwas geholfen. (Thanx @ elise :))

    Aber leider verstehe ich den Code immer noch so ganz. Was dx += 1 bedeutet war mir klar, bloß ich verstehe den Sinn hinter der Variabel dx und geschw nicht. Die haben doch gar nichts mit der Positionierung zu tun, dafür sind doch y und x zuständig, oder?

    Vielleicht kann mir noch einmal ausfürhlich auf die Sprünge helfen...



  • Sebastian Fährmann schrieb:

    Hallo erstmal!

    Das wichtigste zuerst: der Code ist portabel, zumindest läuft er auf meinem Gentoo-Rechner (ja, das ist linux 🙂 ) Rechner ohne Probleme und nein, ich hab kein XP!

    Nur wenn du den Ansitriber geladen hast. Es gibt Systeme die das nich per default haben.



  • So - das wusste ich nicht. Ich habe einen Gentoo und Debian Rechner und beiden funzt es ohne Probleme - aber ich habe natürlich auch die Entwicklerwerkzeuge installiert, also KDevelop, QT und Freunde.

    Aber ich bitte euch, erklärt mir diesen Code genauer 😃 Bitte 🙂



  • Strogij schrieb:

    elise schrieb:

    die kiddies, die ich kenne, fahren aber "leider" alle xp 😉

    Wo ist da der Witz? 🙄

    das war kein witz.

    @fährmann

    am besten näherst du dich so einem programm, indem du einzelne sachen mal auskommentierst...
    was passiert, wenn ich zum bleistift die zeile
    if( geschw == 0 ) geschw = -7;
    rausnehme... dann hängt der ball irgendwann unten.

    versuche einfach mal, mit den gegebenheiten eine eigene idee zu verwirklichen.
    ein ball soll zum bleistift immer hoch und runter auf der gleichen stelle wandern.

    dann wirst du den code durchsteigen.

    so long erstmal.



  • hallo erst mal

    ich bin noch ziemlich neu im programmieren und hab warscheinlich nen ganz blöden fehler gemacht,aber vielleicht kann mir trozdem irgendwer helfen:

    #include <iostream>
    #include <string>
    using namespace std;

    int main()
    {
    int zahl1;
    int zahl2;

    string text;
    string text2;
    string ausgabe ;

    zahl2 = 200;
    zahl1 = 100;
    text = "lol das is ein string" ;
    text2 ="text 2 bin ich";
    ausgabe = text " " + text2;

    cout << text<< endl;
    cout << "wert von zahl1:" << zahl1 << endl;
    cout << "wert von zahl2:"<< zahl2 << endl;
    cout <<ausgabe<< endl;
    cin.get();

    return 0;

    }
    mein compiler woll das einfach nich "fressen",aber warum?

    (der fehler liegt bei "ausgabe =text...... lol ich weiß schon was der fehler is will aber diesen schönen text nich löschen,

    lol.ich bin beim schreiben dieses eintrags draufgekommen also konntet "ihr" mir doch helfen 🙂



  • elise schrieb:

    @fährmann

    am besten näherst du dich so einem programm, indem du einzelne sachen mal auskommentierst...
    was passiert, wenn ich zum bleistift die zeile
    if( geschw == 0 ) geschw = -7;
    rausnehme... dann hängt der ball irgendwann unten.

    versuche einfach mal, mit den gegebenheiten eine eigene idee zu verwirklichen.
    ein ball soll zum bleistift immer hoch und runter auf der gleichen stelle wandern.

    dann wirst du den code durchsteigen.

    so long erstmal.

    Hi!

    Ich bins nochmal. Ich habe versucht "mich dem Code zu näheren", aber ich kapier es einfach nicht. Alleine wenn man schon ganz am Anfang bei der Deklaration der Variablen statt dx = 1 dx = 0 setzt funktioniert das ganze nicht mehr! Das gleiche bei der Variabeln geschw. Kann mir denn keiner den Code Schritt für Schritt erklären? Bitte dann krieg ich vielleicht die 💡 🙂


Anmelden zum Antworten