2011-12-08 13 views

Odpowiedz

12

Rzeczywiście zostało już zadane, a odpowiedź brzmi, że nie możesz tego zrobić.

C++ nie ma koncepcji klawiatury ani konsoli. Zna tylko nieprzejrzysty wejściowy strumień danych.

Twoja fizyczna konsola preprocesuje i buforuje aktywność klawiatury i wysyła tylko gotowane dane do programu, zazwyczaj liniowo. Aby bezpośrednio porozmawiać z klawiaturą, potrzebujesz specyficznej dla platformy biblioteki obsługi terminalu.

W systemie Linux zazwyczaj odbywa się to przy pomocy bibliotek ncurses lub termcap/terminfo. W systemie Windows można użyć pdcurses lub Windows API (chociaż nie znam tego aspektu).

Szkielety graficzne aplikacji, takie jak SDL, Allegro, Irrlicht lub Ogre3D są również wyposażone w pełną obsługę klawiatury i myszy.

+7

Naprawdę masz szczęście, że nie jesteś zaznajomiony z winAPI. Ignorancja jest rozkoszą! :) – FailedDev

+1

@FailedDev: hehe - trochę wiem, i widziałem moją część węgierskich skrętów po języku i 'LPHANDLE's :-) Nigdy nie widziałem czegoś związanego z obsługą terminalu ... za darmo dzwonić z kilkoma wskazówkami! :-) –

+0

:) Nie zrobiłem też czegoś takiego, chociaż jestem pewien, że to możliwe. Ale OP nie wydaje się być zainteresowany konkretnym systemem operacyjnym, chociaż powinien: :) – FailedDev

10

Oto wskaźnik, jeśli nie przeszkadza Ci użycie getch() z adresu conio.h.

#include <stdio.h> 
#include <conio.h> 

#define KB_UP 72 
#define KB_DOWN 80 
#define KB_LEFT 75 
#define KB_RIGHT 77 
#define KB_ESCAPE 27 


int main() 
{ 
    int KB_code=0; 

    while(KB_code != KB_ESCAPE) 
    { 
    if (kbhit()) 
     { 
      KB_code = getch(); 
      printf("KB_code = %i \n",KB_code); 

      switch (KB_code) 
      { 
       case KB_LEFT: 
          //Do something 
       break; 

       case KB_RIGHT: 
          //Do something      
       break; 

       case KB_UP: 
          //Do something      
       break; 

       case KB_DOWN: 
          //Do something      
       break; 

      }   

     } 
    } 

    return 0; 
} 
Powiązane problemy