Flackern trotz system("clr")
-
Hallo,
ich habe ein kleines Problem und Google hat mir nur teilweise geholfen.
Ich habe ein kleines "Spiel" indem ich ein X über ein Spielfeld steuere, doch bei jeder Bewegung wird das Spielfeld neu ausgegebn und dabei entsteht ein unschönes flackern, da habe ich es mit system("clr") versucht. Jetzt ist die Konsole zwar schön leer, aber das flackern beim bewegen ist immernoch da
system("cls"); for (int i = 0; i < 12; i++) { for (int j = 0; j < 12; j++) { cout << Spielfeld[i][j] << " "; } cout << endl; }
Mache ich etwas falsch?
Danke schonmal für eine Antowrt :>
-
günstiger wäre, das jeweils gezeichnete zeichen alleine zu "löschen", und den gesamten hintergrund stehen zu lassen.
schau dich in win32 konsolenforum um, dort findest du vor allem im faq viel zum thema.
-
Du meinst wohl eher "Flackern wegen system("clr")"?
Erstens bist du im falschen Forum (-> DOS und Win32-Konsole) und zweitens schau dir mal die Improves Konsole an. Dort gibt es dann bessere Funktionen für die exakte Platzierung innerhalb der Konsole.
Dass Flackern unterbindest du dann am besten, wenn du nur die letzte Position löschst (Leerzeichen) und dann an der neuen Position das "x" platzierst (anstatt jedesmal die gesamte Konsole zu löschen).
Edit: zwar etwas langsamer als "elise" dafür etwas detailierter
-
Ok, danke für die schnelle hilfe ;>
-
Ok, ich habe es versucht, aber irgendwie bekomme ich es nicht hin nur die "Figur" zu bewegen :<
Hier mal der Code...
#include <iostream> #include <conio.h> #include <windows.h> using namespace std; int main () { char Spielfeld[12][12] = { { 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O' }, { 'O', 'O', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'O' }, { 'O', ' ', ' ', ' ', ' ', ' ', 'O', ' ', ' ', ' ', ' ', 'O' }, { 'O', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'O' }, { 'O', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'O' }, { 'O', ' ', 'O', ' ', ' ', ' ', ' ', 'O', ' ', 'O', ' ', 'O' }, { 'O', ' ', ' ', ' ', ' ', 'O', 'O', ' ', ' ', ' ', ' ', 'O' }, { 'O', ' ', ' ', ' ', ' ', ' ', 'O', ' ', ' ', ' ', ' ', 'O' }, { 'O', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'O' }, { 'O', ' ', 'O', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'O' }, { 'O', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'O', 'X', 'O' }, { 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O' } };//Spielfeld bool End = false; char Move; int PlayerpositionX = 10; int PlayerpositionY = 10; int PlayeroldpositionX = 10; int PlayeroldpositionY = 10; cout << "Steuern mit W, A, S und D!\n" << endl; Sleep(2000); do{ cout << endl; Spielfeld[PlayeroldpositionX][PlayeroldpositionY] = ' ';//alte position frei machen Spielfeld[PlayerpositionX][PlayerpositionY] = 'X';//neue position bestimmen system("cls");//Bildschirm leeren for (int i = 0; i < 12; i++) { for (int j = 0; j < 12; j++) { cout << Spielfeld[i][j] << " ";//Spielfeld ausgeben } cout << endl; } PlayeroldpositionY = PlayerpositionY;//alte Position speichern PlayeroldpositionX = PlayerpositionX; do{ Move = _getch();//bewegen if (Move == 'w') {//noch oben PlayerpositionX--; if (Spielfeld[PlayerpositionX][PlayerpositionY] != ' ') PlayerpositionX = PlayeroldpositionX;} else if (Move == 'a') {//nach links PlayerpositionY--; if (Spielfeld[PlayerpositionX][PlayerpositionY] != ' ') PlayerpositionY = PlayeroldpositionY;} else if (Move == 's') {//nach unten PlayerpositionX++; if (Spielfeld[PlayerpositionX][PlayerpositionY] != ' ') PlayerpositionX = PlayeroldpositionX;} else if (Move == 'd') {//nach rechts PlayerpositionY++; if (Spielfeld[PlayerpositionX][PlayerpositionY] != ' ') PlayerpositionY = PlayeroldpositionY;} else {} }while (Spielfeld[PlayerpositionX][PlayerpositionY] != ' ');//neue Position nur auf Leerzeichen }while (End != true); return 0; }
Könnte einer von euch bitte erklären wie es geht? (Ich bin nicht der beste Programmierer >.<)
Danke schonmal im voraus :>