www.pudn.com > bmbrsrc > BomberKeyboard.c


//Virtual keycodes 
#define VK_A 0x41  
#define VK_B 0x42 
#define VK_C 0x43 
#define VK_D 0x44 
#define VK_E 0x45 
#define VK_F 0x46 
#define VK_G 0x47 
#define VK_H 0x48 
#define VK_I 0x49 
#define VK_J 0x4A 
#define VK_K 0x4B 
#define VK_L 0x4C 
#define VK_M 0x4D 
#define VK_N 0x4E 
#define VK_O 0x4F  
#define VK_P 0x50  
#define VK_Q 0x51  
#define VK_R 0x52 
#define VK_S 0x53 
#define VK_T 0x54 
#define VK_U 0x55 
#define VK_V 0x56 
#define VK_W 0x57 
#define VK_X 0x58 
#define VK_Y 0x59 
#define VK_Z 0x5A 
 
//Keyboard variables for each player 
int             ChosenKeys [3 * 5]; 
int             Up [5],  
                Down [5],  
                Left [5],  
                Right [5],  
                Fire [5]; 
//Various keys 
int             Esc; 
 
//For joystick 
unsigned int    JoyUp, JoyLeft, JoyRight, JoyDown; 
int             JoyAvail; 
 
//Initializes the standard keys 
void InitKeyboard () 
{ 
  HKEY      KeyHandle; 
  JOYCAPS   JoyCaps; 
  int       Loaded = 60; 
   
  //Try loading the keys from the registry 
  RegOpenKey (HKEY_LOCAL_MACHINE, "Software\\Bomberman", &KeyHandle); 
  if (RegQueryValueEx (KeyHandle, "Keys", 0, NULL, (LPBYTE)ChosenKeys, &Loaded) == ERROR_SUCCESS) 
    RegCloseKey (KeyHandle); 
  else { 
    ChosenKeys [ 0] = VK_UP; 
    ChosenKeys [ 1] = VK_DOWN; 
    ChosenKeys [ 2] = VK_LEFT; 
    ChosenKeys [ 3] = VK_RIGHT; 
    ChosenKeys [ 4] = VK_CONTROL; 
    ChosenKeys [ 5] = VK_W; 
    ChosenKeys [ 6] = VK_X; 
    ChosenKeys [ 7] = VK_A; 
    ChosenKeys [ 8] = VK_D; 
    ChosenKeys [ 9] = VK_TAB; 
    ChosenKeys [10] = VK_U; 
    ChosenKeys [11] = VK_N; 
    ChosenKeys [12] = VK_H; 
    ChosenKeys [13] = VK_K; 
    ChosenKeys [14] = VK_B; 
  } 
   
  //Get info about joystick axes 
  JoyAvail = (joyGetDevCaps (JOYSTICKID1, &JoyCaps, sizeof (JoyCaps)) == JOYERR_NOERROR); 
  if (JoyAvail) { 
    JoyUp = (JoyCaps.wYmax - JoyCaps.wYmin) * 1 / 6; 
    JoyDown = (JoyCaps.wYmax - JoyCaps.wYmin) * 5 / 6; 
    JoyLeft = (JoyCaps.wXmax - JoyCaps.wXmin) * 1 / 6; 
    JoyRight = (JoyCaps.wXmax - JoyCaps.wXmin) * 5 / 6; 
  } 
} 
 
//Stores keyboard definition in registry 
void SaveKeys () 
{ 
  HKEY  KeyHandle; 
  RegCreateKey (HKEY_LOCAL_MACHINE, "Software\\Bomberman", &KeyHandle); 
  RegSetValueEx (KeyHandle, "Keys", 0, REG_BINARY, (LPBYTE)ChosenKeys, 60);  
  RegCloseKey (KeyHandle); 
} 
 
//Checks for keyboard input 
void CheckKeyboard () 
{ 
  JOYINFO   JoyInfo; 
  //Player 1 
  Up    [0] = GetAsyncKeyState (ChosenKeys [ 0]); 
  Down  [0] = GetAsyncKeyState (ChosenKeys [ 1]); 
  Left  [0] = GetAsyncKeyState (ChosenKeys [ 2]); 
  Right [0] = GetAsyncKeyState (ChosenKeys [ 3]); 
  Fire  [0] = GetAsyncKeyState (ChosenKeys [ 4]); 
  //Player 2 
  Up    [1] = GetAsyncKeyState (ChosenKeys [ 5]); 
  Down  [1] = GetAsyncKeyState (ChosenKeys [ 6]); 
  Left  [1] = GetAsyncKeyState (ChosenKeys [ 7]); 
  Right [1] = GetAsyncKeyState (ChosenKeys [ 8]); 
  Fire  [1] = GetAsyncKeyState (ChosenKeys [ 9]); 
  //Player 3 
  Up    [2] = GetAsyncKeyState (ChosenKeys [10]); 
  Down  [2] = GetAsyncKeyState (ChosenKeys [11]); 
  Left  [2] = GetAsyncKeyState (ChosenKeys [12]); 
  Right [2] = GetAsyncKeyState (ChosenKeys [13]); 
  Fire  [2] = GetAsyncKeyState (ChosenKeys [14]); 
  //Player 4 - joystick 
  if (JoyAvail) { 
    joyGetPos (JOYSTICKID1, &JoyInfo); 
    Up    [3] = (JoyInfo.wYpos < JoyUp); 
    Down  [3] = (JoyInfo.wYpos > JoyDown); 
    Left  [3] = (JoyInfo.wXpos < JoyLeft); 
    Right [3] = (JoyInfo.wXpos > JoyRight); 
    Fire  [3] = (JoyInfo.wButtons & JOY_BUTTON1); 
  } 
 
  Esc       = GetAsyncKeyState (VK_ESCAPE); 
} 
 
//Flush the keyboard buffer 
void FlushKeys () 
{ 
  InPointer = OutPointer; 
} 
 
//Returns a character 
char getch () 
{ 
  char t; 
 
  if (InPointer == OutPointer)  
    return -1; 
  else { 
    t = OutPointer++; 
    OutPointer %= 50; 
    return InBuffer [t]; 
  } 
}