TI-Basic Z80 程式設計/命令列表/GetKey
Getkey 是 TI-Basic 中使用者互動的重要功能。getkey 可以發現在 PGRM...Right...7... 中,它將顯示以下內容
:getkey
是的,它將在執行該程式碼塊時獲取按鍵的編號。但是,該 getkey 很短,因此很難獲得準確的按鍵編號。因為如果你在執行它時沒有按任何鍵,它將返回 0。
請記住,沒有執行某種操作的情況下,
:getkey->X
getkey 將把其結果儲存在 Ans 變數中。
如何獲取準確的記錄?
好吧,有一個簡單的 while 迴圈可以做到。它非常容易,我將在下面解釋...
:While 1 :getkey :If ans : ''Things to do'' : :End
它之所以有效,是因為首先,你設定了一個迴圈。如果沒有按下任何鍵,它將跳過 if 條件,然後按順序執行它下面的任何其他內容。看,如果 getkey 返回了 0,那麼計算器將跳過 if 條件,直接回到迴圈開頭,再次檢查 getkey。因此,這將一直持續到按下鍵!
此示例將在按下按鈕時顯示“BUTTON PRESSED”。
:0→K :While K=0 :getKey→K :End :Disp "BUTTON PRESSED"
現在,我將逐行解釋...
:Lbl K
該 Lbl K 用於在需要獲取按下的按鍵編號時始終迴圈回。它將使迴圈成為可能。
:getkey→K
這是最重要的部分。你需要 getkey 來獲取按鍵編號!'→K' 將把 getkey 的返回值儲存到變數 'K' 中。
:While K>0
此 while 迴圈也很重要,因為你希望某些操作僅在按下鍵時發生。因此,按鍵值在 K 中,它將檢查 K 是否實際上大於 0。如果是,它將執行程式碼塊 'Disp "BUTTON PRESSED"'.
:Disp "BUTTON PRESSED"
你還需要它來實際檢視按鈕是否被按下。每當 While 迴圈被執行時,Disp 命令將被執行,顯示一個通知...
:End
這是該程式碼塊最重要的部分。如果沒有 End,結果將是...
:Lbl K :getkey->K :While K>0 :Disp "BUTTON PRESSED" : :Goto K
現在你注意到有什麼缺陷了嗎?是的!
你認為這段程式碼會重複執行嗎?不!
你知道為什麼它不會重複執行嗎?它不會重複執行,因為那裡沒有 'End'!即使它有 'Goto K' 語句,它仍然在 While 迴圈中,因此,如果沒有按鍵,'Goto K' 不會被執行,導致程式退出。在需要退出 while 迴圈時,包含 'End' 是必不可少的。
例如,這將顯示按下的按鍵編號... 你可以在計算器中使用它作為一個小工具。只需按下你想要的按鈕,它將顯示其對應的按鍵編號。如下所示;
:Lbl 1 :getKey :If Ans > 0 :Disp Ans :Goto 1
現在,如果你想對特定按鍵做出響應,例如 2nd 或 Enter,你將 '>0' 更改為 '=N',其中 N 是按鍵編號。圖表如下所示
你注意到有什麼奇怪的嗎?是的!On 沒有“註冊”。此按鍵沒有返回整數,而是返回了一箇中斷,這意味著它會中斷程式。有 ASM 工具可以遮蔽此 On 鍵。它們在TI-Calc.Org 上廣泛可用。無論如何,看看其他按鍵。你注意到它們是如何組織的嗎?
是的,每行都以 11...21...31...41...51...61...71...81...91...101... 開頭,這是因為它易於記憶。
這裡,讓我們使用一些例子...
:Lbl 1 :getkey :If Ans = 11 :Disp "Y= was PRESSED" :If Ans = 21 :Disp "2ND WAS PRESSED" :Goto 1
程式碼應該不言自明。它檢查按鍵 11 或 21 是否被按下,並顯示相應的訊息。
你是否覺得 Disp 東西很無聊?好吧,讓我們繼續前進,移動東西吧!
現在,我們只移動一個畫素,但隨著你的不斷練習,你會變得越來越複雜!
示例
:ClrDraw :47→X:31→Y :Lbl 1 :getKey→K :If K=25 :ClrDraw :Y-1→Y :Pxl-On(Y,X) :End :If K=34 :ClrDraw :Y+1→Y :Pxl-On(Y,X) :End :If K=24 :X-1→X :Pxl-On (Y,X) :End :If K=26 :X+1→X :Pxl-On (Y,X) :End :Goto 1
現在,前面的程式碼只是在螢幕上移動了一個畫素。
如果你瘋狂地按按鈕,並收到一條錯誤訊息:ERR-MEMORY,那麼你就不走運了。與 Asm 相比,(可怕的)記憶體錯誤是 BASIC 最糟糕的功能,因為任何 BASIC 程式如果執行時間足夠長,最終都會變慢並停止,並出現記憶體錯誤。記憶體錯誤的主要原因:程式碼效率低下和程式執行時間過長。請注意,使用高效的程式碼,執行時間會長得多... 以下是一個低效程式碼的示例
:0->A :While A<10 :A+1->A :If A=5:Goto X :End :Lbl X
為什麼?Goto 標籤退出了 While 迴圈,但它仍然停留在記憶體中,因為它從未到達 'End' 命令(簡單地在上面的程式碼中 Lbl X 後面放置 'End' 不會起作用!因此,主要為了最佳化你的程式碼,請擺脫 Goto 和 Lbl,它們對你和你的程式都不利!用更有效的 Repeat、While 和 For 迴圈替換它們。嘿,抱歉,但我建立了一個等式集,它做著同樣的事情,但速度更快,而且程式碼更短 1->B 1->C Lbl0 Output(B,C,"A getkey->A B-(A=25)+(B=34->B C-(A=24)=(A=26->C Goto0 將值儲存在 B 和 C 中 Label 0 在座標中輸出 A,並將按鍵儲存在 A 中 等式不言自明,如果你知道按鍵碼,最後是 goto label0 希望這有幫助!
