Windows 7 Console Steuerzeichen verwenden?
-
Hi Leute,
ich arbeite momentan mit dem Buch:
C++ Lernen und Professionell anwenden. Da bin ich gerade an einer Beispielaufgabe und komme nicht weiter. Bei mir kommen bei dem Programm nur komische Zahlen eigentlich sollte man jedoch einen Ball Springen sehen. Im Buch steht,dass man für Win XP den Treiber ANSI.SYS laden muss bloß wie geht das? Und geht das auch bei Win 7?Hier mal der Quellcode
// ball1.cpp // Simuliert einen springenden Ball // Hinweis: Programm mit Strg+C beenden. // -------------------------------------------------- // Damit die Steuerzeichen wirksam sind, muß ein // entsprechender Bildschirmtreiber geladen sein. // Unter Windows 9x geschieht dies durch folgende // Zeile in der Datei CONFIG.SYS: // DEVICE = C:\Windows\Command\Ansi.sys // --------------------------------------------------- #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 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) // 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; // Beschleunigung = 1 LOCATE(y,x); cout << ' '; // Anzeige löschen y += geschw; x += dx; // Neue Position } }
gruß
Shouu
-
Ich hab Dir mal für Windows die Funktionen zum Bildschirmlöschen und zur Cursorpositionierung mittels Windows-Konsole-Funktionen reingeschrieben, damit funktioniert es:
// ball1.cpp // Simuliert einen springenden Ball // Hinweis: Programm mit Strg+C beenden. // -------------------------------------------------- // Damit die Steuerzeichen wirksam sind, muß ein // entsprechender Bildschirmtreiber geladen sein. // Unter Windows 9x geschieht dies durch folgende // Zeile in der Datei CONFIG.SYS: // DEVICE = C:\Windows\Command\Ansi.sys // --------------------------------------------------- #include <windows.h> #include <iostream> #include <string> using namespace std; #define DELAY 10000000L // Verzögerung #define CLS clearScreen() // Bildschirm löschen // #define LOCATE(z,s) (cout <<"\033["<< z <<';'<< s <<'H') // Cursor in Zeile z und Spalte s positionieren void clearScreen(WORD attribute = 7) { CONSOLE_SCREEN_BUFFER_INFO csbi; COORD target = {0, 0}; DWORD written; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), ' ', csbi.dwSize.X * csbi.dwSize.Y, target, &written); FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE), attribute, csbi.dwSize.X * csbi.dwSize.Y, target, &written); } void LOCATE(int z, int s) { COORD pos = {s, z}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } 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) // 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; // Beschleunigung = 1 LOCATE(y,x); cout << ' '; // Anzeige löschen y += geschw; x += dx; // Neue Position } }
-
hehe, sehr cool
vielen Dank^^
-
Hallo Belli,
ich habe heute aufgrund Deiner Hilfe in dem o.a. Beitrag, nach Tagen auch mein Problem mit dieser Aufgabe gelöst.
Deshalb möchte auch ich Dir ganz herzlich danken.
Viele Grüsse von
boabdil