📄 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];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -