Komme nicht weiter :-(



  • Hi leute,
    ich versuche jetzt schon seid drei tagen ein kleines Spiel zu amchen doch ich bekomme es nicht hin:-(. Der Sinn des Spiels ist das zwei leute jeweils zwei taseten so schnell hintereiander drücken soll wie möglich damit sich jeweils eine Spielfigur von ihenen Bewegt. Mein Problem ist dabei wie ich richtig die tastatur eingaben ablesen soll so das man nicht einfach eine taste gedrückt lassen kann sondern immer schön abwechseln. Hier mal ein bschen code wie ich das realesieren wollte aber das hat irgendwie kein sinn.

    #include <cstdlib>
    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    void player1();
    void player2();
    
    int main()
    {
    
    int schritte;    
    
    weiter:    
    
    char eingabe = getch();
    
    cout<<schritte;
    
                   switch(eingabe)
                   {
                   case 'a':  player1();  break;
                   case 's':  player1();  break;
                   case 'k':  player2();  break;
                   case 'l':  player2();  break;
                   default : goto weiter;
                   }
    
    goto weiter;    
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    void player1()
    {
    int schritte;
    char eingabe = getch();
    char wunsch = 'a';
    
         if(eingabe==wunsch)
         {
         schritte=schritte+1;
         wunsch='s';
         }
         else
         {
          wunsch='a';   
             if(eingabe==wunsch)
             {
             wunsch='s';
             }
             else
             {
             main();
             }
          }
    
    }
    
    void player2()
    {
    //hier hab ich noch nix da ich erst aml player1 machen wollte
    
    }
    

    MFG Dalmendio



  • du brauchst zu allererst mal eine funktion, mit der du tastatureingaben on-the-fly abfragst. bei getch() wartet das programm solange bis einer eine taste drückt.
    getasynckeystate() könnte vielleicht funktionieren. allerdings weiß ich nicht wies damit in der console aussieht.

    ansonsten wäre der ansatz folgender:

    bool player1Pressed = false;
    bool darfSichBewegen = false;
    
    if(GetAsyncKeyState(/* taste*/))
    {
      if(player1Pressed)
        darfSichBewegen = false;
      else
        darfSichBewegen = true;
      player1Pressed = true;
    }
    else
    {
      playerPressed = false;
    }
    
    if(darfSichBewegen)
      fuehreBewegungAus();
    

    das ganze müsste dann in einer schleife laufen und wäre so noch von der prozessorgeschwindigkeit abhängig. aber das sollte fürs erste nicht interessieren ;).



  • erst mal danke für deine schnelle antwort. Welche Header datei benötigt die Funktion GetAsyncKeyState denn?



  • laut
    MSDN

    in winuser.h bzw. windows.h, wobei ich mir dann schon vorstellen kann, dass das zu konflikten kommt 😕

    /€:
    ich entdecke grad die funktion kbhit(). die gibt erst true zurück, falls eine taste gedrückt wird. wenn du direkt danach dann die taste mit getch() abfragst, könnte das vielleicht sogar klappen 😉

    /edit by davie: link repariert



  • und ganz streng genommen gehören weder conio.h noch GetAsyncKeyState in dieses Subforum 😉



  • Und nur so am Rande: goto ist böse!


Anmelden zum Antworten