Abfrage eines Zeichens aus dem Konsoleninput ohne kurze Pause nach ersten Zeichen



  • mikey du kannst mir warscheinlich auch sagen wie ich peiltasten ohne pfusch richtig auslesse vll sogar mit kleinem bsp cod



  • Danke. Das hat mir schon sehr geholfen. Ist zwar noch nicht ganz perfekt, aber nah dran.

    @GAMES:

    intkey = 0;
    do
    {
        if(_kbhit())
        {
            key = _getch();
    
            if(key == 'A')
            {
                // shift + 'A' is pressed
            }
            else if(key == 'a')
            {
                // 'A' is pressed
            }
            else if(key == 224)
            {
                key == _getch();
    
                if(key == 75)
                {
                    // key left is pressed down
                }
                else if(key == 77)
                {
                    // key right is pressed down
                }
            }
        }
    }
    while(key != 13);
    

    So sieht das bei mir immer aus.



  • hab ne gepfuschte version die wird jetzt überarbeidet ich frag mich wie die eig laufen kann fraglich aber jetzt wirds verbessert
    zu deinem problem mit dem gleichzeitig glaub wenn du 2 tasten drückst werden die nacheinander eingegeben vll kannst ja deine eingaben in einem array speichern und die dann auswerten auf diese weiße würd ich versuchen das problem zu lösen
    ein array der genau oder max 2 eingaben speichert und diese nach der auswertung\weiterverarbeitung löscht
    ich denk mal dein mänchen soll nur vor zurück springen und vll sich ducken können



  • Ich kann das Problem von The Key problemlos nachvllziehen. Habe aus dem gleichen Grund "nur" ein Snake programmiert da man da ja nicht die taste gedrückt halten muss.anscheinend liegts an kbhit(); das funktuniert nicht so wies sollte^^



  • GAMES schrieb:

    mikey du kannst mir warscheinlich auch sagen wie ich peiltasten ohne pfusch richtig auslesse vll sogar mit kleinem bsp cod

    Aber immer gerne doch:

    eing = getch ();
    switch(eing)
    {
        case 72: /* Nach oben-Taste   */   break;
        case 80: /* Nach unten Taste  */   break;
        case 75: /* Nach links-Taste  */   break;
        case 77: /* Nach rechts-Taste */   break;
        default:break;
    }
    

    Dede1989 schrieb:

    anscheinend liegts an kbhit(); das funktuniert nicht so wies sollte

    Nene, das funktioniert schon so, wie es funktionieren soll. Es liegt nur am Anwender 😉



  • Gut ich habe diese WinAPI-Funktionen getestet. Sie machen fast alle was sie sollen.

    Was ich jetzt doch noch wissen will:
    1. Was wäre denn an Standard besser, weil du etwas von 'unsauber' sagtest.
    2. GetKeyboardState liefert nicht keine vernünftigen Werte. GetAsyncKeyState tut zwar auch seine Schuldigkeit, aber mir würde es doch gefallen, alle Werte auf einmal zu erhalten.



  • The Key schrieb:

    1. Was wäre denn an Standard besser, weil du etwas von 'unsauber' sagtest.

    Eine Standard C++ Lösung ist deshalb immer besser, weil der daraus resultierende Code portabel ist, also auf allen Platformen läuft. Lösungen, die z.B. mit getch() und anderen Funktionen aus diversen non-Standard Headern arbeiten, müssen sich nicht zwangsläufig unter jedem Compiler kompilieren lassen, da es nicht vorgeschrieben wird, ob diese mitgeliefert werden müssen, oder nicht.

    The Key schrieb:

    2. GetKeyboardState liefert nicht keine vernünftigen Werte. GetAsyncKeyState tut zwar auch seine Schuldigkeit, aber mir würde es doch gefallen, alle Werte auf einmal zu erhalten.

    Da gibt es afaik keine fertige Lösung, die wirst du dir selbst in eine Funktion packen müssen.



  • beim einlessen der pfeiltasten ist die lösung von The Key besser als die von dir mikey da er überprüft ob es wirklich eine Pfeiltaste ist bei dir kommt dein programm mit den Pfeiltasten und PMKH glaub ich durcheinander (haben beide bei dir den gleichen zahlen wert) 😉
    und an The Key ich würd mir eine funktion basteln die genau das kann was du willst
    amein ansatz wäre der array denn ich oben genannt habe



  • Achso, das mit den Verwechslungen der anderen Tasten hatte ich garnicht berücksichtigt. Da ist die Lösung von 'The Key' natürlich wesentlich besser 😉



  • keiner ist perfekt^^
    ich nicht du nicht keiner 😉
    weil ich hatte eine ähnliche lösung wie du
    deswgen war die frage auch ohne pfusch 😉
    ich glaub wenn du anstatt de 224 die 0 nimmst kannst auch die pfeiltasten vom nummernblock rauslessen



  • Haben wir doch alle wieder was gelernt. 😉

    Das mit der Funktion basteln würd ich ja gerne machen oder auch das ganze in eine Klasse kapseln, aber wenn der Standard es nicht hergibt (wo ich eigentlich sagen muss, dass er dann den Namen Standard nicht verdient), dann müssen halt erstmal andere Funktionen her.

    mein ansatz wäre der array denn ich oben genannt habe

    Die Idee ist gut. Und mit der WinAPI-Funktion GetKeyboardState wäre das Problem eigentlich gelöst, aber genau diese Funktion geht nicht bzw. sie füllt das Array nicht ordentlich aus.



  • GAMES schrieb:

    ich glaub wenn du anstatt de 224 die 0 nimmst kannst auch die pfeiltasten vom nummernblock rauslessen

    Wir kennen uns nicht zufällig, GAMES?



  • kann schon sein 😉



  • sry für doppel post aber mir sind keine standet mittel und c/c++ bekannt
    ließt getch() nicht normalein zeichen aus dem Eingabepuffer (glaub das erste) dies macht er ja auch bei deinem cod nach dem kbhit() also müstest du doch so auch denn array füllen können



  • ließt getch() nicht normalein zeichen aus dem Eingabepuffer (glaub das erste) dies macht er ja auch bei deinem cod nach dem kbhit() also müstest du doch so auch denn array füllen können

    Stimmt schon, aber wenn ich mehrere Tasten gleichzeitig gedrückt halte, wird nur eine in den Buffer geschrieben (die letzte, die gedrückt wurde) und das ist Mist. Ich kann also nie rausfinden, welche Tasten gleichzeitig gedrückt gehalten werden.

    Ich hab gehört, dass das Ganze gehookt werden muss... Ich hab aber keine Ahnung wie.


Anmelden zum Antworten