Pfeitasten
-
Diesen Beitrag gab es sicherlich schon 100mal. Ich habe schon gesucht habe auch etwas gefunden der Link hier: http://www.c-plusplus.net/forum/292781-full. Dort der 20te Beitrag von Incocnito, den habe ich mir genommen und getestet klappt. Aber ich möchte das nicht kopieren sondern selber schreiben, also habe ich das versucht genau wie er, aber es klappt nicht.
#include <iostream> #include <conio.h> using namespace std; int main(){ int oben=72; char eingabe; eingabe = getch(); static_cast <int>(eingabe); //Wenn ich hier cout >> eingabe; schreibe kommt also ausgabe : das Zeichen "alpha" if(eingabe==oben){ cout << "erkannt"; } else{ cout << "..."; } return 0; }Aber dieser Code klappt nicht (meiner) und ich finde den Fehler nicht.
-
Die Pfeiltasten erzeugen zwei Eingabezeichen für Deinen Eingabestream. Erst das zweite ist 72 (bei Pfeil nach oben).
Bei Incocnito wird getch() in der Schleife ein zweites Mal aufgerufen, bevor 72 erkannt wird.
-
Okay habe eine schleife gemacht. Danke
-
So ich habe nun ein kleines Programm geschrieben.
Allerdings bin ich damit noch nicht ganz zufrieden.#include <iostream> #include <conio.h> using namespace std; namespace taste{ const int p_oben = 72; const int p_unten = 80; const int p_rechts = 77; const int p_links = 75; const int esc = 27; } void pos_ausabe(char feld[], int bewegung, int &position, char *&zeiger_feld){ if(bewegung==-1){ position+=bewegung; if(position<0){ position=0; } else if(position>9){ position=9; } else{ getch( ); *zeiger_feld--='_'; } } //Nach Rechts -> else if(bewegung==1){ position+=bewegung; if(position<1){ position=0; } else if(position>9){ position=9; } else{ *zeiger_feld++='_'; } } //-------------- else if(bewegung==0){ //Nichts } feld[position]='X'; system("CLS"); for(unsigned int i=0;i<10;i++){ //Gibt das Spielfeld aus 0-9 cout << feld[i]; } } int main(){ int eingabe=0, position=0; int bewegung=0; char feld[]={'_','_','_','_','_','_','_','_','_','_'}; //von 0-9 char *zeiger_feld=feld; pos_ausabe(feld, bewegung, position, zeiger_feld); do{ eingabe=getch(); switch(eingabe){ case taste::p_oben: cout << "oben\n"; break; case taste::p_unten: cout << "unten\n"; break; case taste::p_rechts: bewegung=1; pos_ausabe(feld, bewegung, position, zeiger_feld); break; case taste::p_links: bewegung=-1; pos_ausabe(feld, bewegung, position, zeiger_feld); } }while(eingabe!=taste::esc); return 0; }Ich habe den Array als Feld genommen und wenn ich die Pfeiltasten links oder rechts drücke "läuft" das X da auch hin.
1. Wenn ich z.B. 2x recht drücke und dann links muss ich 2x links drücken bevor das X eine Stelle nach links geht. (sollte mit nur 1x sein)
2. Wenn ich z.B. 2x links drücke und dann rechts geht das X erste eine Stelle zurück dann vor und dann muss ich wieder 1x drücken damit sich das X eine Stelle nach rechts bewegt.Ich weiß nicht wo das Problem liegt oder liegen könnte.