60 lines
1.2 KiB
C
60 lines
1.2 KiB
C
#include "game.h"
|
|
#include <amdev.h>
|
|
|
|
/* a-z对应的键盘扫描码 */
|
|
|
|
static int letter_code[] = {
|
|
_KEY_A, _KEY_B, _KEY_C, _KEY_D, _KEY_E, _KEY_F, _KEY_G,
|
|
_KEY_H, _KEY_I, _KEY_J, _KEY_K, _KEY_L, _KEY_M, _KEY_N, _KEY_O, _KEY_P,
|
|
_KEY_Q, _KEY_R, _KEY_S, _KEY_T, _KEY_U, _KEY_V,
|
|
_KEY_W, _KEY_X, _KEY_Y, _KEY_Z,
|
|
};
|
|
|
|
/* 对应键按下的标志位 */
|
|
static bool letter_pressed[26];
|
|
|
|
void press_key(int scan_code) {
|
|
int i;
|
|
for (i = 0; i < 26; i ++) {
|
|
if (letter_code[i] == scan_code) {
|
|
letter_pressed[i] = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
void release_key(int index) {
|
|
letter_pressed[index] = false;
|
|
}
|
|
|
|
bool query_key(int index) {
|
|
return letter_pressed[index];
|
|
}
|
|
|
|
static int key_code = 0;
|
|
|
|
int last_key_code(void) {
|
|
return key_code;
|
|
}
|
|
|
|
#define KEYDOWN_MASK 0x8000
|
|
bool keyboard_event() {
|
|
int keycode = read_key();
|
|
if ((keycode & ~KEYDOWN_MASK) == _KEY_ESCAPE) _halt(0);
|
|
if ((keycode & ~KEYDOWN_MASK) == _KEY_NONE) return false;
|
|
|
|
if ((keycode & KEYDOWN_MASK) != 0) {
|
|
key_code = keycode & ~KEYDOWN_MASK;
|
|
press_key(key_code);
|
|
return true;
|
|
}
|
|
else {
|
|
for (int i = 0; i < 26; i++) {
|
|
if (keycode == letter_code[i]) {
|
|
release_key(i);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|