Bouncing Ball problem



  • hallo,
    ich diesen code aus einem buch von ulla prinz abgetippt.

    #include <iostream>
    #include <vector>
    #include <string>
    #include <cctype>
    using namespace std;
    #define DELAY 10000000L
    #define CLS (cout<<"/033[2J")
    #define LOCATE(z,s) (cout << "/033["<< z<<';'<<s<<'H')
    
    void main()
    {   
      int x=2,y=3,dx=1,speed=0;
      string floor(79,'-'), header = "*****BALL******";
      CLS;
      LOCATE(1,25); cout << header;
      LOCATE(25,1); cout << floor;
    
      while(true)
      {
    	  LOCATE(y,x); cout << 'o'<<endl;
    	  for( long wait = 0; wait < DELAY;  ++wait)
    	  ;
    	  if (x==1 || x==79 ) dx = -dx;
    
    	  if (y==24)
    	  {
    		  speed = -speed;
    		  if (speed == 0) speed = -7;
          }
    	  speed +=1;
    	  LOCATE(y,x);  cout<< ' ';
    	  y += speed; x+=dx;
    
      }
    }
    

    ich hab ka was der code machen soll. was beduetet

    #define CLS (cout<<"/033[2J")
    

    .
    es wird genau das gemacht was ich dachte, er gibt /033[2J aus was keinen sinn ergibt.

    als compiler benutze ich VS2010
    hat jemand eine idee was das soll ?



  • Das ist eine Escapesequenz unter DOS zum Löschen des Bildschirms.
    Die wird unter Windows wahrscheinlich nicht mehr funktionieren.

    siehe http://www.c-plusplus.net/forum/39323 für genauere Info



  • kann man denn das buch" a complete guide to programing in c++" von prinz noch empfehlen ?

    scheint mir etwas veraltet 😕



  • kantaki schrieb:

    kann man denn das buch" a complete guide to programing in c++" von prinz noch empfehlen ?
    scheint mir etwas veraltet 😕

    Auf jeden Fall ist obiger Code Müll.
    Mischung aus Pascal- und C-Stil, nur C++ ist nicht dabei.



  • primer ftw



  • schon für

    Ulla Prinz schrieb:

    void main()
    

    sollte man die Buchauthorin ohrfeigen...
    void main() war zu keiner Zeit Standard-C++.

    Zu den Escape-Sequenzen:
    Unter Unix/Linux funktionieren die einwandfrei und auch unter älteren Windows-Versionen.
    Die Ansi-Escape-Sequenzen werden erst ab Windows-NT nicht mehr unterstützt.

    Das würde ich also weniger als Kritikpunkt betrachten.

    Ansonsten hat volkard Recht:
    Massiger Gebrauch von Makros und Variablendeklarationen am Scope-Anfang weisen deutlich auf C hin.



  • DrakoXP schrieb:

    Zu den Escape-Sequenzen:
    Unter Unix/Linux funktionieren die einwandfrei und auch unter älteren Windows-Versionen.
    Die Ansi-Escape-Sequenzen werden erst ab Windows-NT nicht mehr unterstützt.

    Das würde ich also weniger als Kritikpunkt betrachten.

    edit: Weg:"Nein, das nicht." Hin:"Nein, das ist nicht das Problem, da gebe ich Dir recht." Wir haben for(;;) als eigenes Idiom für Endlosschleifen. Aber CLS müßte wirklich eine Funktion sein. Und DELAY eine const. Die Zeitschleife hat keinen Körper und wird wegoptimiert. Wenigstens cout<<""; machen. Alle Variablen am Anfang ist in C++ Anti-Stil. Selbst, wenn man CLS als Makro dulden würde, danbn aber bitte CLS(); statt CLS;. Kurzum, alles voll zum Kotzen.



  • Das mit em Kritikpunkt bezog sich einzig und allein auf die ANSI-Escape-Sequenzen.

    Der Code an sich, da gebe ich dir völlig Recht, ist natürlich grauenhaft.



  • Wie immer ist system() schlecht doch da du scheinbar noch nichts selber geschrieben hast kannst du solange system("cls"); nehmen. 👎


Anmelden zum Antworten