⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bomberkeyboard.c

📁 一个炸弹人游戏的源代码(win32 application)
💻 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];
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -