Thu hoạch input từ bàn phím là một việc có phần nào đơn giản vì nó là một thiết bị xác lập mặc định. Bàn phím cần có một bộ nhớđệm chứa 256 phần tử ma trận kí tự.
Char buffer[256];
Ma trận kí tự này lưu giữ trạng thái của mỗi phím trên bàn phím. Trạng thái của một hoặc nhiều phím có thểđược lưu trong ma trận này mỗi khi biết bị bàn phím được đọc. Điều mà hầu hết các game đều cần là Input Device có thểđọc mỗi trạng thái từ trong vòng lặp chính của game.
Trước khi bạn có thể đọc từ bàn phím, bạn cần xác định một bước quan trọng là phím nào trên bàn phím đã nhấn. Macro KEYDOWN cung cấp dưới đây trả vềTRUE hoặc FALSE dựa trên cơ sở phím mà bạn đang kiểm tra có được nhấn hay không..
#define KEYDOWN (name, key) { name[key]& 0x80} sau đây là ví dụ đọc từ bàn phím.
//xác định macro cần kiểm tra trạng thái cảu phím trên bàn phím. #define KEYDOWN (name, key) { name[key]& 0x80}
Char buffer[256];
//đây là vòng lặp chính đọc từ Input Device của mỗi khung while(1)
{
//kiểm tra bàn phím và xem xét phím nào hiện tại đang được nhấn g_lpDIDevice->GetDeviceState(sizeof (buffer), (LPVOID )&buffer); //làm việc gì đó với Input
//KEYDOWN macro ở đay kiểm tra phím mũi tên sang trái có được nhấn hay không if (KEYDOWN(buffer, DIK_LEFT))
{
//làm gì đó vói mũi tên sang trái }
// KEYDOWN được sử dụng một lần nữa để kiểm tra phím mũi tên lên trên //có đựoc nhấn hay không
if(KEYDOWN(buffer, DIK_UP)) {
//làm một việc gì đó với phím mũi tên lên trên }
}
Như bạn có thể thấy là vòng lặp chính của game gọi hàm GetDeviceState cho mỗi trạng thái và đưa trạng thái hiện tại của bàn phím vào Input Buffer. KEYDOWN macro kiểm tra trạng thái của một phím nào đó.
Hình 9.2 chỉ ra một minh họa nhỏ về sử dụng bàn phím đưa vào để hiển thị mũi tên định hướng nào đã đượcc nhấn.
Bạn có thể tìm thấy mã nguồn của ví dụ này trong thư mục chapter9\example1 trên đĩa CD-ROM