This cassette contains three separate BASIC programs: a Bingo number caller, a ten-pin bowling simulator called “TS-BOWL,” and a number-guessing game called “Robot War.” The Bingo program generates a randomized shuffle of 75 numbers using a rejection-sampling DIM array technique, then displays each ball drawn with its correct B-I-N-G-O column letter and position on a visual card layout, accepting “BINGO” as keyboard input to reset. TS-BOWL simulates a full ten-frame bowling game using PLOT/UNPLOT for pin graphics and CHR$ 128 for the moving ball, tracking strikes, spares, and fill balls with an array of score and mark variables. Robot War is a Mastermind-style digit-guessing game with a science-fiction narrative framing, using STR$/VAL string-slicing to decompose 4-digit numbers into individual digits for correct-digit and correct-position scoring, along with machine code calls via USR for sound and animation effects.
Program Analysis
This listing is a compilation of three independent BASIC programs stored on a single cassette. They share no runtime state but do share some structural idioms. Each program is analyzed in turn below.
Program 1: Bingo Number Caller
The Bingo program occupies lines 100–8099 (the line 100 REM is a garbled autostart header artifact). The logical entry point is line 300, which chains three subroutines: the machine code initializer at 8000, the shuffle routine at 2000, and the display loop at 2100.
Bingo — Shuffle Routine (lines 2000–2099)
The shuffle uses a dual-array rejection sampler. A(75) holds the output sequence; Q(75) acts as a presence bitmap — Q(X)=X marks slot X as taken. For each position N, a random X in 1–75 is drawn; if Q(X)=X the slot is occupied and the loop retries at 2022. Otherwise, at line 2040 a linear scan of A(1..N) re-checks uniqueness (lines 2030–2040 are actually bypassed by the unconditional GOTO 2050 at line 2027 — making the secondary scan dead code). The presence-flag check at 2025 is therefore the sole duplicate guard, and the dead secondary loop is a latent bug that goes unexercised.
Bingo — Call Display (lines 2100–2199)
Each number is mapped to its B-I-N-G-O letter via a cascade of IF A(N)<nn guards (lines 2145–2154), assigning B$ and a column offset K. A row offset D is computed to place the number in the correct cell of a visual card rendered with PRINT AT D,K. The player presses ENTER to advance; typing “BINGO” triggers RUN, restarting the entire program.
Program 2: TS-BOWL
The bowling simulator spans lines 10–8000 (second block). It uses PLOT/UNPLOT for a ten-pin layout and CHR$ 128 (the ZX81 block graphic) as the rolling ball sprite.
TS-BOWL — Pin Layout and Ball Movement
Pins are plotted at fixed pixel coordinates in lines 115–200 (a 4-row triangle: 1, 2, 3, 4 pins). Ball position is tracked in pixel variables Y (row, chosen randomly in 8–14) and X (column, starting near 2). The main movement loop (lines 500–620) reads INKEY$ continuously: key “7” decrements Y, key “6” increments it, and X auto-increments each iteration simulating the ball rolling forward. When X>28 the ball has reached the pins and control passes to subroutine 800.
TS-BOWL — Pin-Knock Subroutines (lines 1100–1899)
Eight subroutines (one per landing row 8–14, plus 1100 for a strike on row 11) each UNPLOT specific pin coordinates and add pin-count increments to S(Q). Second-ball logic (when J=2) corrects for double-counting pins already knocked: each subroutine stores the last landing row in a dedicated variable (W, R, H, B, M, O, U, F) and subtracts the overlap if the second ball lands at a related position. This is a hand-coded pin-adjacency model rather than a true collision simulation.
TS-BOWL — Scoring (lines 2000–3999)
Scoring follows standard ten-pin rules. Arrays S(20) (raw pin counts), E(20) (cumulative scores), M$(20) (marks: [X]=strike, [/]=spare, =open), and I(20) (fill ball counts displayed in the “FILL” column) are maintained. Bonus propagation for spares and strikes is spread across subroutines 2000 and 3000, which run at ball-end and frame-end respectively. The 10th-frame logic handles up to three virtual frames (Q reaching 12 or 13) via special-casing in lines 5000–5110 and 7005–7006.
TS-BOWL — Notable Anomalies
- Lines 7056 and 7059 are identical — the
GOTO 7060skip at 7058 has no effect since both branches print the same thing. - The empty
FOR N=1 TO 20: NEXT Nat lines 6010–6030 in the intro is a busy-wait delay with noPAUSE. - Line 495:
IF Q=12 AND J=2 THEN GOTO 7000— this ends the game mid-second-ball of the 12th virtual frame, which is correct for a double-strike 10th frame scenario.
Program 3: Robot War
Robot War is a Mastermind-style game in which the player guesses a 4-digit secret number generated by the computer. It is framed as a science-fiction battle between programmed robots.
Robot War — Number Decomposition
Both the player’s guess N and the computer’s secret KT are decomposed into digit arrays using STR$ and slice-notation VAL N$(H TO H) in subroutines 7500 and 7600. Player digits go into Q(1..4); secret digits into S(1..4). This avoids repeated integer division and is a clean string-based decomposition idiom.
Robot War — Scoring Logic (lines 1600–1799)
Scoring uses a two-pass algorithm. The first pass (lines 1610–1620) finds exact matches (correct digit, correct position), incrementing both A1 (correct digits) and A2 (in-sequence), and marking matched secret slots in G(H). The second pass (subroutine 1700) finds digits present but misplaced: for each player digit not already an exact match, it scans unmatched secret slots; a match increments A1 only and marks the slot used. This correctly implements the classic Mastermind scoring without double-counting.
Robot War — Machine Code and Sound
Subroutine 1000 calls USR 16608, which is the standard ZX81 initialization entry point used here likely to trigger a display or sound effect. Subroutines 500/530 and 600 use sequences of POKE into the 16650–16725 range followed by USR calls to drive machine code routines for robot animation (flashing limbs) and laser sound effects. S1 and S2 are parameters POKEd into the sound routine at 16722 and 16715.
Robot War — Game Flow and Loss Conditions
The game allows 10 rounds (R up to 10). After each round, A2 (exact matches) is compared against G2 (previous round’s exact matches): if the score drops by two or more, subroutine 1500 (the “destroy” explosion sequence) fires immediately. An exact match (N=KT) or round 10 also triggers 1500, which displays either a victory or defeat message. The explosion is rendered with concentric rings of [*] characters and a machine code sound call.
Shared Idioms Across All Three Programs
- Machine code via
USRwith precedingPOKEsequences is used in all three programs for sound/animation. - Dead-end utility routines at high line numbers (200–260, 9010–9060) for direct memory POKEing appear in programs 1 and 3 — these are developer debug tools left in the listing.
FAST/SLOWmode switching is used strategically: array initialization runs in FAST, display loops in SLOW.- All three programs use
INPUT Y$as a simple press-ENTER-to-continue pause.
Line Number Summary
| Program | Line Range | Key Subroutines |
|---|---|---|
| Bingo | 100–8099 | 2000 (shuffle), 2100 (call loop), 8000 (intro) |
| TS-BOWL | 10–8000 | 800 (pin hit), 1000 (score calc), 2000 (mark/bonus), 6000 (intro), 7000 (game over) |
| Robot War | 10–9060 | 1277 (digit split), 1600 (score), 1700 (misplace scan), 1500 (explosion), 7500/7600 (STR$ decompose) |
Content
Image Gallery
Source Code
100 REM E£RND7▘#▘ GOSUB #Q█TAN E£RND7▘#▘ GOSUB #▞?Q█F▌TAB [1]RNDE£RND7▘#▘ GOSUB #▞?Q█7▌TAB [J]RNDTAN E£RND7▘E▘ GOSUB #▞?Q█7▌TAB INT RNDTAN :-E£RND7)5 ▞4 GOSUB #6 COPYRNDQ█7▌TAB LIST RNDE COPYRND$TAB DIM RNDTAN <# E£RND7▘? )5 GOSUB #:+ GOSUB #Q█$TAB /INKEY$ TAN ▌#▞ ▘ GOSUB #£RND< GOSUB #WINKEY$ Y▞MYINKEY$ Y-MRNDINKEY$ Y▌MINKEY$ INKEY$ GOSUB #YINKEY$ 5#INKEY$ GOSUB [K]UINKEY$ INKEY$ XTAB #INKEY$ EWINKEY$ )5 GOSUB #6WINKEY$ FOR URNDINKEY$ XMRNDINKEY$ W#▌TAB #INKEY$ TAN
150 GOTO 270
200 INPUT A
220 INPUT B
230 PRINT B
240 POKE A,B
250 LET A=A+1
260 GOTO 220
300 GOSUB 8000
340 GOSUB 2000
360 GOSUB 2100
370 PRINT AT 20,2;"ALL NUMBERS USED**************"
999 STOP
1000 REM
1010 POKE 16625,128
1020 LET C=USR 16608
1099 RETURN
2000 REM
2005 FAST
2010 DIM A(75)
2012 DIM Q(75)
2020 FOR N=1 TO 75
2022 LET X=INT (RND*75)+1
2025 IF Q(X)=X THEN GOTO 2022
2027 GOTO 2050
2030 FOR J=1 TO N
2035 IF X=A(J) THEN GOTO 2022
2040 NEXT J
2050 LET A(N)=X
2052 LET Q(X)=X
2055 NEXT N
2080 SLOW
2099 RETURN
2100 REM
2110 GOSUB 1000
2112 PRINT AT 1,6;"BINGO NUMBERS CALLED"
2120 PRINT AT 3,6;"[B]";AT 3,11;"[I]";AT 3,16;"[N]";AT 3,21;"[G]";AT 3,26;"[O]"
2140 FOR N=1 TO 75
2145 IF A(N)<76 THEN LET B$="O"
2147 IF A(N)<61 THEN LET B$="G"
2149 IF A(N)<46 THEN LET B$="N"
2152 IF A(N)<31 THEN LET B$="I"
2154 IF A(N)<16 THEN LET B$="B"
2160 PRINT AT 21,2;"[U][N][D][E][R]█[T][H][E]█";B$;" ";A(N)
2162 IF B$="B" THEN LET K=5
2164 IF B$="N" THEN LET K=15
2166 IF B$="I" THEN LET K=10
2168 IF B$="G" THEN LET K=20
2170 IF B$="O" THEN LET K=25
2172 IF K=5 THEN LET D=A(N)+4
2174 IF K=10 THEN LET D=A(N)-11
2176 IF K=15 THEN LET D=A(N)-26
2178 IF K=20 THEN LET D=A(N)-41
2179 IF K=25 THEN LET D=A(N)-56
2180 PRINT AT D,K;A(N)
2185 INPUT Y$
2186 IF Y$="BINGO" THEN RUN
2187 PRINT AT 21,2;"█████████████████████████"
2190 NEXT N
2199 RETURN
8000 REM
8010 GOSUB 1000
8020 PRINT AT 2,14;"BINGO"
8030 PRINT AT 3,9;"NUMBER GENERATOR"
8032 PRINT AT 5,2;"IT TAKES 30 SECONDS FOR SETUP"
8034 PRINT AT 7,2;"WHEN BINGO IS CONFIRMED..."
8035 PRINT AT 8,2;"ENTER BINGO"
8036 PRINT AT 9,2;"OTHERWISE JUST HIT ENTER KEY"
8038 PRINT AT 10,2;"TO CONTINUE WITH GAME"
8040 PRINT AT 20,2;"PRESS ENTER WHEN READY"
8042 INPUT Y$
8099 RETURN
10 REM "BOWL"
30 GOSUB 6000
50 DIM S(20)
60 DIM M$(20)
62 DIM I(20)
64 DIM E(20)
73 LET K=1
74 LET T=0
75 LET R=0
76 LET W=0
77 LET H=0
78 LET U=0
79 LET O=0
80 LET Q=0
81 LET M=0
82 LET B=0
83 LET F=0
84 GOSUB 220
90 SLOW
91 LET Q=Q+1
92 IF Q=1 THEN GOTO 110
93 GOSUB 3000
94 IF Q>=11 THEN GOTO 5000
95 PRINT AT 0,0;"FRAME";AT 0,6;"SCORE";AT 0,12;"MARK";AT 0,17;"FILL"
96 IF Q<4 THEN LET A=1
97 IF Q>=4 THEN LET A=Q-3
98 FOR N=A TO Q-1
100 LET P=N-1
102 IF N>=6 THEN LET P=10+N
103 PRINT AT P+1,0;" ";N;AT P+1,6;E(N);AT P+1,13;M$(N);AT P+1,18;I(N)
105 NEXT N
110 PRINT AT 0,0;"FRAME";AT 0,6;"SCORE";AT 0,12;"MARK";AT 0,17;"FILL"
112 PRINT AT 10,10;" "
115 PLOT 50,20
120 PLOT 52,22
130 PLOT 52,18
140 PLOT 54,16
150 PLOT 54,24
160 PLOT 54,20
170 PLOT 56,14
180 PLOT 56,26
190 PLOT 56,18
200 PLOT 56,22
201 GOTO 280
220 FOR N=0 TO 63
240 PLOT N,12
250 PLOT N,28
260 NEXT N
263 PRINT AT 7,15;"X"
264 PRINT AT 15,15;"X"
269 RETURN
280 LET Y=INT (RND*7+1)+7
282 IF Y=11 THEN LET Y=8
285 IF Y>14 THEN LET Y=14
290 IF Y=8 OR Y=10 OR Y=12 OR Y=14 THEN LET X=2
295 IF Y=9 OR Y=11 OR Y=13 THEN LET X=1
400 PRINT AT Y,X;CHR$ 128
420 SLOW
490 FOR J=1 TO 2
495 IF Q=12 AND J=2 THEN GOTO 7000
497 IF M$(10)="[/]" AND M$(11)="[X]" THEN GOTO 7000
500 LET A$=INKEY$
505 PRINT AT Y,X;CHR$ 0
510 IF A$="" THEN LET X=X+1
512 IF X>28 THEN GOTO 640
513 IF X>15 THEN GOTO 530
515 IF A$="7" THEN LET Y=Y-1
520 IF A$="6" THEN LET Y=Y+1
530 LET X=X+1
610 PRINT AT Y,X;CHR$ 128
620 GOTO 500
640 GOSUB 800
641 IF M$(Q)="[X]" THEN GOTO 652
642 LET Y=INT (RND*7+1)+7
643 IF Y>14 THEN LET Y=14
644 IF Y=8 OR Y=10 OR Y=12 OR Y=14 THEN LET X=2
645 IF Y=9 OR Y=11 OR Y=13 THEN LET X=1
648 IF K=2 AND M$(10)<>"[X]" THEN GOTO 7000
649 REM
650 NEXT J
652 LET H=0
653 LET R=0
654 LET U=0
655 LET O=0
656 LET B=0
657 LET M=0
658 LET F=0
659 LET W=0
660 IF M$(10)="[/]" AND M$(11)="[X]" THEN GOTO 7000
680 GOTO 90
800 REM
802 LET V=INT (RND*10)
803 REM LET V=7
804 REM LET Y=11
805 IF V<>5 AND Y=11 AND J=1 THEN GOSUB 1100
809 IF V<>5 AND Y=11 AND J=1 THEN RETURN
830 IF Y=8 THEN GOSUB 1200
832 IF Y=9 THEN GOSUB 1300
834 IF Y=10 THEN GOSUB 1400
835 IF Y=11 THEN GOSUB 1500
836 IF Y=12 THEN GOSUB 1600
837 IF Y=13 THEN GOSUB 1700
838 IF Y=14 THEN GOSUB 1800
840 GOSUB 2000
860 RETURN
1000 REM
1005 LET N=Q-4
1007 IF N<2 THEN LET N=2
1010 LET E(1)=S(1)
1020 FOR D=N TO Q
1030 LET E(D)=E(D-1)+S(D)
1040 NEXT D
1099 RETURN
1100 REM
1105 LET S(Q)=S(Q)+10
1110 UNPLOT 50,20
1112 UNPLOT 52,22
1114 UNPLOT 52,18
1116 UNPLOT 54,20
1118 UNPLOT 54,16
1120 UNPLOT 54,24
1122 UNPLOT 54,20
1124 UNPLOT 56,14
1126 UNPLOT 56,18
1128 UNPLOT 56,22
1129 UNPLOT 56,26
1130 PRINT AT 10,10;"[S][T][R][I][K][E]"
1132 GOSUB 2000
1140 RETURN
1200 REM
1202 UNPLOT 56,26
1208 LET S(Q)=S(Q)+1
1210 IF J=2 AND W=Y THEN LET S(Q)=S(Q)-1
1212 LET W=Y
1214 LET F=Y
1215 IF J=2 AND R-2=Y THEN LET S(Q)=S(Q)-1
1216 IF J=2 AND H-1=Y THEN LET S(Q)=S(Q)-1
1218 IF J=2 AND B-3=Y THEN LET S(Q)=S(Q)-1
1299 RETURN
1300 REM
1302 UNPLOT 54,24
1304 UNPLOT 56,26
1306 UNPLOT 56,22
1308 LET S(Q)=S(Q)+3
1310 IF J=2 AND W=Y THEN LET S(Q)=S(Q)-3
1311 IF J=2 AND F+1=Y THEN LET S(Q)=S(Q)-1
1312 LET W=Y
1314 LET H=Y
1315 IF J=2 AND R-1=Y THEN LET S(Q)=S(Q)-3
1317 IF J=2 AND B-2=Y THEN LET S(Q)=S(Q)-2
1399 RETURN
1400 REM
1402 UNPLOT 52,22
1404 UNPLOT 56,22
1405 UNPLOT 54,24
1406 UNPLOT 56,26
1409 LET S(Q)=S(Q)+4
1410 IF J=2 AND W=Y THEN LET S(Q)=S(Q)-4
1412 LET W=Y
1414 IF J=2 AND H+1=Y THEN LET S(Q)=S(Q)-4
1416 IF J=2 AND F+2=Y THEN LET S(Q)=S(Q)-1
1417 IF J=2 AND B-1=Y THEN LET S(Q)=S(Q)-3
1418 LET R=Y
1499 RETURN
1500 REM
1502 UNPLOT 50,20
1503 UNPLOT 52,22
1504 UNPLOT 54,20
1506 UNPLOT 54,24
1507 UNPLOT 56,26
1508 UNPLOT 56,22
1509 LET S(Q)=S(Q)+6
1510 IF J=2 AND W=Y THEN LET S(Q)=S(Q)-6
1512 LET W=Y
1513 LET B=Y
1514 IF J=2 AND R+1=Y THEN LET S(Q)=S(Q)-4
1516 IF J=2 AND F+3=Y THEN LET S(Q)=S(Q)-1
1517 IF J=2 AND H+2=Y THEN LET S(Q)=S(Q)-2
1518 IF J=2 AND M-1=Y THEN LET S(Q)=S(Q)-1
1599 RETURN
1600 REM
1602 UNPLOT 52,18
1603 UNPLOT 54,16
1604 UNPLOT 56,18
1605 UNPLOT 56,14
1606 UNPLOT 54,20
1607 LET S(Q)=S(Q)+5
1610 IF J=2 AND W=Y THEN LET S(Q)=S(Q)-5
1612 LET W=Y
1613 LET M=Y
1614 IF J=2 AND O-1=Y THEN LET S(Q)=S(Q)-3
1616 IF J=2 AND U-2=Y THEN LET S(Q)=S(Q)-1
1618 IF J=2 AND B+1=Y THEN LET S(Q)=S(Q)-1
1699 RETURN
1700 REM
1702 UNPLOT 54,16
1703 UNPLOT 56,14
1704 UNPLOT 56,18
1705 LET S(Q)=S(Q)+3
1710 IF J=2 AND W=Y THEN LET S(Q)=S(Q)-3
1712 LET W=Y
1714 IF J=2 AND U-1=Y THEN LET S(Q)=S(Q)-1
1715 IF J=2 AND M+1=Y THEN LET S(Q)=S(Q)-3
1716 LET O=Y
1799 RETURN
1800 REM
1802 UNPLOT 56,14
1805 LET S(Q)=S(Q)+1
1810 IF J=2 AND W=Y THEN LET S(Q)=S(Q)-1
1812 LET W=Y
1814 LET U=Y
1815 IF J=2 AND O+1=Y THEN LET S(Q)=S(Q)-1
1817 IF J=2 AND M+2=Y THEN LET S(Q)=S(Q)-1
1899 RETURN
2000 REM
2002 LET T=0
2004 IF J=1 AND S(Q)=10 THEN LET M$(Q)="[X]"
2006 IF J=2 AND S(Q)=10 THEN LET M$(Q)="[/]"
2007 IF Q=1 THEN GOTO 2100
2008 IF Q=12 THEN GOTO 2060
2010 IF M$(10)="[/]" AND Q>10 THEN LET S(10)=S(10)+S(Q)
2011 IF M$(10)="[/]" AND Q>10 THEN LET I(10)=I(10)+S(Q)
2014 IF M$(10)="[/]" AND Q>10 THEN RETURN
2040 IF M$(Q-1)="[/]" AND J=1 THEN LET S(Q-1)=S(Q-1)+S(Q)
2042 IF M$(Q-1)="[/]" AND J=1 THEN LET I(Q-1)=I(Q-1)+S(Q)
2050 IF Q<3 THEN GOTO 2100
2060 IF M$(Q-2)="[X]" AND M$(Q-1)="[X]" AND (M$(Q)=" " OR M$(Q)="[/]") AND J=1 THEN LET S(Q-2)=S(Q-2)+S(Q)
2065 IF M$(Q-2)="[X]" AND M$(Q-1)="[X]" AND (M$(Q)=" " OR M$(Q)="[/]") AND J=1 THEN LET I(Q-2)=I(Q-2)+S(Q)
2100 RETURN
3000 REM
3003 IF Q=13 THEN GOTO 3530
3005 IF Q<3 THEN GOTO 3500
3010 IF M$(Q-2)="[X]" AND (M$(Q-1)=" " OR M$(Q-1)="[/]") THEN LET S(Q-2)=S(Q-2)+S(Q-1)
3020 IF M$(Q-2)="[X]" AND (M$(Q-1)=" " OR M$(Q-1)="[/]") THEN LET I(Q-2)=I(Q-2)+S(Q-1)
3040 IF M$(Q-2)="[X]" AND M$(Q-1)="[X]" THEN LET S(Q-2)=S(Q-2)+S(Q-1)
3060 IF M$(Q-2)="[X]" AND M$(Q-1)="[X]" THEN LET I(Q-2)=I(Q-2)+S(Q-1)
3500 REM
3510 IF Q<4 THEN GOTO 3800
3530 IF M$(Q-3)="[X]" AND M$(Q-2)="[X]" AND M$(Q-1)="[X]" THEN LET S(Q-3)=S(Q-3)+S(Q-1)
3540 IF M$(Q-3)="[X]" AND M$(Q-2)="[X]" AND M$(Q-1)="[X]" THEN LET I(Q-3)=I(Q-3)+S(Q-1)
3800 REM
3810 GOSUB 1000
3999 RETURN
5000 REM
5005 LET T=0
5010 LET K=K+1
5012 IF Q=13 THEN GOTO 7000
5015 IF M$(Q-1)="[X]" THEN GOTO 5050
5020 IF K>=3 THEN GOTO 7000
5040 IF M$(10)=" " THEN GOTO 7000
5070 IF M$(10)="[X]" THEN GOTO 110
5090 IF M$(10)="[/]" THEN LET K=2
5110 IF M$(10)="[/]" THEN GOTO 110
5999 STOP
6000 REM
6002 CLS
6004 PRINT AT 10,11;"[T]S[-][B][O][W][L]"
6010 FOR N=1 TO 20
6030 NEXT N
6040 CLS
6050 PRINT "WELCOME TO [T]S[-][B][O][W][L] "
6052 FOR N=1 TO 5
6054 PRINT
6056 NEXT N
6058 PRINT "YOU WILL BOWL 10 FRAMES"
6060 PRINT
6062 PRINT "THE BALL-- █ IS CONTROLLED"
6064 PRINT "BY THE 6 AND 7 ARROW KEYS"
6066 PRINT "WITHOUT HOLDING DOWN THE "
6068 PRINT "SHIFT KEY"
6070 PRINT
6072 PRINT "ARE YOU READY ? Y/N"
6074 INPUT B$
6076 IF B$="N" THEN GOTO 6040
6078 PRINT
6080 PRINT "HERE WE GO--GOOD LUCK"
6082 FOR N=1 TO 5
6084 NEXT N
6086 CLS
6999 RETURN
7000 REM
7005 IF Q=13 THEN LET S(10)=10+S(11)+S(12)
7006 IF Q=13 THEN LET I(10)=S(11)+S(12)
7010 FAST
7020 LET T=0
7030 PRINT AT 10,10;"[G][A][M][E] [O][V][E][R]"
7035 GOSUB 1000
7040 FOR N=1 TO 10
7050 LET T=T+S(N)
7052 LET P=N-1
7054 IF N>=6 THEN LET P=9+N
7055 IF N=10 THEN GOTO 7059
7056 PRINT AT P+1,0;" ";N;AT P+1,6;E(N);AT P+1,13;M$(N);AT P+1,18;I(N)
7058 GOTO 7060
7059 PRINT AT P+1,0;" ";N;AT P+1,6;E(N);AT P+1,13;M$(N);AT P+1,18;I(N)
7060 NEXT N
7080 PRINT AT 13,2;"[S][C][O][R][E]= ";T
7090 PRINT AT 14,10;"[G][O]--[A][G][A][I][N] ? Y/N"
7095 INPUT B$
7096 IF B$="N" THEN GOTO 7999
7098 CLS
7099 SLOW
7100 GOTO 50
7999 SLOW
8000 STOP
10 REM Y█▞~~:£A #ACS 9ACS 9ACS 9ACS 9ACS 9ACS =#- ;#; GOSUB #£RND;)▘ ;##TAN :-E£RND7)5 ▞4 GOSUB #6 COPYRNDQ█7▌TAB LIST RNDE COPYRND$TAB DIM RNDTAN [G]# Y█▞,,::LN [▒]RND▖LN [▒]RNDY█▌LN [▒]RND▖# RETURN,COS Y█/ REM TAN Y█▞-:"LN [▒]RND▌LN [▒]RNDY█▖LN [▒]RND▌# RETURN▌COS Y█/ REM TAN Y▒▞*:?LN [▒]RND$# RETURN▒COS Y▒/ POKE TAN
170 DIM Q(4)
172 DIM S(4)
174 DIM G(4)
183 RAND
185 SLOW
195 GOSUB 1000
197 POKE 16685,11
198 POKE 16655,14
200 PRINT AT 5,12;"[R][O][B][O][T]█[W][A][R]"
202 LET X=0
206 GOSUB 300
208 LET Y=0
210 GOSUB 400
212 LET S1=15
213 LET S2=8
215 GOSUB 600
218 FOR N=1 TO 5
220 GOSUB 500
225 GOSUB 530
230 NEXT N
231 LET J1=-20
232 LET J2=-20
233 LET J3=-20
234 LET J4=-20
235 LET G1=0
237 LET G2=0
240 GOTO 1100
299 STOP
300 PRINT AT 20-X,0;"[▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒][▒]"
310 PRINT AT 19-X,3;" █ "
315 PRINT AT 18-X,3;"▐█▐"
317 PRINT AT 17-X,3;"▐█▐"
319 PRINT AT 16-X,2;" "
321 PRINT AT 15-X,2;" "
323 PRINT AT 14-X,2;" "
325 PRINT AT 13-X,3;" "
327 PRINT AT 12-X,3;" "
329 PRINT AT 11-X,3;" "
332 PRINT AT 10-X,3;"[0][0]"
334 PRINT AT 9-X,3;"▟▟"
399 RETURN
400 PRINT AT 19-Y,26;"[▒]█[▒]"
415 PRINT AT 18-Y,26;"▌█▌"
417 PRINT AT 17-Y,26;"▌█▌"
419 PRINT AT 16-Y,26;"[▒][▒][▒][▒]"
421 PRINT AT 15-Y,26;"[▒][▒][▒][▒]"
423 PRINT AT 14-Y,26;"[▒][▒][▒][▒]"
425 PRINT AT 13-Y,27;"[▒][▒]"
427 PRINT AT 12-Y,27;"[▒][▒]"
429 PRINT AT 11-Y,27;"[▒][▒]"
431 PRINT AT 10-Y,27;"[0][0]"
433 PRINT AT 9-Y,27;"▟▟"
499 RETURN
500 REM
503 GOSUB 600
507 POKE 16651,131
509 POKE 16664,131
511 POKE 16675,131
513 LET C1=USR 16650
518 POKE 16651,128
520 POKE 16664,128
524 POKE 16675,128
526 LET C1=USR 16650
529 RETURN
530 REM
532 POKE 16681,138
534 POKE 16694,138
536 POKE 16705,138
540 LET C1=USR 16680
542 POKE 16681,128
544 POKE 16694,128
546 POKE 16705,128
550 LET C1=USR 16680
560 REM GOSUB 600
599 RETURN
600 REM
605 POKE 16711,0
607 POKE 16713,8
608 POKE 16722,S2
609 POKE 16725,0
610 POKE 16715,S1
611 LET C1=USR 16710
615 POKE 16711,8
619 POKE 16713,23
621 POKE 16725,8
624 LET C1=USR 16710
699 RETURN
1000 REM
1010 LET C1=USR 16608
1099 RETURN
1100 REM
1110 GOSUB 1000
1114 PRINT AT 2,2;"WELCOME TO THE YEAR ";INT (RND*100)+3000
1118 PRINT AT 5,2;"SINCE THE LAST GREAT WAR IN"
1120 PRINT AT 6,2;INT (RND*100)+2000
1124 PRINT AT 8,2;"ALL NEW POLITICAL BATTLES"
1126 PRINT AT 9,2;"HAVE BEEN FOUGHT WITH ROBOTS"
1130 PRINT AT 11,2;"....THE ROBOT WHICH WAS"
1132 PRINT AT 12,2;"PROGRAMMED THE BEST--WON"
1134 PRINT AT 14,2;"THE LOSING POWER WAS ENSLAVED"
1136 PRINT AT 20,2;"PRESS ENTER FOR NEXT PAGE"
1138 INPUT Y$
1140 GOSUB 1000
1142 PRINT AT 2,2;"AS RULER OF FEDERATION-";INT (RND*30)
1144 PRINT AT 4,2;"I *DEMAGON* HAVE SELECTED YOU"
1146 PRINT AT 5,2;"TO PROGRAM OUR CHAMPION BELOW"
1147 LET X=0
1148 GOSUB 300
1149 PRINT AT 15,9;"OUR BOY"
1150 PRINT AT 20,2;"PRESS ENTER FOR NEXT PAGE"
1152 INPUT Y$
1156 GOSUB 1000
1160 PRINT AT 2,2;"OUR ENEMY HAS THE UNDEFEATED"
1162 PRINT AT 4,2;"KORKON-";INT (RND*40);" READY TO GO"
1163 LET Y=0
1164 GOSUB 400
1166 PRINT AT 15,6;"BOOOOO..HISS"
1168 PRINT AT 10,12;"[C][O][M][E]█[O][N]█[D][U][M][M][Y]"
1170 FOR N=1 TO 50
1172 NEXT N
1174 GOSUB 1000
1178 PRINT AT 2,2;"...TO PROGRAM..."
1180 PRINT AT 4,2;"JUST ENTER A 4 DIGIT NO."
1182 PRINT AT 6,2;"GREATER THAN 999"
1185 PRINT AT 8,2;"...IF THAT NUMBER MATCHES"
1187 PRINT AT 9,2;"KORKONS --WE WIN"
1189 PRINT AT 12,2;"..AT THE END OF EACH ROUND"
1192 PRINT AT 13,2;"WE WILL BE TOLD HOW MANY:"
1194 PRINT AT 14,2;"1. NUMBERS ARE CORRECT"
1196 PRINT AT 15,2;"2. NUMBERS ARE IN THE RIGHT"
1198 PRINT AT 16,5;"SEQUENCE"
1202 PRINT AT 18,2;"WE CAN THEN MODIFY OUR NUMBER"
1204 PRINT AT 20,2;"PRESS ENTER FOR NEXT PAGE"
1206 INPUT Y$
1210 GOSUB 1000
1214 PRINT AT 2,2;"IF NOTHING IS CORRECT THERE"
1216 PRINT AT 3,2;"WILL BE NO SECOND ROUND"
1218 PRINT AT 5,2;"IF WE LOSE TWO POINTS BETWEEN"
1220 PRINT AT 6,2;"ROUNDS--SEE YOU IN CHAINS"
1225 PRINT AT 8,2;"YOU ONLY HAVE 10 ROUNDS"
1250 PRINT AT 10,2;"ENTER THE NUMBER AND BEGIN"
1252 PRINT AT 12,2;"[R][O][B][O][T]█[W][A][R]"
1254 INPUT N
1255 IF N<1000 THEN GOTO 1250
1256 PRINT AT 20,2;N
1258 GOSUB 7500
1260 LET R=1
1262 LET K1=INT (RND*9)+1
1264 LET K2=INT (RND*10)
1266 LET K3=INT (RND*10)
1268 LET K4=INT (RND*10)
1269 LET KT=K1*1000+K2*100+K3*10+K4
1271 GOSUB 7600
1272 GOSUB 1277
1275 GOTO 1300
1277 LET N1=INT (N/1000)
1280 LET N2=INT ((N-N1*1000)/100)
1284 LET N3=INT ((N-N1*1000-N2*100)/10)
1286 LET N4=N-N1*1000-N2*100-N3*10
1290 RETURN
1300 GOSUB 1000
1310 PRINT AT 2,9;"ROUND ";R;" OF 10"
1320 LET X=5
1322 LET Y=5
1324 GOSUB 300
1326 GOSUB 400
1330 PRINT AT 16,9;"DEPLOY SHIELDS"
1332 FOR J=1 TO 5
1334 NEXT J
1336 LET S1=10
1337 LET S2=3
1340 GOSUB 600
1350 PRINT AT 17,5;"COMMENCE LASER ATTACK"
1360 POKE 16655,9
1362 POKE 16685,5
1364 FOR J=1 TO 5
1366 GOSUB 500
1368 GOSUB 530
1370 NEXT J
1372 FOR H=1 TO 4
1373 LET G(H)=0
1374 NEXT H
1380 IF N=KT THEN GOSUB 1500
1381 IF R=10 THEN GOSUB 1500
1382 GOSUB 1600
1383 PRINT AT 16,9;"████████████████"
1384 PRINT AT 17,5;"██████████████████████████"
1385 PRINT AT 18,2;"NO. OF CORRECT DIGITS=";A1
1387 PRINT AT 19,2;"NO. IN SEQUENCE=";A2
1388 PRINT AT 20,2;"LAST GUESS WAS=";N
1389 PRINT AT 21,2;"ENTER NEXT TRY"
1390 INPUT N
1392 IF N<999 THEN GOTO 1389
1393 GOSUB 7500
1394 PRINT AT 21,19;N
1395 LET R=R+1
1397 GOSUB 1277
1398 GOSUB 7600
1400 GOTO 1300
1500 REM DESTROY
1505 LET QQ=4
1510 IF N=KT THEN LET QQ=25
1515 PRINT AT 10,QQ;"[*]"
1517 PRINT AT 9,QQ-1;"[*][*][*]"
1519 PRINT AT 11,QQ-1;"[*][*][*]"
1521 PRINT AT 8,QQ-2;"[*][*][*][*][*]"
1523 PRINT AT 12,QQ-2;"[*][*][*][*][*]"
1525 PRINT AT 7,QQ-3;"[*][*][*][*][*][*][*]"
1527 PRINT AT 13,QQ-3;"[*][*][*][*][*][*][*]"
1530 POKE 16711,128
1532 POKE 16725,128
1540 IF QQ=4 THEN POKE 16713,8
1542 IF QQ<>4 THEN POKE 16713,23
1544 LET C1=USR 16710
1550 FOR J=1 TO 11
1555 PRINT AT J+3,QQ-5;"██████████"
1560 NEXT J
1570 IF N=KT THEN PRINT AT 7,20;"BRAVO-BRAVO"
1572 IF N<>KT THEN PRINT AT 7,2;"YOU DUMMY"
1573 IF N<>KT THEN PRINT AT 9,2;"IT WAS ";KT
1575 FOR J=1 TO 25
1576 NEXT J
1580 GOSUB 1000
1582 PRINT AT 2,2;"TRY AGAIN Y/N"
1584 INPUT Y$
1586 IF Y$="Y" THEN GOTO 6000
1588 PRINT AT 4,2;"SEE YOU NEXT TIME--"
1590 STOP
1599 RETURN
1600 REM
1602 LET A2=0
1604 LET A1=0
1610 FOR H=1 TO 4
1612 IF NOT Q(H)=S(H) THEN GOTO 1620
1614 LET A2=A2+1
1615 LET A1=A1+1
1616 LET G(H)=1
1620 NEXT H
1628 GOSUB 1700
1630 IF A1>4 THEN LET A1=4
1632 IF A2+1<G2 THEN GOSUB 1500
1633 IF A1=0 AND A2=0 THEN GOSUB 1500
1634 LET G1=A1
1636 LET G2=A2
1699 RETURN
1700 REM
1710 FOR H=1 TO 4
1712 FOR D=1 TO 4
1714 IF NOT S(H)=Q(H) AND G(D)=0 AND Q(H)=S(D) THEN GOTO 1780
1716 GOTO 1785
1780 LET A1=A1+1
1782 LET G(D)=1
1783 GOTO 1790
1785 NEXT D
1790 NEXT H
1799 RETURN
6000 REM
6010 LET G1=0
6020 LET G2=0
6030 GOSUB 1000
6040 PRINT AT 2,2;"ENTER YOUR NUMBER"
6050 INPUT N
6052 IF N<1000 THEN GOTO 6040
6053 PRINT N
6054 GOSUB 7500
6055 GOTO 1260
7500 REM
7510 LET N$=STR$ N
7511 FOR H=1 TO 4
7513 LET Q(H)=VAL N$(H TO H)
7515 NEXT H
7599 RETURN
7600 REM
7610 LET K$=STR$ KT
7612 FOR H=1 TO 4
7614 LET S(H)=VAL K$(H TO H)
7618 NEXT H
7699 RETURN
9000 STOP
9010 INPUT A
9020 INPUT B
9030 PRINT B
9040 POKE A,B
9050 LET A=A+1
9060 GOTO 9020
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.