跳转到内容

TI-Basic 程序/追逐

来自维基教科书,开放世界中的开放书籍

程序说明

[编辑 | 编辑源代码]

追逐是一款简单而有趣的游戏。在游戏中,玩家扮演一个“大于”符号(>),它要吃掉一些 X。游戏在常规的打字屏幕上进行,有 6 个角色可以在屏幕上移动。一个是玩家的角色,即 > 符号。另一个是 X,是玩家应该移动到并吃掉的角色,一旦他到达它。然而,其他四个是“不等于”符号 (≠),它们很凶狠,如果玩家离它们足够近,它们会试图吃掉玩家。追逐有一个标题屏幕,它通过 CSTART 程序在图形屏幕上绘制出来,该程序也必须在玩家的计算器上,才能玩追逐。标题屏幕有四个选项,分别是
1) 新游戏(开始新游戏)
2) 继续(继续当前保存的游戏)
3) 指示(显示追逐的指示)
4) 退出(退出程序并返回主屏幕)。

在指示页面中,上面提到的信息的大部分都涵盖了,以及其他信息,比如游戏控制使用哪些按键。在游戏中,五个非玩家角色(四个 ≠ 和 X)自行移动,随机遵循四种模式中的任何一种。例如,如果其中一个 ≠ 向左移动一个空格,那么另一个将向上移动,另一个将向下移动,另一个将向右移动。两个 ≠ 永远不会在一步中朝着同一个方向移动。此外,X 的移动将与四个怪物中的一个的移动平行。玩家用来移动的控制键显示在指示页面上。玩家可以按下除 5 以外的任何 9 个数字键(1-9)来移动他的角色。例如,按下 7 键将使玩家的角色向上移动一个空格,向左移动一个空格,按下 8 键将只使玩家的角色向上移动一个空格。这个解释可能难以理解,但通过玩游戏很容易弄明白。

玩家的分数在整个游戏过程中显示在屏幕的右上角。每当玩家吃掉 X 角色时,他的分数显示中就会增加一分。此外,X 会消失并在屏幕上的其他地方重新生成。每当玩家开始游戏时,追逐标题屏幕都会显示玩家的最高分数。

最后一个控制键是 ENTER 键,它可以暂停/保存你当前正在玩的游戏。如果玩家在玩游戏时按下它一次,他可以保存他的游戏,并在任何时候通过启动 prgmCHASE 并选择上面提到的选项 2,继续,来返回到他的游戏。此外,在玩游戏时按下 ENTER 键两次,一次是暂停/保存游戏,然后再次按下,他就可以立即恢复,游戏将继续进行。这样做的效果是,所有关于得分和每个角色在屏幕上的位置等内容的变量都被存储起来,并且游戏将恢复其正常的运行速度。不幸的是,每当运行一个重复的 TI-Basic 程序时,它最终会运行得越来越慢。为了避免或解决在玩追逐时遇到的这个问题,可以使用这个方法,即按下 ENTER 键两次。如上所述,这将退出程序,然后再次恢复程序。

注意:计算器用来运行追逐的变量存储在 [J] 矩阵中。

程序代码

[编辑 | 编辑源代码]

注释

  1. 这些代码行中的许多行可以通过在同一行中只键入一个 ":" 而不是按下 ENTER 并键入下一行上的下一个命令来链接在一起。此外,这里显示的一些命令已经以这种方式链接起来了。
  2. 在命令 " :Output(8,3,"-GAME¤SAVED- ", 中发现的 "¤" 实际上是一个非常小的正方形,它可以在你的计算器的 CATALOG 菜单中找到。它将位于看起来像一个小加号 (+) 的上面,在列表的底部附近。
PROGRAM:CHASE
:If Ans=105:1→Y
:{3,9→dim([J]
:[J](1,1→C:[J](1,2→D:[J](1,3→E:[J](1,4→F:[J](2,1→G:[J](2,2→H
:[J](2,3→I:[J](2,4→J:[J](3,1→K:[J](3,2→L:[J](3,3→M:[J](3,4→N
:If 1=Y
:Then
:DelVar Y
:[J](2,5→X
:Goto A
:End
:If 1≠[J](3,5
:0→[J](1,5
:prgmCSTART
:ZStandard
:AxesOn
:If Ans=93
:Then
:[J](2,5→X
:Goto A
:End
:DelVar X
:round(C,0→C:round(D,0→D:round(E,0→E:round(F,0→F:round(G,0→G:round(H,0→H
:round(I,0→I:round(J,0→J:round(K,0→K:round(L,0→L:round(M,0→M:round(N,0→N
:C+round(9rand,0)-round(9rand,0→C:D+round(9rand,0)-round(9rand,0→D
:G+round(4rand,0)-round(4rand,0→G:H+round(4rand,0)-round(4rand,0→H
:I+round(4rand,0)-round(4rand,0→I:J+round(4rand,0)-round(4rand,0→J
:K+round(4rand,0)-round(4rand,0→K:L+round(4rand,0)-round(4rand,0→L
:M+round(4rand,0)-round(4rand,0→M:N+round(4rand,0)-round(4rand,0→N
:Lbl E
:If C<1:1→C:If C>8:8→C:If D<1:1→D:If D>16:16→D:If E<2:2→E:If E>7:7→E
:If F<2:2→F:If F>15:15→F:If G<2:2→G:If G>7:7→G:If H<2:2→H:If H>15:15→H
:If I<2:2→I:If I>7:7→I:If J<2:2→J:If J>15:15→J:If K<2:2→K:If K>7:7→K
:If L<2:2→L:If L>15:15→L:If M<2:2→M:If M>7:7→M:If N<2:2→N:If N>15:15→N
:If C=E and D=F or C=G and D=H or C=I and D=J or C=K and D=L or C=M and D=N
:Then
:D+round(6rand,0)-round(3rand,0→D
:Goto E
:End
:Lbl C
:E+round(9rand,0)-round(9rand,0→E
:F+round(9rand,0)-round(9rand,0→F
:If E<2:2→E:If E>7:7→E:If F<2:2→F:If F>15:15→F
:If E=M and F=N
:Goto C
:Lbl A
:ClrHome
:Disp X
:Output(E,F,"X
:Output(G,H,"≠
:Output(I,J,"≠
:Output(K,L,"≠
:Output(M,N,"≠
:Output(C,D,">
:If C=E and D=F
:Then
:X+1→X
:Goto C
:End
:If C=G and D=H or C=I and D=J or C=K and D=L or C=M and D=N
:Goto D
:getKey
:If Ans=105
:Then
:Output(8,3,"...SAVING...
:C→[J](1,1
:D→[J](1,2
:E→[J](1,3
:F→[J](1,4
:G→[J](2,1
:H→[J](2,2
:I→[J](2,3
:J→[J](2,4
:K→[J](3,1
:L→[J](3,2
:M→[J](3,3
:N→[J](3,4
:X→[J](2,5
:Output(8,3,"-GAME¤SAVED-
:105
:Stop
:End
:If Ans=0
:Goto B
:If Ans=72 and C>1 and D>1
:Then
:C-1→C
:D-1→D
:End
:If Ans=73 and C>1
:C-1→C
:If Ans=74 and C>1 and D<16
:Then
:C-1→C
:D+1→D
:End
:If Ans=82 and D>1
:D-1→D
:If Ans=84 and D<16
:D+1→D
:If Ans=92 and C<8 and D>1
:Then
:C+1→C
:D-1→D
:End
:If Ans=93 and C<8
:C+1→C
:If Ans=94 and C<8 and D<16
:Then
:C+1→C
:D+1→D
:End
:Lbl B
:randInt(1,4
:If Ans=4
:Goto 3
:If Ans=3
:Goto 2
:If Ans=2
:Goto 1
:If F≥2 and G≤7 and J≤15 and K≥2 and N≥2
:Then
:F-1→F
:G+1→G
:J+1→J
:K-1→K
:N-1→N
:Goto A
:End
:Lbl 1
:If E≥2 and H≥2 and I≤7 and L≤15 and M≥2
:Then
:E-1→E
:H-1→H
:I+1→I
:L+1→L
:M-1→M
:Goto A
:End
:Lbl 2
:If F≤15 and G≥2 and J≥2 and K≤7 and N≤15
:Then
:F+1→F
:G-1→G
:J-1→J
:K+1→K
:N+1→N
:Goto A
:End
:Lbl 3
:If E≤7 and H≤15 and I≥2 and L≥2 and M≤7
:Then
:E+1→E
:H+1→H
:I-1→I
:L-1→L
:M+1→M
:End
:Goto A
:Lbl D
:Output(4,2,"YOU GOT EATEN!
:1→[J](3,5
:0→[J](2,5
:If X>[J](1,5
:Then
:Output(5,2,"{Press  enter}
:Pause 
:X→[J](1,5
:Output(4,2,"New high score:
:Output(5,2,"              "    <-- (This close-quote mark is not needed, but
:Output(5,8,[J](1,5                       there must be 14 blank spaces here)
华夏公益教科书