跳轉到內容

TI-Basic 89 程式設計/一個基本程式

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

本頁旨在讓您略窺TI-89 BASIC 能夠執行的功能。以下程式是一個遊戲,它在螢幕上顯示一個數字並移動它 10 秒。遊戲的目的是記住該數字,然後輸入它。

首先,將完整顯示程式(以便您有機會將其複製到計算器上並自己測試它的功能)。然後,將解釋每個程式碼塊的功能,以便您瞭解它的作用。然而,在深入瞭解其工作原理之前,最好先完成本手冊的其餘部分,以便您瞭解語法和結構的工作原理。

這個程式叫做“memory”。如果您想在自己的計算器上建立它,請進入程式編輯器,可以透過以下按鍵組合進入:APPS+7+3。確保下拉選單設定為“program”,並將其命名為“memory”(a-lock 應該已經開啟,所以您不需要按 alpha 按鈕)。

此外,這個程式是為 TI-89 和 TI-89 Titanium 設計的。TI-92、TI-92+ 和 Voyager 200 可能有不同的螢幕尺寸或按鍵對映,因此會阻止這個程式正常工作。如果您想測試這個程式,並且您擁有 TI-92、TI-92+ 或 Voyager 200,請在討論頁面上留下資訊,包括螢幕解析度(水平 x 垂直)以及ENTER(或等效)鍵對映到哪個數字。

以下是一些您將在本程式中遇到的字元的快速參考(同樣適用於 TI-89 和 TI-89 Titanium)

  • © 可以透過按下 + ) 來建立
  • & 可以透過按下 + ×(乘法鍵)來建立
  • 可以透過按下 + < 來建立
  • 可以透過按下 + > 來建立
  • 文字可以透過按下 + (上檔鍵以大寫文字)來複制
  • 文字可以透過按下 + ESC 來貼上

冒號後的空格僅用於可讀性,如果您刪除它們,不會影響任何東西。

:memory(m)
Prgm
©NUMBER
FnOff 1,2,3,4,5
If m>12 Then
Text "Number too large"
Stop
EndIf
If m<1 Then
Text "Number too small"
Stop
EndIf
int(m)­→n
Lbl a
ClrIO
ClrDraw
ClrGraph
setGraph("Coordinates","OFF")
setGraph("Grid","OFF")
setGraph("Axes","OFF")
int(rand()*10^n)­→x
While x≤10^(n-1)
int(rand()*10^n)­→x
EndWhile
int(rand()*50)­→z
rand(3)-2­→a
rand(3)-2­→b
0­→c
rand(56)+10­→d
rand(95-5*(n-8))+5­→e
PxlText string(x),d,e
PxlHorz 76
0­→p
For y,0,50
getKey()­→k
If k=13 Then
Exit
EndIf
PxlOff 76,p
p+1­→p
PxlOff 76,p
p+1­→p
PxlOff 76,p
p+1­→p
If mod(y,10)=0 Then
PxlOff 76,p
p+1­→p
EndIf
If c=z Then
int(rand()*50)­→z
0­→c
rand(3)-2­→a
rand(3)-2­→b
EndIf
c+1­→c
d+a­→d
If d<10 Then
10­→d
z­→c
EndIf
If d>60 Then
60­→d
z­→c
EndIf
e+b­→e
If e<5 Then
5­→e
z­→c
EndIf
If e>95-5*(n-8)+5 Then
95-5*(n-8)+5­→e
z­→c
EndIf
PxlText " ",d-8,e-4
PxlText " "&string(x)&" ",d,e-4
PxlText " ",d+8,e-4
EndFor
ClrDraw
Input "What is the number?",y
If x=y Then
Disp "Good Job!"
Else
Disp "Sorry! The number was",string(x)
EndIf
Input "Again? (0=no 1=yes)",x
If x=1 Then
Goto a
Else
DispHome
EndIf
EndPrgm


本節詳細介紹了上面程式的工作原理,逐段分解。最好在閱讀本節之前閱讀本手冊的其餘部分,因為基本結構和功能不會在此處詳細解釋。

:memory(m)
Prgm
©NUMBER

這定義了程式的名稱,它在呼叫時接受的引數,指定它是一個程式(而不是函式),並告訴目錄列表幫助第一個引數是一個 NUMBER。

:FnOff 1,2,3,4,5
If m>12 Then
Text "Number too large"
Stop
EndIf
If m<1 Then
Text "Number too small"
Stop
EndIf

這關閉了圖形螢幕上的前五個函式,這樣它們在程式執行時就不會被重新繪製。然後,如果給定的數字太大(超過 12)或太小(低於 1),則會顯示一個錯誤文字框,程式執行將停止

:int(m)­→n
Lbl a
ClrIO
ClrDraw
ClrGraph
setGraph("Coordinates","OFF")
setGraph("Grid","OFF")
setGraph("Axes","OFF")

這取給定數字的底(使其成為整數),這樣螢幕上只顯示一個完整的數字量。然後,它清除 I/O 螢幕和圖形上的所有文字/函式/圖形,並在圖形上關閉座標、網格和軸,使圖形螢幕完全空白。

:int(rand()*10^n)­→x
While x≤10^(n-1)
int(rand()*10^n)­→x
EndWhile
int(rand()*50)­→z
rand(3)-2­→a
rand(3)-2­→b
0­→c
rand(56)+10­→d
rand(95-5*(n-8))+5­→e

這初始化所有變數。x 是將在螢幕上顯示的數字,因此前四行(以 EndWhile 結尾)是一個迴圈,以確保 x 的長度正確。z 是文字在任何一個方向上移動的畫素數量。ab 指定文字移動的方向。a 指定垂直移動,因此值為 -1 表示向上移動,0 表示不垂直移動,1 表示向下移動。b 指定水平移動,因此值為 -1 表示向左移動,0 表示不水平移動,1 表示向右移動。c 是一個計數器,每次數字移動一個畫素時增加 1。de 是數字的垂直和水平起點(分別)。

:PxlText string(x),d,e
PxlHorz 76

這將數字放在螢幕上的 de 座標處,如上面的程式碼片段所示。然後,它在螢幕底部繪製一條水平線。這條線是玩家剩餘記憶顯示數字的時間的狀態列。

:0­→p
For y,0,50
getKey()­→k
If k=13 Then
Exit
EndIf
PxlOff 76,p
p+1­→p
PxlOff 76,p
p+1­→p
PxlOff 76,p
p+1­→p
If mod(y,10)=0 Then
PxlOff 76,p
p+1­→p
EndIf

這將 p 設定為 0(p 用作計數器,以檢視狀態列如何前進),然後啟動一個迴圈,執行 51 次。在迴圈開始時,會檢查計算器按鍵上的按鍵。如果按下“ENTER”鍵,迴圈將被縮短,並且程式中使用者必須輸入記憶數字的部分將被執行。否則,它將從狀態列末端刪除 3 或 4 個畫素(通常刪除 3 個畫素,如果 y -- 迴圈的計數器 -- 可以被 10 整除,則刪除 4 個畫素)。

: If c=z Then
int(rand()*50)­→z
0­→c
rand(3)-2­→a
rand(3)-2­→b
EndIf
c+1­→c

這檢查文字是否在當前方向上移動了 z 畫素,如果已經移動,則文字方向會改變。

: d+a­→d
If d<10 Then
10­→d
z­→c
EndIf
If d>60 Then
60­→d
z­→c
EndIf
e+b­→e
If e<5 Then
5­→e
z­→c
EndIf
If e>95-5*(n-8)+5 Then
95-5*(n-8)+5­→e
z­→c
EndIf
PxlText " ",d-8,e-4
PxlText " "&string(x)&" ",d,e-4
PxlText " ",d+8,e-4
EndFor

這段程式碼的開頭實際上是“移動”文字。對 d(垂直座標)和 e(水平座標)都進行了兩次檢查,以確保文字沒有移動到不再完全可見的位置。然後,它顯示用空格填充的文字,以便覆蓋之前的文字(而不是留下痕跡)。它顯示完文字後,要麼繼續執行迴圈,要麼在迴圈計數器為 50 時停止。

:ClrDraw
Input "What is the number?",y
If x=y Then
Disp "Good Job!"
Else
Disp "Sorry! The number was",string(x)
EndIf
Input "Again? (0=no 1=yes)",x
If x=1 Then
Goto a
Else
DispHome
EndIf
EndPrgm

這擦除圖形螢幕(這樣使用者就不能簡單地切換回它來檢視數字),然後在 I/O 螢幕上詢問數字。如果玩家輸入正確或錯誤,將顯示不同的文字。然後,它詢問玩家是否要重試。如果同意,它跳轉回“Lbl a”這一行。如果不同意,它將顯示主螢幕,然後停止程式執行

華夏公益教科書