Problem mit Bildschirmsteuerungs Makros



  • Hallo erst mal. Ich habe aus einem C++-Buch (nämlich das Buch: "C++ Lernen und professionell anwenden") einen Quellcode abgeschrieben. Es ist der erste Code in welchem ein Makro mit Bildschirmsteuerung vorkommt. Der Quellcode sollte einen virtuellwn Ball "o" springen lassen.
    Hier mal den Quellcode:

    #include <iostream>
    #include <string>
    using namespace std;
    
    #define DELAY 10000000L                 // 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
    
    void main() //hier kommt ein Error, weil der Return-wet von main() ein int Wert sein muss. Es funktioniert aber auch nicht mit int main() und im Buch steht es mit void 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) // Ball "immer" springen lassen
        {
                LOCATE(y,x); cout << 'o' << endl; //Ball anzeigen
                for( long warten = 0; warten < DELAY; warten++)
                ;
    
                if( x == 1 || x == 79 ) dx = -dx ;        //An einer Wand
    
                if( y == 24 )                       //Am Boden?
                {
                        geschw = -geschw;
                        if ( geschw == 0 ) geschw = -7; //Neu anstossen
                }
                geschw += 1;                                //Beschleunigen um 1
    
                LOCATE(y,x); cout << ' '; //Anzeige löschen
                y += geschw; x += dx;
        }
    }
    

    Statt einem Ball kommt bei mir aber nur das heraus:

    (einen Pfeil nach links)[(eine Zahl zwischen 1 und 24);(eine Zahl zwischen 1 und 24)H (einen Pfeil nach links)[(eine Zahl zwischen 1 und 24);(eine Zahl zwischen 1 und 24)Ho (Neue Zeile)
    (einen Pfeil nach links)[(eine Zahl zwischen 1 und 24);(eine Zahl zwischen 1 und 24)H (einen Pfeil nach links)[(eine Zahl zwischen 1 und 24);(eine Zahl zwischen 1 und 24)Ho

    usw. das hört gar nicht mehr auf.
    Es sind glaube ich die Koordinaten des Balles "o", aber ich verstehe nicht weshalb die Koordinaten ausgegeben werden und nicht der Ball?!
    Ich benutze übrigens das Programm Code::Blocks. Vielleicht hat das eine Auswirkung.
    Als Compire hab ich: "GNU GCC Compire". Vielleicht hat das eine Auswirkung.
    Also hoffe ich habe alles wichtige gesagt.
    Danke schon mal im Vorrauus



  • //hier kommt ein Error, weil der Return-wet von main() ein int Wert sein muss.

    Normalerweise benutzt man folgende Konstruktion:

    int main()
    {
    ...
    return 0;
    }
    

    Und bei deinem Problem mit dem Courser würd ich denken, dass "\033[" die Falsche Anweisung für das Setzen des Coursers ist. Alternativ kann ich dir eine Funktion anbieten, die aber nicht auf meinem Mist gewachsen ist, aber im Netzt von ihm zur freien Verfügung gestellt wurde. Allerdings hab ich die Webseite verschlampt.

    #include <windows.h>
    
    void gotoxy(int x,int y)  //cursor an gewuenschte position auf dem bildschirm setzen
    {
    	CONSOLE_SCREEN_BUFFER_INFO		csbiInfo;							//variablendklaration
    	HANDLE	hConsoleOut;
    
    	hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
    	GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
    
    	csbiInfo.dwCursorPosition.X = x;									//cursorposition X koordinate festlegen
    	csbiInfo.dwCursorPosition.Y = y;									//cursorposition Y koordinate festlegen
    	SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);	//den cursor an die festgelegte koordinate setzen
    }
    
    //Copyright A. Teichmann
    //Fragen und Anregungen an:    Axel@smoki.net
    


  • Danke. Das mit dem Cursor setzen funktioniert.

    Hab noch ne Frage: Wie kann man den den Hintergrund in einer Consolen-Applikation ändern?





  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten