Pfeiltasten-/WASD-Steuerung in einem Array
-
Ich hab mal eine Frage...ich will Solitaire als Console-Application realisieren und bin jetz bei der Steuerung auf folgendes Problem gestoßen:
- wenn ich [←] oder [A] betätige springt der cursor wie gewünscht nach links
- wenn ich [↑] oder [W] betätige springt der cursor wie gewünscht nach obenBis jetzt ist noch alles korrekt!
aber sobald ich [→] bzw. [↓] oder [D] bzw. [S] drücke, macht das Programm einen Scheiß, entweder springt der Cursor total komisch oder der Cursor verschwindet.
ich hoff ihr könnt mir helfen, da ich echt am Verzweifeln bin, da es logischerweise funktionieren müsste
hier ist mein Quelltext:
#include <cstdlib> #include <iostream> #include <conio.h> #include <stdio.h> #include <windows.h> #ifndef SPIEL_HPP #define SPIEL_HPP int Feld [7][7]; int cspiel; void spielen() { bool back=true; system("cls"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15); printf("SPIEL STARTEN\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14); printf("[M]enu\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6); printf("________________________________________________________________________________\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15); printf("Spiel ist noch in Arbeit!\n\n\n"); //Jedem Teil int des Arrays wird einzeln der Wert zugewiesen for (int iy=0;iy<7;iy++) { for (int ix=0;ix<7;ix++) { Feld[ix][iy]=0; } } Feld[0][0]=2; Feld[0][1]=2; Feld[0][5]=2; Feld[0][6]=2; Feld[1][0]=2; Feld[1][1]=2; Feld[1][5]=2; Feld[1][6]=2; Feld[5][0]=2; Feld[5][1]=2; Feld[5][5]=2; Feld[5][6]=2; Feld[6][0]=2; Feld[6][1]=2; Feld[6][5]=2; Feld[6][6]=2; Feld[3][3]=1; //Ausgabe von "O" von den Teil int des Arrays wenn der Wert 7 ist und zwar in Feld Form while (back) { for (int iy=0;iy<7;iy++) { printf(" "); for (int ix=0;ix<7;ix++) { if (Feld[ix][iy]==0) { printf(" O"); } else if (Feld[ix][iy]==2) { printf(" "); } else if (Feld[ix][iy]==1) { printf(" X"); } } printf("\n\n"); // Zeilenwechsel } fflush(stdin); // Taste Egal welche wird mit entsprechendem Code gesp cspiel=getch(); if (cspiel == 224 || cspiel == 0) cspiel=getch(); for (int iy=0;iy<7;iy++) { for (int ix=0;ix<7;ix++) { switch (cspiel) { case 'w': case 72: //oben if (Feld[ix][iy]==1) { int iw=Feld[ix][iy]; Feld[ix][iy]=Feld[ix][iy-1]; Feld[ix][iy-1]=iw; } break; case 's': case 80: //unten if (Feld[ix][iy]==1) { int is=Feld[ix][iy]; Feld[ix][iy]=Feld[ix][iy+1]; Feld[ix][iy+1]=is; } break; case 'd': case 77: //rechts if (Feld[ix][iy]==1) { int ia=Feld[ix][iy]; Feld[ix][iy]=Feld[ix+1][iy]; Feld[ix+1][iy]=ia; } break; case 'a': case 75: //links if (Feld[ix][iy]==1) { int id=Feld[ix][iy]; Feld[ix][iy]=Feld[ix-1][iy]; Feld[ix-1][iy]=id; } break; case 27: //Taste ESC back=false; break; default: break; } } } system("cls"); } // break; } #endif
-
Ich sehe da so direkt nix. Aber probier da mal mit dem Debugger da durch zu gehen.
-
wat fürn debugger?
-
Den den du hast. z.Bsp. gdb.
Welchen Compiler/IDE verwendest du denn?
-
ich verwend den Dev-C++