首页 > 解决方案 > TAB 子程序 Applesoft BASIC 出错

问题描述

因此,我找到了一本名为 Weird Computer Games 的旧书,其中列出了 commodore 64 的 BASIC 文本游戏,我想输入并运行,并且可能用 C# 或 JS 重写一些。

问题是,我没有 commodore 64 或任何其他老式机器,所以我使用基于在线 JavaScript 的 Aplesoft BASIC 解释器,我已经到了一个我不明白的错误的地步——我想这是由于使用了不同的基本方言。或者我看错了一些字符。

我得到的错误是: ParseError: Syntax error: Expected ')', saw {"operator":","} in line 610

但我无法找到有关此 TAB 功能的文档。下面是代码

10 GOSUB 700 : GOSUB 620

19 														REM 20 Set up variables (See if you can work outwhat they are.)
20 LET NW=4 : LET M=0 : LET FM=50

29														REM Choose new height "NH". "H" is heigh
30 GOSUB 530 : LET H=NH
40 GOSUB 550
50 LET EF=0 : LET FF=0 : LET HH=H
60 FOR I=1 TO 4 : LET G(I)=0 : NEXT I
70 FOR I=1 TO 4 : LET A$=P$(I)+":" : LET X=1
80 LET Y=1+I : GOSUB 610 : NEXT I
90 GOSUB 490 : GOSUB 430
100 IF M=FM THEN GOTO 250
110 IF EF=1 THEN GOTO 230
120 IF INKEY$(0)="" THEN GOTO 90
130 LET HH=H-1 : GOSUB 510
140 GOSUB 490 : GOSUB 430
150 LET H=HH
160 IF H>0 THEN GOTO 130
170 IF P=17 THEN GOSUB 320
180 IF FF=1 THEN GOTO 240
190 GOSUB 530
200 LET HH=H+1 : GOSUB 510 : GOSUB 490
210 LET H=HH : IF H=NH THEN GOTO 90
220 GOSUB 430 : GOTO 200
230 LET A$="WELL DONE! SUPERWITCH IS PLEASED WITH YOU"
240 LET A$="OUT OF BROOMSTICKS!" : GOTO 260
250 LET A$="TOO LATE!"
260 LET X=1 : LET Y=15 : GOSUB 610
270 STOP
280 LET A$="W" : LET X=P : GOSUB 610
290 FOR T=1 TO 1000 : NEXT T
300 LET NW=NW-1 : IF NW=0 THEN LET FF=1
310 RETURN
320 IF W=1 THEN GOSUB 280 : RETURN
330 LET G(R)=G(R)+1
340 LET A$=STR$(G(R)) : LET X=17
350 LET Y=1+R : GOSUB 610
360 LET P=19 : GOSUB 430
370 LET F=0
380 FOR I=1 TO 4
390 IF G(I)>=N(I) THEN LET F=F+1
400 NEXT I
410 IF F=4 THEN LET EF=1
420 RETURN
430 LET GD=GD+1 : IF GD=6 THEN LET GD=1
440 LET A$=G$(GD) : LET X=1 : LET Y=15 : GOSUB 610
450 LET A$=" " : LET X=P : LET Y=14 : GOSUB 610
460 LET P=P+1 : IF P=20 THEN GOSUB 550
470 LET X=P : LET A$=C$ : GOSUB 610
480 RETURN
490 LET A$="-Y-=" : LET X=16 : LET Y=14-HH
500 GOSUB 610 : RETURN
510 LET A$="    " : LET X=16 : LET Y=14-H
520 GOSUB 610 : RETURN

529														REM 530-540: Choose new height for witch.
530 LET NH = INT(RND(1)*5+3)
540 RETURN

549 													REM 550: Chooses an object.
550 LET R=INT(RND(1)*4)+1
559														REM 560: Random chance of object being Broomstick Snatcher.
560 LET W=0 : IF RND(1)>0.8 THEN LET W=1
570 LET C$=LEFT$(P$(R),1) : LET P=1
580 LET M=M+1
590 IF M=FM THEN LET C$="CAULDRON"
600 RETURN

610 PRINT TAB(X,Y); A$ : RETURN
620 CLS : PRINT : PRINT
630 PRINT "THE POTION MUST HAVE" : PRINT
640 FOR I=1 TO 4
650 LET N=INT(RND(1)*3)+2 : LET N(I)=N
660 PRINT : PRINT; N; " "; P$(I)
670 NEXT I : PRINT : PRINT
680 PRINT "PRESS RETURN TO PLAY"
690 INPUT X$ : CLS : RETURN
700 DIM P$(4) : DIM N(4) : DIM G(4)
710 DIM G$(5)
720 FOR I=1 TO 4 : READ P$(I) : NEXT I
730 DATA "TOES OF NEWTS", "EYES OF LIZARDS", "ROOTS OF IVY", "BRAINS OF BATS"
740 LET H$=">====>====>====>====>===="
750 FOR I=1 TO 5 : LET G$(6-I)=MID$(H$,I,I+20)
760 NEXT I : LET GD=1
770 RETURN











		

标签: basic

解决方案


首先,那个时代的 BASIC 都非常不同,因此您可能会发现 Commodore 64 仿真器(例如Virtual Consoles上的仿真器)很有用。也就是说,这看起来不像 Commodore 64 BASIC。C64 TAB 语句是面向行的:它只是在当前行的那么多地方加了标签。这意味着它只需要一个参数,X;没有Y。

根据 Internet Archive 上的Weird Computer Games版本,该代码并非专门针对 Commodore 64,而是针对“BASIC 的标准版本”(参见第 2 页)。查找标有金字塔符号的更改,以了解 Commodore 64 的更改。在这种情况下,需要将第 610 行(带有两个参数选项卡的行)更改为:

610 PRINT CHR$(19);FOR LL=1 TO Y:PRINT:NEXT:PRINT TAB(X);A$:RETURN

我已经验证了上述模拟器中的这个子程序确实在屏幕上的坐标 X 和 Y 处打印。

在 Internet 档案中的这本书的版本中,您发布的代码从第 10 页“飞行女巫”开始。Commodore 64 和其他计算机的必要更改位于第 11 页的“转换行”下。每台计算机都有自己的符号(符号列表参见第 2 页),Commodore 64 的符号是金字塔。

如果您想让它在 Apple 上运行,请查找标有圆圈的更改。在 的情况下TAB(X,Y),需要用VTAB(Y)and替换HTAB(X)


推荐阅读