Tastenabfrage in C



  • Also ich habe versucht ein programm zu schreiben das:
    - sich über W,A,S,D steuern lässt
    - auf eine bestimmt stelle kommen muss um das nächste Level zu erreichen

    Das ganze soll ganz normal auf der console sein. Ich habe mich jetzt ein bisschen mit der Tastenabfrage rumgequält und weiß leider nicht wie das genau funktioniert.
    Ich habe es mit verschiedenen "case" versucht.

    Das ganze ist mir dem Borland C++ Compiler geschrieben

    Es wäre schön wenn mir jemand helfen könnte.

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    main()
    {
     int level,xziel,yziel,spielerx,spielery,taste;
     level=0;           
     spielerx=45;
     spielery=15;
     randomize();
     xziel=random(80);
     yziel=random(30);
     gotoxy(xziel,yziel);
     printf("o");
     gotoxy(spielerx,spielery);
     while(level==0)
     {
      printf("o");
      switch(taste)
      {
       case a:
       clrscr();                     
       spielerx--;
       gotoxy(spielerx,spielery);
       printf("o");
       break;
    
       case d:
       clrscr;
       spielerx++;
       gotoxy(spielerx,spielery);
       printf("o");
       break;
    
       case s:
       clrscr;
       spielery++;
       gotoxy(spielerx,spielery);
       printf("o");
       break;
    
       case w:
       clrscr;
       spielery--;
       gotoxy(spielerx,spielery);
       printf("o");
       break;
      }
     if(spielerx && spielery == xziel && yziel)
     {
      level++;
     }
     }
     clrscr();
     gotoxy(45,15);
     printf("Gewonnen");
    getch();
    }
    


  • Hinweise gibt es hier: http://www.c-plusplus.net/forum/39320

    Du liest dann ein Zeichen ein. Ein Zeichen ist z.B. 'a'. nicht zu verwechseln mit a . Das ist eine Variable.



  • Okay, nur mit der Brechstange:

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    int main()  // int ist mehr C
    {
        int level,xziel,yziel,spielerx,spielery,taste;
        level=0;
        spielerx=45;
        spielery=15;
        randomize();
        xziel=random(80);
        yziel=random(30);
        gotoxy(xziel,yziel);
        printf("o");
        gotoxy(spielerx,spielery);
        while(level==0)
        {
            printf("o");
            taste = getch();  // Woher soll dein Programm sonst wissen welche Taste?
            switch(taste)
            {
            case 'a':
                clrscr();
                spielerx--;
                gotoxy(spielerx,spielery);
                printf("o");
                break;
    
            case 'd':
                clrscr;
                spielerx++;
                gotoxy(spielerx,spielery);
                printf("o");
                break;
    
            case 's':
                clrscr;
                spielery++;
                gotoxy(spielerx,spielery);
                printf("o");
                break;
    
            case 'w':
                clrscr;
                spielery--;
                gotoxy(spielerx,spielery);
                printf("o");
                break;
            }
            if(spielerx && spielery == xziel && yziel)
            {
                level++;
            }
        }
        clrscr();
        gotoxy(45,15);
        printf("Gewonnen");
        getch();
        return 0;  // mein Bcc will das so.
    }
    

    Da ich nicht weiss mit welchem bcc du ans Werk gehst, kann es sein das du noch etwas ändern musst. Ich denke das dein Quelltext nur auf alten Compilern läuft.
    Hab es nicht getestet Turbo C 1.0, 1.5, 2.0 oder so?

    Die Feinheiten darfst du dann umsetzen. Da sollte noch ein wenig geschraubt werden 👍

    MfG f.-th.



  • Das if(spielerx && spielery == xziel && yziel) musst du auch noch anders formulieren.



  • bei den

    clrscr;
    

    solltest du auch noch mal genau hinsehen.

    Teile des Quelltextes sind redundant 😉

    MfG f.-th.



  • Schoneinmal vielen Dank für die schnellen antworten, das programm wird jetzt aufjedenfall schon compilt. Es funktioniert aber nochnicht ganz so wie ich es mir vorstelle.

    Wenn ich nach ob bzw nach unten gehe printet er immer 2x "o" nebeneinander.

    #include <stdio.h>
     #include <conio.h>
     #include <stdlib.h>
    
    int main()
     {
         int level,xziel,yziel,spielerx,spielery,taste;
         level=0;
         spielerx=45;
         spielery=15;
         randomize();
         xziel=random(80);
         yziel=random(30);
         gotoxy(xziel,yziel);
         printf("o");
         gotoxy(spielerx,spielery);
         while(level==0)
         {
             printf("o");
             taste = getch();
             switch(taste)
             {
             case 'a':
                 spielerx--;
                 gotoxy(spielerx,spielery);
                 printf("o");
                 break;
    
             case 'd':
                 spielerx++;
                 gotoxy(spielerx,spielery);
                 printf("o");
                 break;
    
             case 's':
                 spielery++;
                 gotoxy(spielerx,spielery);
                 printf("o");
                 break;
    
             case 'w':
                 spielery--;
                 gotoxy(spielerx,spielery);
                 printf("o");
                 break;
             }
             if(spielerx == xziel)
             {
              if(spielery == yziel)
               {
                 level++;
               }
             }
         }
         clrscr();
         gotoxy(35,15);
         printf("Gewonnen");
         getch();
         return 0;
     }
    

    Hier nochmal ein Bild davon

    http://img.webme.com/pic/a/advents/c_viuless.png



  • PS: Ich nutze Borland C++ die Verison 5.02



  • Okay es hat sich schon erledigt, ich habe es bereits selbst lösen können.
    Wenn ich weitere Frage habe melde ich mich nocheinmal.


Anmelden zum Antworten