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 来粘贴
冒号后的空格仅用于可读性,如果您删除它们,不会影响任何东西。
- 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
本节详细介绍了上面程序的工作原理,逐段分解。最好在阅读本节之前阅读本手册的其余部分,因为基本结构和功能不会在此处详细解释。
- Prgm
- ©NUMBER
这定义了程序的名称,它在调用时接受的参数,指定它是一个程序(而不是函数),并告诉目录列表帮助第一个参数是一个 NUMBER。
- If m>12 Then
- Text "Number too large"
- Stop
- EndIf
- If m<1 Then
- Text "Number too small"
- Stop
- EndIf
这关闭了图形屏幕上的前五个函数,这样它们在程序运行时就不会被重新绘制。然后,如果给定的数字太大(超过 12)或太小(低于 1),则会显示一个错误文本框,程序执行将停止
- Lbl a
- ClrIO
- ClrDraw
- ClrGraph
- setGraph("Coordinates","OFF")
- setGraph("Grid","OFF")
- setGraph("Axes","OFF")
这取给定数字的底(使其成为整数),这样屏幕上只显示一个完整的数字量。然后,它清除 I/O 屏幕和图形上的所有文本/函数/图形,并在图形上关闭坐标、网格和轴,使图形屏幕完全空白。
- 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 是文本在任何一个方向上移动的像素数量。a 和 b 指定文本移动的方向。a 指定垂直移动,因此值为 -1 表示向上移动,0 表示不垂直移动,1 表示向下移动。b 指定水平移动,因此值为 -1 表示向左移动,0 表示不水平移动,1 表示向右移动。c 是一个计数器,每次数字移动一个像素时增加 1。d 和 e 是数字的垂直和水平起点(分别)。
- PxlHorz 76
这将数字放在屏幕上的 d 和 e 坐标处,如上面的代码片段所示。然后,它在屏幕底部绘制一条水平线。这条线是玩家剩余记忆显示数字的时间的状态栏。
- 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 个像素)。
- int(rand()*50)→z
- 0→c
- rand(3)-2→a
- rand(3)-2→b
- EndIf
- c+1→c
这检查文本是否在当前方向上移动了 z 像素,如果已经移动,则文本方向会改变。
- 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 时停止。
- 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”这一行。如果不同意,它将显示主屏幕,然后停止程序执行