跳转到内容

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”这一行。如果不同意,它将显示主屏幕,然后停止程序执行

华夏公益教科书