跳轉到內容

QBasic/高階輸入

來自華夏公益教科書,開放的書籍,為開放的世界

從使用者獲取即時資訊有點困難。為此,我們將使用 INKEY$ 命令,該命令檢查使用者是否輸入了鍵並向程式提供按鍵。

看看這段程式碼,然後我們將深入瞭解它

DO
	LET k$ = INKEY$
LOOP UNTIL k$ <> ""
SELECT CASE k$
	CASE "q"
		QuitProgram
	CASE "c"
		MakeCircle
	CASE "s"
		MakeSquare
END SELECT

第一部分是 DO-LOOP,它不斷輪詢 INKEY$ 以獲取返回值。在基本使用中,INKEY$ 如果沒有按下任何鍵,則返回一個空字串並繼續執行程式。一旦按下鍵,INKEY$ 將立即返回該鍵。

鍵盤緩衝區

[編輯 | 編輯原始碼]

INKEY$ 在做什麼,它是如何工作的?

雖然 INKEY$ 命令看起來像是在返回當前按下的鍵,但事實並非如此。它由程式用來回答“鍵盤緩衝區裡有什麼?”這個問題。要理解這一點,你需要了解基本緩衝區是什麼以及為什麼要使用它。

在舊系統(不一定是指 IBM PC)中,一個單一的晶片處理鍵盤輸入,並控制 Caps Lock 和 Number Lock 的 LED 指示燈。由於計算機同時執行許多操作(例如,從滑鼠獲取輸入、計算資料、呼叫子例程、在螢幕上顯示新資訊),因此它需要能夠記住在忙碌時鍵盤上按了什麼鍵。該晶片包含一些記憶體(稱為緩衝區),可以用來跟蹤有限數量的按鍵。

在 IBM PC 上的 Dos 平臺下,硬體略有變化。不再是硬體緩衝區,而是按下或釋放一個鍵會中斷正在執行的程式,將一個擊鍵新增到位於 BIOS 中的軟體緩衝區。此過程通常使用者不會注意到,對系統性能的影響也很小。但是,該緩衝區允許 15 個字元:嘗試在計算機繁忙時溢位它會導致短暫的蜂鳴聲並丟棄任何其他字元。

INKEY$ 命令將此緩衝區用作 FIFO(先進先出)緩衝區。例如,假設你有一個遊戲,螢幕上有一個彈跳球,底部有一個球拍。計算機程式必須不斷更新螢幕以顯示球的運動。在執行此操作時,程式會經過 INKEY$ 命令以檢視返回什麼值。如果使用者自上次呼叫命令以來按下了鍵,它將返回該鍵。假設球向右移動,使用者需要按“R”鍵告訴程式向右移動球拍。由於程式忙於移動球並更新螢幕,因此它不會立即注意到使用者按下了鍵。相反,按鍵會被儲存在鍵盤緩衝區中,並在幾毫秒(或微秒)後在使用 INKEY$ 命令時被檢索。

在許多程式中(如上所述),INKEY$ 會出現在迴圈中。它被反覆請求。這允許程式一次獲取一個字元的使用者輸入。使用上面的例子,使用者可能需要反覆按下 R 鍵,直到球拍在球的下方。另一方面,使用者可能按下了太多次 R,需要按下 L 鍵將其向左移動。由於 INKEY$ 命令使用的是 FIFO 緩衝區,因此它將始終按輸入鍵的順序檢索它們。

總之,INKEY$ 命令將始終返回並刪除鍵盤緩衝區中的第一個字元。通常,它被反覆使用以檢索所有已按下的鍵,並允許使用者以接近“即時”的方式與程式互動。如果鍵盤緩衝區中沒有鍵,INKEY$ 將返回一個空字串(無字元)。

掃描碼

[編輯 | 編輯原始碼]

某些按鍵與 ASCII 字元無關。當按下這些鍵之一時,INKEY$ 會返回一個包含兩個字元的字串:第一個字元是空字元(ASCII 碼 0),第二個字元是鍵盤的原始掃描碼。QBASIC 幫助檔案中包含了掃描碼的完整列表。你也可以透過在按下這些鍵時檢查 INKEY$ 的結果來確定掃描碼。

注意
某些鍵無法被 INKEY$ 直接檢測到。

  Ctrl+            Extended; prefixed with CHR$(0)
 1  A               3   Ctrl+2
 2  B              15   Shift+Tab
 3  C              
 4  D                Alt+    Alt+    Alt+     Alt+
 5  E              16  Q   30  A   44  Z   120  1
 6  F              17  W   31  S   45  X   121  2
 7  G              18  E   32  D   46  C   122  3
 8  H  Backspace   19  R   33  F   47  V   123  4
 9  I  Tab         20  T   34  G   48  B   124  5
10  J  Ctrl+Enter  21  Y   35  H   49  N   125  6
11  K              22  U   36  J   50  M   126  7
12  L              23  I   37  K           127  8
13  M  Enter       24  O   38  L           128  9
14  N              25  P                   129  0
15  O                                      130  -
16  P                 Shift Ctrl Alt       131  =
17  Q              59   84   94  104  F1
18  R              60   85   95  105  F2
19  S              61   86   96  106  F3
20  T              62   87   97  107  F4
21  U              63   88   98  108  F5
22  V              64   89   99  109  F6
23  W              65   90  100  110  F7
24  X              66   91  101  111  F8
25  Y              67   92  102  112  F9
26  Z              68   93  103  113  F10
27  [  Escape     133  135  137  139  F11
28  \             134  136  138  140  F12
29  ]
30  6              71  Home   72  Up    73  PgUp
31  -              75  Left             77  Right
                   79  End    80  Down  81  PgDn
   Ctrl+           82  Insert           83  Del
127 Backspace
                  119  Ctrl+Home   132  Ctrl+PgUp
                  115  Ctrl+Left   116  Ctrl+Right
                  117  Ctrl+End    118  Ctrl+PgDn
華夏公益教科書