Tiny BASIC模拟数组、循环、和值的构建

适用于BASIC程序员的Tiny BASIC1

你可能已经足够大了,还记得20世纪80年代的家用电脑热潮。你的计算机直接启动到BASIC语言,这就是你学习编程的方法。BASIC语言有字符串处理和数组等特性。它将有一个FOR循环结构用于计数。如果你非常幸运,它甚至可能有一个DO或WHILE循环结构。

Tiny BASIC没有这些东西。但本文将向您展示如何在Tiny BASIC中模拟其中的一些东西,并绕过这些限制。

字符串处理

String Handling

这在Tiny BASIC中几乎是不可能的,所以让我们先把它解决掉。你只能输入数字,所以没有要求用户输入他们的名字。如果你想问一个简单的是/否问题,那么你必须让用户输入1表示是,或者0表示否。例如,你可以这样提问:“先玩还是后玩(1/2)?”“

字符串可以在PRINT语句中输出。如果你想打印一组字符串中的一个,你可以使用一个变量来存储数字形式的字符串,并使用一系列IF语句来打印相应的字符串,如下面的例子所示:

100 IF C=1 THEN PRINT “Red”
110 IF C=2 THEN PRINT “Green”
120 IF C=3 THEN PRINT “Blue”

数组

Arrays

你可以用GOTO或者GOSUB以有限的计算方式实现数组。如果数组的值永远不会改变,那么你可以有一系列的LET语句,通过GOTO计算访问,像这样:

100 GOTO 100+10*B
110 LET G=15
115 GOTO 140
120 LET G=4
125 GOTO 140
130 LET G=7
140 …

这类似于本教程的示例。在这里,盒子1、2和3分别装有15、4和7枚金币。在一个完整的BASIC语言中,我们将这些存储在一个数组中;这里我们使用一个GOTO计算。请注意,过程中没有办法更改这些数组的值。

模拟数组的另一种方法是通过过程生成。同样,这不允许“数组”中的值在程序运行过程中被更改,但它可以用来生成一个充满位置的世界。考虑一个小世界,比如说,10x10平方的战略游戏。通常你会生成地形并将其存储在一个数组中。在Tiny BASIC中,你可以设置一个种子,然后生成1到N的正方形,N是你想看的正方形的数量,1到100。此例程执行类似的操作:

100 LET R=1234
110 LET S=1
120 GOSUB 160
130 LET T=R-R/44
140 IF S=N THEN RETURN
145 LET S=S+1
150 GOTO 120
160 LET R=5
R+35
170 LET R=R-R/6547*6547
180 RETURN

上面的代码形成了一个我们用GOSTB 100调用的子例程。N是我们感兴趣的平方数,应该在调用子例程之前设置。这个正方形的地形,T,将是一个从0到3的随机数。在一个完整的BASIC语言中,我们可能会在程序开始时将所有这些地形值存储在一个数组中,并通过引用T(N)来访问正方形N。在Tiny BASIC中,我们不能这样做,所以每次我们想要检索地形值时,我们都会重新生成从1到N的伪随机数序列。即使在完全的BASIC语言中,当游戏世界比内存所能容纳的空间更大时,这种方法也能很好地使用。

FOR、DO和WHILE循环

FOR, DO and WHILE Loops

这必须由IF和GOTO构造,沿着一个我们自己改变的计数器:

10 LET N=1
20 PRINT "Counting: ",N
30 LET N=N+1
40 IF N<=10 THEN GOTO 20

这模拟了你在标准BASIC中遇到的“FOR N=1 TO 10”循环。DO循环,在循环体运行后测试条件,大致类似:

10 INPUT N
20 PRINT "You entered ",N
30 IF N<>0 THEN GOTO 10

当用户输入零时,循环结束。传统的WHILE循环在执行循环体之前测试条件。在上面的循环中,如果将零作为退出代码并且不打印,这将是有用的,并且等效于WHILE循环的代码如下所示:

10 INPUT N
20 IF N=0 THEN GOTO 50
30 PRINT "You entered ",N
40 GOTO 10
50 …

IF下的AND运算符

AND Operators for IF

在大多数BASIC中,IF语句可以将条件与运算符OR和AND联系起来。OR语句非常繁琐:

10 LET F=0
20 IF A=1 THEN PRINT “Do something…”
30 IF A=2 THEN PRINT “Do something…”

这模拟了传统的BASIC结构“如果A=1或A=2,则.“.如果两个条件都有可能为真,则需要进一步注意避免两次打印消息;这将留给读者作为练习。模拟AND更优雅一点:

100 IF N>=1 THEN IF N<=10 THEN PRINT “N is in range.”

希望这篇文章已经表明,即使TinyBASIC缺乏您可能习惯的一些特性,也可以使用它提供的更基本的构建块来模拟它们。


  1. http://tinybasic.cyningstan.org.uk/page/36/adapting-to-tiny-basic-for-basic-programmers ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值