Only one mod as I had an important inconsistency. ZX81 BASIC has AND and OR deal with strings uniquely:
All other combinations are a syntax errors -- i.e. you can only have a string lead a single two-argument AND, while an OR cannot have a string in it anywhere.
I still haven't implemented floating point and I just realized I also punted on multi-dimensional string arrays (only allow a single dimension DIM statement) whereas for number arrays I allow as many as you want.
BTW, it was this Vroom like game for the ZX81 that made me realize my error. I had to change two things from the original as it had DIM B$(2,4) which I changed to just a single DIM B$(8) and then use some math to get to the 1st vs the 2nd (i.e. using the TO substring function) and the game used exponentiation for PAUSE (i.e. 4E4) that I maxed out to 32767 instead.
Code: Select all
10 REM **FLYWHEEL**SLR/1985***
20 LET S=0
30 PRINT AT 2,15;"\,,\##\,,";AT 3,0;"\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\::\@@\@@\@@\@@\@@\@@\@@\@@\::\@@\@@\@@\@@\@@\::\@@\@@\@@\@@\@@\@@\@@\@@\::\@@\@@\::\@@\@@\@@\@@\::\::\@@\@@\::\@@\@@\::\@@\::\::\@@\@@\@@\::\::\@@\::\@@\@@\@@\::\@@\::\::\@@\@@\::\::\@@\::\@@"
40 FOR A=8 TO 21
50 PRINT AT A,0;"\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::"
60 NEXT A
70 GOSUB 1000
80 FOR A=10 TO 20 STEP 2
90 PRINT AT A,15-(A-10)+(A-(5+A/2));"\: ";AT A,A/2+11;"\ :"
100 PRINT AT A+1,15-(A-10)+(A-(5+A/2));"\ :";AT A+1,A/2+11;"\: "
110 NEXT A
120 PRINT AT 20,14;A$;AT 21,14;B$(1+(P-1)*4 TO 4+(P-1)*4)
130 PRINT AT 16,10;"\@@\@@\@@START*\@@\@@\@@"
140 FOR A=15 TO 21
150 PRINT AT A,10;"\@@";TAB 21;"\@@"
160 NEXT A
170 FOR G=13 TO 17
180 PRINT AT 16,G;"*"
190 FOR A=1 TO 20
200 NEXT A
210 NEXT G
220 FOR G=1 TO R1
230 GOSUB 1000*Z(G)+1000
240 NEXT G
260 PRINT AT 16,10;"\@@\@@\@@FINISH\@@\@@\@@"
270 FOR A=15 TO 21
280 PRINT AT A,10;"\@@";TAB 21;"\@@"
290 NEXT A
300 LET S=S+500+INT (500*RND+1)
310 PRINT AT 0,0;"SCORE:";S;" KEEP IT UP**"
320 FOR A=1 TO 300
330 NEXT A
340 GOTO 30
400 PRINT AT 0,0;"SCORE:";S;" YOU CRASHED**";AT 20,C;D$;AT 20,X;"\.'\'.\.'\:.";AT 21,C;D$;AT 21,C;"\ .\' \'.\:'"
410 PRINT AT 2,0;"PRESS ENTER TO BEGIN AGAIN..."
420 PAUSE 32767
430 CLS
440 RUN
500 FOR A=10 TO 20 STEP 2
510 PRINT AT A,0;"\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::"
520 PRINT AT A,15-(A-10)+(A-(5+A/2));"\: ";AT A,A/2+11;"\ :"
530 PRINT AT A+1,15-(A-10)+(A-(5+A/2));"\ :";AT A+1,A/2+11;"\: "
540 NEXT A
550 RETURN
600 FOR A=10 TO 20 STEP 2
610 PRINT AT A,0;"\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::"
620 PRINT AT A,7;"\: \.'\''" AND A=10;AT A+1,7;"\: \::\::\.'" AND A=10;AT A,8;"\ :\::\::\.'" AND A=12;AT A+1,8;"\ :\::\::\::\.'" AND A=12;AT A,8;"\: \::\::\::\::\.'" AND A=14;AT A+1,8;"\: \::\::\::\::\::\.'" AND A=14
630 PRINT AT A,9;"\ :\::\::\::\::\::\..\''" AND A=16;AT A+1,9;"\ :\::\::\::\::\::\::\::\.'" AND A=16;AT A,9;"\: \::\::\::\::\::\::\::\::\.'" AND A=18;AT A+1,9;"\: \::\::\::\::\::\::\::\::\::\.'" AND A=18;AT A,10;"\ :\::\::\::\::\::\::\::\::\::\.'" AND A=20;AT A+1,10;"\ :\::\::\::\::\::\::\::\::\::\::\.'" AND A=20
640 NEXT A
650 RETURN
700 FOR A=10 TO 20 STEP 2
710 PRINT AT A,0;"\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::"
720 PRINT AT A,22;"\''\'.\ :" AND A=10;AT A+1,21;"\'.\::\::\ :" AND A=10;AT A,20;"\'.\::\::\: " AND A=12;AT A+1,19;"\'.\::\::\::\: " AND A=12;AT A,18;"\'.\::\::\::\::\ :" AND A=14;AT A+1,17;"\'.\::\::\::\::\::\ :" AND A=14
730 PRINT AT A,15;"\''\..\::\::\::\::\::\: " AND A=16;AT A+1,14;"\'.\::\::\::\::\::\::\::\: " AND A=16;AT A,13;"\'.\::\::\::\::\::\::\::\::\ :" AND A=18;AT A+1,12;"\'.\::\::\::\::\::\::\::\::\::\ :" AND A=18;AT A,11;"\'.\::\::\::\::\::\::\::\::\::\: " AND A=20;AT A+1,10;"\'.\::\::\::\::\::\::\::\::\::\::\: " AND A=20
740 NEXT A
750 RETURN
1000 LET X=14
1010 LET A$="\..\ '\' \.."
1030 LET R1=10+INT (RND*10+1)
1040 DIM Z(R1)
1050 FOR A=1 TO R1
1060 LET Z(A)=INT (RND*3+1)
1070 NEXT A
1080 LET B$="\##\..\..\##\@@\..\..\@@"
1100 LET P=1
1110 LET C=X
1120 LET D$="\::\::\::\::"
1130 LET Z(1)=1
1140 RETURN
2000 IF Z(G-(G>1))<>1 OR G=1 THEN GOSUB 500
2010 FOR A=1 TO 2+INT (RND*4)
2020 PRINT AT 20,X;A$;AT 21,X;B$(1+P*4 TO 4+P*4)
2030 LET R2=INT (RND*2)
2040 FOR V=14 TO 22
2050 PRINT AT 20,C;D$;AT 20,X;A$;AT 21,C;D$;AT 21,X;B$(1+P*4 TO 4+P*4)
2060 LET C=X
2070 LET P=NOT P
2080 LET X=X-(INKEY$ ="Z" AND X>11)+(INKEY$ ="." AND X<17)
2090 GOSUB 2400+200*R2+20*(V-14)
2100 NEXT V
2120 IF (R2=0 AND X+3<19) OR (R2=1 AND X>12) THEN GOTO 400
2130 LET S=S+10
2140 NEXT A
2150 RETURN
2400 PRINT AT V,15;"\:'"
2410 RETURN
2420 PRINT AT V,15;"\''";AT V-1,15;"\::"
2430 RETURN
2440 PRINT AT V,14;"\:'\''";AT V-1,15;"\::"
2450 RETURN
2460 PRINT AT V,14;"\''\''";AT V-1,14;"\::\::"
2470 RETURN
2480 PRINT AT V,13;"\:'\':\''";AT V-1,14;"\::\::"
2490 RETURN
2500 PRINT AT V,13;" \:: ";AT V-1,13;"\::\::\::"
2510 RETURN
2520 PRINT AT V,12;"\: \ :\:: ";AT V-1,13;"\::\::\::"
2530 RETURN
2540 PRINT AT V,12;" \::\:: ";AT V-1,12;"\::\::\::\::"
2550 RETURN
2560 PRINT AT V-1,12;"\::\::\::\::"
2570 RETURN
2600 PRINT AT V,16;"\':"
2610 RETURN
2620 PRINT AT V,16;"\''";AT V-1,16;"\::"
2630 RETURN
2640 PRINT AT V,16;"\''\':";AT V-1,16;"\::"
2650 RETURN
2660 PRINT AT V,16;"\''\''";AT V-1,16;"\::\::"
2670 RETURN
2680 PRINT AT V,16;"\''\:'\':";AT V-1,16;"\::\::"
2690 RETURN
2700 PRINT AT V,16;" \:: ";AT V-1,16;"\::\::\::"
2710 RETURN
2720 PRINT AT V,16;" \::\: \ :";AT V-1,16;"\::\::\::"
2730 RETURN
2740 PRINT AT V,16;" \::\:: ";AT V-1,16;"\::\::\::\::"
2750 RETURN
2760 PRINT AT V-1,16;"\::\::\::\::"
2770 RETURN
3000 IF Z(G-1)<>2 THEN GOSUB 600
3005 LET X=X-(X=17)
3008 LET C=X
3010 FOR A=1 TO 2+INT (RND*4)
3020 PRINT AT 20,X;A$;AT 21,X;B$(1+P*4 TO 4+P*4)
3030 LET R2=INT (RND*2)
3040 FOR V=14 TO 22
3050 PRINT AT 20,C;D$;AT 20,X;A$;AT 21,C;D$;AT 21,X;B$(1+P*4 TO 4+P*4)
3060 LET C=X
3070 LET P=NOT P
3080 LET X=X-(INKEY$ ="Z" AND X>11)+(INKEY$ ="." AND X<16)
3090 GOSUB 3400+200*R2+20*(V-14)
3100 LET S=S+1
3110 NEXT V
3120 IF (R2=0 AND X+3<18) OR (R2=1 AND X>12) THEN GOTO 400
3130 LET S=S+10
3140 NEXT A
3150 RETURN
3400 PRINT AT V,9;"\:'"
3410 RETURN
3420 PRINT AT V,10;"\''";AT V-1,9;"\::"
3430 RETURN
3440 PRINT AT V,10;"\:'\''";AT V-1,10;"\::"
3450 RETURN
3460 PRINT AT V,10;"\:'\''\':";AT V-1,10;"\::\::"
3470 RETURN
3480 PRINT AT V,11;"\''\:'\':";AT V-1,10;"\::\::\::"
3490 RETURN
3500 PRINT AT V,11;" \:: ";AT V-1,11;"\::\::\::"
3510 RETURN
3520 PRINT AT V,11;" \::\: \ :";AT V-1,11;"\::\::\::"
3530 RETURN
3540 PRINT AT V,11;" \::\:: ";AT V-1,11;"\::\::\::\::"
3550 RETURN
3560 PRINT AT V-1,11;"\::\::\::\::"
3570 RETURN
3600 PRINT AT V,11;"\':"
3610 RETURN
3620 PRINT AT V,12;"\''";AT V-1,11;"\::"
3630 RETURN
3640 PRINT AT V,13;"\''\':";AT V-1,12;"\::"
3650 RETURN
3660 PRINT AT V,14;"\''\''";AT V-1,13;"\::\::"
3670 RETURN
3680 PRINT AT V,14;"\:'\':\''";AT V-1,14;"\::\::"
3690 RETURN
3700 PRINT AT V,15;" \:: ";AT V-1,14;"\::\::\::"
3710 RETURN
3720 PRINT AT V,15;"\: \ :\:: ";AT V-1,15;"\::\::\::"
3730 RETURN
3740 PRINT AT V,16;" \::\:: ";AT V-1,15;"\::\::\::\::"
3750 RETURN
3760 PRINT AT V-1,16;"\::\::\::\::"
3770 RETURN
4000 IF Z(G-1)<>3 THEN GOSUB 700
4005 LET X=X+(X=11)
4008 LET C=X
4010 FOR A=1 TO 2+INT (RND*4)
4020 PRINT AT 20,X;A$;AT 21,X;B$(1+P*4 TO 4+P*4)
4030 LET R2=INT (RND*2)
4040 FOR V=14 TO 22
4050 PRINT AT 20,C;D$;AT 20,X;A$;AT 21,C;D$;AT 21,X;B$(1+P*4 TO 4+P*4)
4060 LET C=X
4070 LET P=NOT P
4080 LET X=X-(INKEY$ ="Z" AND X>12)+(INKEY$ ="." AND X<17)
4090 GOSUB 4400+200*R2+20*(V-14)
4100 LET S=S+1
4110 NEXT V
4120 IF (R2=0 AND X+3<19) OR (R2=1 AND X>13) THEN GOTO 400
4130 LET S=S+10
4140 NEXT A
4150 RETURN
4400 PRINT AT V,20;"\:'"
4410 RETURN
4420 PRINT AT V,19;"\''";AT V-1,20;"\::"
4430 RETURN
4440 PRINT AT V,17;"\:'\''";AT V-1,19;"\::"
4450 RETURN
4460 PRINT AT V,16;"\''\''";AT V-1,17;"\::\::"
4470 RETURN
4480 PRINT AT V,15;"\''\:'\':";AT V-1,16;"\::\::"
4490 RETURN
4500 PRINT AT V,14;" \:: ";AT V-1,15;"\::\::\::"
4510 RETURN
4520 PRINT AT V,13;" \::\: \ :";AT V-1,14;"\::\::\::"
4530 RETURN
4540 PRINT AT V,12;" \::\:: ";AT V-1,13;"\::\::\::\::"
4550 RETURN
4560 PRINT AT V-1,12;"\::\::\::\::"
4570 RETURN
4600 PRINT AT V,22;"\':"
4610 RETURN
4620 PRINT AT V,21;"\''";AT V-1,22;"\::"
4630 RETURN
4640 PRINT AT V,20;"\''\':";AT V-1,21;"\::"
4650 RETURN
4660 PRINT AT V,19;"\:'\''\':";AT V-1,20;"\::\::"
4670 RETURN
4680 PRINT AT V,18;"\:'\':\''";AT V-1,19;"\::\::\::"
4690 RETURN
4700 PRINT AT V,18;" \:: ";AT V-1,18;"\::\::\::"
4710 RETURN
4720 PRINT AT V,17;"\: \ :\:: ";AT V-1,18;"\::\::\::"
4730 RETURN
4740 PRINT AT V,17;" \::\:: ";AT V-1,17;"\::\::\::\::"
4750 RETURN
4760 PRINT AT V-1,17;"\::\::\::\::"
4770 RETURN
5000 CLS
5010 CLEAR
5020 SAVE "F%W"
5030 PRINT "%*%*%F%L%Y\::%W%H%E%E%L%*%*%B%Y\::%S%T%E%V%E%N\::%R%E%I%D%/%1%9%8%5\::\::\!!\!!\!!\!!\!!\!!\!!\!!\!!\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::%3%D\::%C%A%R\::%D%R%I%V%I%N%G\::%P%R%O%G%R%A%M%.\::%U%S%E\::%"%Z%"\::%F%O%R\::%L%E%F%T\::%A%N%D\::%"%.%"\::%F%O%R\::%R%I%G%H%T%.\::\::\::\::\::%G%O%O%D\::%D%R%I%V%I%N%G%*%*%*%*\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::"
5040 PRINT AT 21,0;"%P%R%E%S%S\::%E%N%T%E%R\::%T%O\::%B%E%G%I%N\::%G%A%M%E\::%P%L%A%Y%.%."
5050 GOTO 420