--- title: "Games" id: 55195 type: "computer_media" slug: "games-2" url: "http://localhost/computer_media/games-2/" markdown_url: "http://localhost/computer_media/games-2.md" published_at: "2024-06-20T11:49:56+00:00" modified_at: "2026-03-30T21:42:49+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2024/06/gamesbb-1.png" excerpt: "Six games in one BASIC collection — a decision oracle, slot machine, space shooter with joystick support, lottery picker, and more — all driven by a smooth cursor menu." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Butch Weinberg" slug: "butch-weinberg" taxonomy: "indiv" url: "http://localhost/indiv/butch-weinberg/" genre: - name: "Game" slug: "game" taxonomy: "genre" url: "http://localhost/type/game/" media_contents: - id: 55220 title: "Long Island Sinclair Timex (LIST) User Group Library Tape #7" type: "computer_media" url: "http://localhost/computer_media/long-island-sinclair-timex-list-user-group-library-tape-7/" media_type: "Program" programmers: - name: "Butch Weinberg" slug: "butch-weinberg" taxonomy: "indiv" url: "http://localhost/indiv/butch-weinberg/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Games%20%281985%29%28Weinberg%2C%20Butch%29%28TS2068%29%28US%29%28Program%29.zip" mediadate: "1985" images: - url: "http://localhost/wp-content/uploads/2024/06/gamesbb-1.png" - url: "http://localhost/wp-content/uploads/2024/06/gamesbb-3.png" - url: "http://localhost/wp-content/uploads/2024/06/gamesbb-2.png" media_type_tags: "Game" --- # Games This is a multi-game collection containing six games: Decision Maker, Patience, Hide and Seek, One Armed Bandit, Lottery Number Picker, and Star Blaster. The program opens by defining three User Defined Graphics (UDGs at characters 150–152) using POKE USR, reading 24 bytes of shape data from DATA statements. A cursor-driven menu at lines 90–220 uses INKEY$ polling with keys 6 and 7 to move a “>” marker up and down, launching each game via RUN to the appropriate line number. Star Blaster at line 1860 supports both keyboard and joystick input using the TS2068 STICK function (“|”), stores the high score and player name directly in RAM at address 61000 using POKE/PEEK, and uses UDG characters “\g”, “\h”, and “\i” for the ship and alien sprites. The Lottery picker generates up to six numbers per set with rudimentary duplicate-checking logic and supports optional printer output via COPY. *** ## Program Analysis ### Program Structure The program is organized as a self-contained multi-game launcher. Lines 5–70 initialize UDGs, lines 80–87 display a startup screen, lines 90–220 implement the main menu loop, and the six games occupy distinct line ranges: | Line Range | Game | | --- | --- | | 230–535 | Decision Maker | | 540–850 | Patience | | 860–1120 | Hide and Seek | | 1130–1420 | One Armed Bandit | | 1430–1855 | Lottery Number Picker | | 1860–2450 | Star Blaster | | 2500 | Quit (STOP) | Games are launched with `RUN` to a specific line number rather than `GO SUB`, meaning each game starts with a fresh program state. Return to the menu is done with `RUN 90` from within each game. The subroutine at lines 790–850 draws a border of asterisks and is shared between the Patience game’s screens. ### UDG Initialization Lines 10–70 define three UDGs (characters 150, 151, and 152) by POKEing 8 bytes each into the address returned by `USR CHR$ (150+S)`. The 24 bytes of pixel data are read from a single `DATA` statement at line 70. These UDGs are used in Star Blaster for the spaceship (`\g`), a bullet/explosion (`\h`), and alien sprites (`\i`), and in the Lottery and Star Blaster titles as a decorative UDG (`\u`, character 164). ### Menu Navigation The main menu loop (lines 100–220) polls `INKEY$` continuously. The cursor position variable `N` is adjusted using the Boolean arithmetic idiom: `LET N=N-(1 AND INKEY$="7")+(1 AND INKEY$="6")` This moves the marker up with key 7 and down with key 6. `N` is clamped between 4 and 10 at lines 120–130, corresponding to the seven menu entries. The cursor `>` is printed at row `N`, column 2, with a `PAUSE 30` delay before being erased, giving a simple animation effect. ### ON ERR Usage Several games use `ON ERR GO TO 90` (the TS2068 `{` keyword) immediately after entry to redirect any runtime error back to the main menu. This serves as a global error handler for each game section, providing a safety net if unexpected input or an out-of-range operation occurs. ### Star Blaster — Joystick and Keyboard Input Star Blaster (lines 1860–2450) supports two control modes selected at startup via variable `ST`. Keyboard mode uses `INKEY$="8"` and `INKEY$="5"` for right/left movement and `INKEY$="F"` for fire. Joystick mode uses the TS2068 `STICK` function: - `|(1,1)` — reads joystick axis for left/right (values 4 and 8) - `|(2,1)` — reads the fire button (value 1) The ship position is stored in `M` (column), constrained to columns 1–31 with wraparound at lines 2270–2280. Collision detection at line 2200 uses `ATTR` to check the color attribute of the cell at row 0 (the ship’s row), identifying yellow aliens (attribute 110) and red aliens (attribute 106). ### High Score Storage via POKE/PEEK Star Blaster stores the high score and player name directly in RAM starting at address 61000, outside the normal BASIC variable area: - `POKE 61000,(SC*2)/10` — stores score divided by 5 (retrieved as `PEEK 61000*10/2`) - `POKE 61005,NA` — stores the name length - A loop at line 2440 POKEs each character of the player name starting at address 61010 This approach persists the high score across `RUN` calls within a session since BASIC’s `RUN` clears variables but does not disturb arbitrary memory locations. ### Decision Maker The Decision Maker (lines 230–535) selects a response from a fixed string `A$` at line 280 containing six 10-character answers: “YES”, “NO”, “PERHAPS”, “DEFINITELY”, “WHY NOT?”, “ASK AGAIN.” It picks a random offset with `LET R=10*INT(RND*6)+1` and prints `A$(R TO R+9)`. Long questions (over 30 characters) are handled at lines 445–447, splitting overflow into `R$`, though the variable name `R$` conflicts with the numeric answer variable `R` — this is a potential bug if the game re-enters without re-initializing. ### Patience (Number Subtraction Game) Patience (lines 540–850) initializes a 9-character string `A$="999999999"`. Each turn a random digit `R` is generated and the player selects a position 1–9 to subtract it from. The result is stored back using: `LET A$(P)=(CHR$ A AND A>=48)+("*" AND A<48)` This is a conditional string assignment idiom: if the result is a valid digit (ASCII ≥ 48) it stores it, otherwise it places an asterisk to mark an overshot position. The game tracks the best score and best player name across rounds in `S` and `S$`, which survive between plays because they are set before the inner loop. ### Lottery Number Picker The Lottery picker (lines 1430–1855) generates between 1 and 6 numbers per set, for up to 10 sets. Duplicate checking at lines 1600–1680 is only applied when `N>4`, meaning sets of 4 or fewer numbers may contain duplicates. The variable `W` is set and modified at several points (lines 1460, 1490, 1500, 1970) but is never used in any computation affecting output, suggesting it may be a leftover debug or timing variable. Optional hard copy output is provided via `COPY` at line 1760. ### Notable Bugs and Anomalies - Line 535: `IF INKEY$<>"N" OR INKEY$<>"N" OR INKEY$<>"Y" OR INKEY$<>"Y"` — this condition is always true (any key is not-N or not-Y), making it a non-functional guard that always loops back to 510. - Lines 780, 1120, 1855, 2420: Similar always-true OR conditions on inequality checks, all intended as “if none of the above” guards but logically incorrect. - Line 1350: `LET B$(J)=A$(1+6*INT(RND*7) TO 42)` — the slice always extends to position 42 regardless of starting position, so the assigned string lengths vary; since `B$` is dimensioned as `DIM B$(3,6)` only the first 6 characters are stored, which is the intended behavior. - Line 1010 in Hide and Seek: Uses backtick characters (``````) as a sentinel to detect a match, checking `D$(2)="`"` at line 1040 — a clever if unconventional exact-match signal embedded in the directional hint string. - Line 2260: `|(1,1)=8` and `|(1,1)=4` — STICK axis return values of 8 (right) and 4 (left) are used, which matches standard Sinclair joystick interface conventions. ## Source Code ````` 5 REM Games by BUTCH 4/25/85 *= (YTS) Your TS/1000 & ZX81 By D. Hergert ,(BD) Byteing Deeper into your TS/1000 By M. Harrison (Hide & Seek) is Treasure Hunt. Mod.for TS/2068 By Butch Weinberg Lottery & Star Writen PLAY By BUTCH 10 FOR S=0 TO 2 20 FOR I=0 TO 7 30 READ G 40 POKE USR CHR$ (150+S)+I,G 50 NEXT I 60 NEXT S 70 DATA 84,84,84,124,124,124,16,16,0,68,40,16,16,84,56,16,24,90,36,60,255,36,66,129 80 BEEP .2,10: BORDER 0: PAPER 7: INK 0: CLS : PRINT AT 10,9; PAPER 2; INK 6; FLASH 1;"STOP THE TAPE"; FLASH 0: PAUSE 300: POKE 23617,0: POKE 23658,8 85 BORDER 4: CLS : PRINT '" In these games you will be"''" given a menue with a cursor >"''" which you can move up & down"''" with the arrows on the keyboard"''" When it points to the game you"''" want press S. For Lottery the"''" printer is used. Star Blaster"''" can use keyboard or joystick."''" PRESS ANY KEY" 87 IF INKEY$="" THEN GO TO 87 90 BORDER 1: CLS : LET N=4: PRINT AT 2,9;"GAMES BY BUTCH";AT 4,3;"Decision maker";AT 5,3;"Patience";AT 6,3;"Hide and seek";AT 7,3;"One armed bandit";AT 8,3;"Lottery # picker \u 9/84";AT 9,3;"Star blaster \u 4/85";AT 10,3;"QUIT";AT 12,2;"Move the marker with the";AT 14,2;"arrows on the keyboard # 6&7";AT 16,2;"to the game you want then";AT 18,2;"press (S) to start it." 100 LET N$=INKEY$ 110 LET N=N-(1 AND INKEY$="7")+(1 AND INKEY$="6") 120 IF N<=4 THEN LET N=4 130 IF N>=10 THEN LET N=10 140 PRINT AT N,2;">": PAUSE 30: PRINT AT N,2;" " 150 IF N$="S" AND N=4 THEN RUN 230 160 IF N$="S" AND N=5 THEN RUN 540 170 IF N$="S" AND N=6 THEN RUN 860 180 IF N$="S" AND N=7 THEN RUN 1130 190 IF N$="S" AND N=8 THEN RUN 1430 200 IF N$="S" AND N=9 THEN RUN 1860 210 IF N$="S" AND N=10 THEN GO TO 2500 215 IF N$="Z" THEN GO TO 2460 220 GO TO 100 230 BORDER 3: CLS : PRINT AT 1,9; PAPER 6; INK 1;"DECISION MAKER"'' PAPER 7; INK 0;" In this game you will ask"''" the computer a question."''" It will only give a 1 word"''" answer. So your question must"''" be a can,will,could,should"''" type question."''" So have a good time."''' INK 2;" Press any key." 240 IF INKEY$="" THEN GO TO 240 250 CLS : PRINT '''''" What is your name?"''" Type first name, press ENTER" 252 INPUT N$ 253 IF N$="" THEN GO TO 252 256 PRINT ''" Ok ";N$''" to start Press any key.": FOR E=1 TO 60: NEXT E 260 IF INKEY$="" THEN GO TO 260 270 BORDER 1: CLS 275 ON ERR GO TO 90 280 LET A$=" YES NO PERHAPS DEFINITELY WHY NOT? ASK AGAIN." 290 FOR x=0 TO 31 300 PRINT AT 0,x; INK 4;"*";AT 21,x;"*": BEEP .02,X 310 NEXT x 320 FOR y=0 TO 21 330 PRINT AT y,0; INK 4;"*";AT y,31;"*": BEEP .02,Y 340 NEXT y 350 PRINT AT 13,9; PAPER 6; INK 1;"DECISION MAKER" 360 FOR X=8 TO 22 370 PRINT AT 5,X; INK 3;"#";AT 10,X;"#": BEEP .02,X 380 NEXT X 390 FOR Y=5 TO 10 400 PRINT AT Y,8; INK 3;"#";AT Y,22;"#": BEEP .02,Y 410 NEXT Y 420 PRINT AT 17,7;"ASK YOUR QUESTION";AT 19,INT (31-LEN n$)/2;N$: FOR E=1 TO 5: BEEP .05,E: NEXT E: PAUSE 100: PRINT AT 17,7;" ";AT 19,10;" " 430 INPUT Q$ 440 IF Q$="" THEN GO TO 430 445 IF LEN Q$>30 THEN LET R$=Q$(31 TO ): LET Q$=Q$( TO 30) 447 IF LEN Q$<=30 THEN LET R$=" " 450 PRINT AT 2,INT (31-LEN Q$)/2;Q$;AT 4,1;R$ 480 LET R=10*INT (RND*6)+1 490 PRINT AT 6,11;A$(R TO R+9);AT 8,11;N$: FOR E=1 TO 8: BEEP .02,E*3: NEXT E 500 PRINT AT 16,10;"Try Again?";AT 18,10;"Touch Y/N" 510 IF INKEY$="" THEN GO TO 510 520 IF INKEY$="Y" OR INKEY$="y" THEN FOR E=1 TO 60: NEXT E: RUN 250 530 IF INKEY$="N" OR INKEY$="n" THEN BORDER 7: RUN 90 535 IF INKEY$<>"N" OR INKEY$<>"N" OR INKEY$<>"Y" OR INKEY$<>"Y" THEN GO TO 510 540 RANDOMIZE 550 LET S=99: LET S$="NONE" 560 CLS 570 BORDER 5: CLS : GO SUB 790: PRINT AT 4,11; PAPER 6; INK 2;"PATIENCE";AT 7,4; PAPER 7; INK 1;"Hy what is your name?" 575 ON ERR GO TO 90 580 INPUT N$: PRINT ''TAB (30-LEN N$)/2;N$: FOR E=1 TO 120: NEXT E: BEEP .02,2: BEEP .02,4: BEEP .02,6 590 CLS : GO SUB 790: PRINT AT 4,11; PAPER 6; INK 2;"PATIENCE";AT 6,2; PAPER 7; INK 0;"Sub. # from 9's to get 0's";AT 7,2;"USE 0 TO PASS ";N$;AT 15,4;"Best score ";S;" ";S$ 595 ON ERR GO TO 90 600 LET A$="999999999": LET A=48: LET M=0 610 LET R=INT (1+RND*RND*9) 620 PRINT AT 9,12;"123456789";AT 11,12;A$;AT 13,16; INK 2;R: BEEP .02,20: BEEP .02,10 630 IF A$="000000000" THEN BEEP .15,6: BEEP .15,9: BEEP .15,12: BEEP .25,17: BEEP .15,12: BEEP .15,17: GO TO 730 640 IF A<48 THEN BEEP .5,-10: BEEP 1,-20: GO TO 730 650 PAUSE 40000 660 LET M=M+1 670 LET P=CODE INKEY$-48 680 IF P<0 OR P>9 THEN GO TO 670 690 IF P=0 THEN GO TO 610 700 LET A=CODE A$(P)-R 710 LET A$(P)=(CHR$ A AND A>=48)+("*" AND A<48) 720 GO TO 610 730 PRINT AT 18,2;"Number of moves ";N$;" ";M;AT 20,5;"Try again? Y/N" 740 IF M"Y" OR INKEY$<>"y" OR INKEY$<>"N" OR INKEY$<>"n" THEN GO TO 750 790 FOR X=0 TO 31 800 PRINT AT 0,X; INK 1;"*";AT 21,X;"*": BEEP .02,X 810 NEXT X 820 FOR Y=0 TO 21 830 PRINT AT Y,0; INK 1;"*";AT Y,31;"*": BEEP .02,Y 840 NEXT Y 850 RETURN 860 BORDER 3: CLS : PRINT AT 1,8; PAPER 6; INK 1;"HYDE AND SEEK";AT 3,1; PAPER 7; INK 0;"The object is to find me"''"by inputing a letter & a number"''"of the spot you think I am at."'''''" TOUCH ANY KEY" 870 IF INKEY$="" THEN GO TO 870 880 BORDER 0: CLS : RANDOMIZE 885 DIM B$(2): ON ERR GO TO 90 890 LET X1=INT (RND*10) 900 LET Y1=INT (RND*10) 910 PRINT 920 FOR I=1 TO 10 930 PRINT 10-I; PAPER 3;" " 940 NEXT I 950 PRINT " ABCDEFGHIJ" 960 PRINT AT 3,25;"N";AT 5,22;"W";AT 5,28;"E";AT 7,25;"S" 970 POKE 23617,0: POKE 23658,8 980 INPUT "LETTER "; LINE B$(1): INPUT "NUMBER "; LINE B$(2) 990 LET X=CODE B$(1)-65 1000 LET Y=CODE B$(2)-48 1010 LET D$=(" NORTH" AND Y1>Y)+(" SOUTH" AND Y1X)+(" WEST" AND X1"Y" OR INKEY$<>"N" THEN GO TO 1090 1130 BORDER 4: CLS : PRINT AT 2,7; PAPER 6; INK 1;"ONE ARMED BANDIT"; PAPER 7; INK 1;AT 10,5;"Who will be playing?" 1140 INPUT P$: PRINT '''TAB INT (30-LEN P$)/2;P$: PAUSE 200 1150 BORDER 3: CLS : PRINT AT 2,7; PAPER 6; INK 1;"ONE ARMED BANDIT" 1160 RANDOMIZE 1170 LET S=500 1180 LET Q=9999 1185 ON ERR GO TO 90 1190 LET A$=" 0Z80 SILVERCHERRYORANGECASTLEKNIGHT GOLD " 1200 FOR J=3 TO 28 1210 PRINT AT 10,J;"\::" 1220 PRINT AT 11,J;"\::" 1230 PRINT AT 12,J;"\::" 1240 BEEP .02,J 1250 NEXT J 1260 PRINT AT 4,2;"Place your bet 5, 10, or 25";AT 6,8;"Use Q to quit" 1270 IF S<=0 THEN GO TO 1410 1280 INPUT M 1290 IF M=9999 THEN GO TO 1410 1300 PRINT AT 4,2;" ";AT 6,8;" " 1310 PRINT AT 4,7;"Bet ";M;" ";P$ 1320 LET S=S-M 1330 DIM B$(3,6) 1340 FOR J=1 TO 3 1350 LET B$(J)=A$(1+6*INT (RND*7) TO 42) 1360 PRINT AT 11,9*J-5; INK 2;B$(J): BEEP .05,9*J-5 1370 NEXT J 1380 LET S=S+(M*2 AND B$(1)=B$(2))+(M*2 AND B$(1)=B$(3))+(M*2 AND B$(2)=B$(3)) 1390 PRINT AT 15,7;" " 1400 PRINT AT 15,7;"CREDIT ";S;" ";P$: PAUSE 300: GO TO 1200 1410 CLS : PRINT AT 2,7; PAPER 6; INK 1;"ONE ARMED BANDIT";AT 10,10; PAPER 7; INK 0;"OK ";P$;AT 12,10; FLASH 1; INK 2;"GAME OVER"; FLASH 0;AT 14,6; INK 0;"I hope you had fun";AT 16,6;"See you again soon!" 1420 PAUSE 300: BORDER 7: RUN 90 1430 REM Writen by S.J.(BUTCH) Weinberg 9/5/1984 for T/S 2068 1440 BORDER 1: CLS : PRINT ' INK 4;" LOTTERY NUMBER RANDOM PICKER"'' INK 0;" \u S.J.(BUTCH) Weinberg 9/5/84"''"You will be asked a series"''"of questions. After you answer"''"the questions (Press the"''"letter or number then ENTER)."''"The computer will do the rest."'''" TOUCH A KEY" 1450 IF INKEY$="" THEN GO TO 1450 1460 CLS : BORDER 1: PRINT ' INK 4;"LOTTERY NUMBER RANDOM PICKER"'' INK 0;"How many sets Would you like? "'"Max. of ten ";: LET W=331 1465 ON ERR GO TO 90 1470 INPUT S: PRINT S: IF S>10 THEN GO TO 1470 1480 PRINT '"How many numbers per set? "'"Max. of six. ";: INPUT N: PRINT N: IF N>6 THEN GO TO 1480 1490 PRINT '"What is the top number? ";: INPUT TT: PRINT TT: LET W=W+30 1500 PRINT '"Do you want 0s? Y/N ";: INPUT O$: PRINT O$: LET W=W-4881 1510 IF O$="Y" OR O$="y" THEN LET O=0 1520 IF O$="N" OR O$="n" THEN LET O=1 1530 PRINT '"Do you want hard copy? Y/N ";: INPUT H$: PRINT H$ 1540 IF H$="Y" OR H$="y" THEN LET H=2 1550 IF H$="N" OR H$="n" THEN LET H=1 1560 PAUSE 300: BORDER 6: CLS 1570 FOR P=1 TO S 1575 LET T=TT 1580 LET A=INT (RND*T)+O 1590 LET B=INT (RND*T)+O 1600 IF N>4 AND B=A THEN GO TO 1590 1610 LET C=INT (RND*T)+O 1620 IF N>4 AND C=B OR C=A THEN GO TO 1610 1630 LET D=INT (RND*T)+O 1640 IF N>4 AND D=C OR D=B OR D=A THEN GO TO 1630 1650 LET E=INT (RND*T)+O 1660 IF N>4 AND E=D OR E=C OR E=B OR E=A THEN GO TO 1650 1670 LET F=INT (RND*T)+O 1680 IF N>4 AND F=E OR F=D OR F=C OR F=B OR F=A THEN GO TO 1670 1690 IF N=1 THEN PRINT 'A 1700 IF N=2 THEN PRINT 'A;" ";B 1710 IF N=3 THEN PRINT 'A;" ";B;" ";C 1720 IF N=4 THEN PRINT 'A;" ";B;" ";C;" ";D 1730 IF N=5 THEN PRINT 'A;" ";B;" ";C;" ";D;" ";E 1740 IF N=6 THEN PRINT 'A;" ";B;" ";C;" ";D;" ";E;" ";F 1750 NEXT P 1760 IF H=2 THEN COPY 1770 PAUSE 500 1780 CLS : PRINT ''''"Would you like some more # ???"''"Touch Y for Yes N for No": FOR T=1 TO 10: NEXT T 1790 IF INKEY$="" THEN GO TO 1790 1800 IF INKEY$="Y" OR INKEY$="y" THEN FOR T=1 TO 20: NEXT T: GO TO 1820 1810 IF INKEY$="N" OR INKEY$="n" THEN BORDER 7: RUN 90 1820 PRINT '''"Will the factors be the same?" 1830 IF INKEY$="" THEN GO TO 1830 1840 IF INKEY$="Y" OR INKEY$="y" THEN FOR T=1 TO 20: NEXT T: GO TO 1560 1850 IF INKEY$="N" OR INKEY$="n" THEN RUN 1460 1855 IF INKEY$<>"Y" OR INKEY$<>"N" THEN GO TO 1830 1860 REM Star Blaster PLAY By S.J.(BUTCH) Weinberg 4/85 1870 BORDER 4: INK 0: CLS : PRINT ''"So you want to destroy"''"alien bad guys!!"''"Well now you will have a chance."''"You will be the space ship \g"''"at the top of the screen"''"& you can only move left & right"''"BUT you can shoot the bad guys."''"As you travel through space"''"you will be safe from the stars."''TAB 10;"TOUCH ANY KEY" 1880 FOR E=1 TO 3: BEEP .05,E: NEXT E 1890 IF INKEY$="" THEN GO TO 1890 1900 CLS : PRINT ''"But the bad guys \i are"''"dangerous to you, if they"''"touch you they cause damage"''"or destroy you."''"But if you shoot them you"''"score points 10 yellow 20 red."''"It will cost you 5 for each"''"shot and you have only 50."''TAB 10;"TOUCH ANY KEY" 1910 FOR E=1 TO 3: BEEP .05,E: NEXT E 1920 IF INKEY$="" THEN GO TO 1920 1930 CLS : PRINT '"You will have a choice!"''"Keyboard arrows for L/R & F"''"to fire. Or the JOYSTICK"''"(BUTTON TO FIRE)."''"The computer will keep track"''" of who has the best score."''"So good luck & good shoting."'''TAB 10;"TOUCH ANY KEY" 1940 FOR E=1 TO 3: BEEP .05,E: NEXT E 1950 IF INKEY$="" THEN GO TO 1950 1960 BORDER 4: LET W=331: CLS : PRINT ''TAB 10; PAPER 6; INK 2;"STAR BLASTER"'' PAPER 7; INK 1;" \u S.J.(BUTCH) Weinberg 4/85"'' INK 0;"What is your first name?"''"Type name then press ENTER.": INPUT N$: PRINT 'TAB (32-LEN N$)/2;N$ 1965 ON ERR GO TO 90 1970 LET W=W+30: LET NA=LEN N$: LET BS=PEEK 61000*10/2: LET B=PEEK 61005: PRINT 'TAB 7;"Do you want to use."''TAB 7;"1. Joystick"''TAB 7;"2. Keyboard arrows"''"Press # then ENTER": INPUT ST 1980 IF ST=1 THEN PRINT '"You will be using the joystick."''" Best score ";BS;" By ";: FOR B=0 TO (B-1): PRINT CHR$ PEEK (61010+B);: NEXT B: PAUSE 300: GO TO 2000 1990 IF ST=2 THEN PRINT '"You will be using the arrows"''"Best score ";BS;" By ";: FOR B=0 TO (B-1): PRINT CHR$ PEEK (61010+B);: NEXT B: PAUSE 300: GO TO 2000 2000 FOR E=1 TO 5: BEEP .05,15: NEXT E: BORDER 1: PAPER 5: BRIGHT 1: CLS 2010 LET M=15: LET P=1: LET AR=50: LET SC=0: LET DA=0: LET D=0 2020 BORDER 1: POKE 23692,255: LET T=INT (RND*10) 2030 IF P=1 THEN GO SUB 2090: GO SUB 2200 2040 IF P=2 THEN GO SUB 2080: GO SUB 2200 2050 IF T=5 THEN GO SUB 2100: GO SUB 2200 2060 IF T=7 THEN GO SUB 2120: GO SUB 2200 2070 GO TO 2020 2080 PRINT AT 21,INT (RND*32); INK 1;"."'': LET P=1: RETURN 2090 PRINT AT 21,INT (RND*32); INK 3;"*"'': LET P=2: RETURN 2100 PRINT AT 21,INT (RND*19)+1; INK 6;"\i": BEEP .05,10 2110 RETURN 2120 PRINT AT 21,INT (RND*19)+1; INK 2;"\i": BEEP .05,20 2130 RETURN 2140 FOR Q=1 TO 16 2150 IF ATTR (Q,M)=110 THEN LET SC=SC+10: PRINT AT Q,M;" ": RETURN 2160 IF ATTR (Q,M)=106 THEN LET SC=SC+20: PRINT AT Q,M;" ": RETURN 2170 PRINT AT Q,M;"\h": BEEP .05,30 2180 PRINT AT Q,M;" ": NEXT Q: LET J=0 2190 RETURN 2200 IF ATTR (0,M)=106 OR ATTR (0,M)=110 THEN LET D=1 2210 IF DA=3 THEN BORDER 2: BRIGHT 0: PAPER 7: INK 0: CLS : PRINT '''"YOU HAVE FINALY TAKEN A FATAL"''"HIT TO YOUR SHIP."''"YOUR FINAL SCORE ";SC: FOR E=1 TO 10: BEEP .05,-10: NEXT E 2220 IF DA=3 AND SC>BS THEN GO SUB 2430 2230 IF DA=3 THEN PRINT ''"Best score ";PEEK 61000*10/2;" By ";: FOR S=0 TO (PEEK 61005)-1: PRINT CHR$ PEEK (61010+S);: NEXT S: PRINT '''"TRY AGAIN? TOUCH Y/N": GO TO 2390 2240 IF D=1 THEN GO TO 2380 2250 IF ST=2 THEN LET M=M+(1 AND INKEY$="8")-(1 AND INKEY$="5") 2260 IF ST=1 THEN LET M=M+(1 AND |(1,1)=8)-(1 AND |(1,1)=4) 2270 IF M>31 THEN LET M=1 2280 IF M<1 THEN LET M=31 2290 PRINT AT 0,M;"\g" 2300 IF ST=2 THEN LET J=(1 AND INKEY$="F" OR INKEY$="f") 2310 IF ST=1 THEN LET J=(1 AND |(2,1)=1) 2320 IF J=1 THEN GO SUB 2140: LET AR=AR-1: LET SC=SC-5 2330 IF AR=0 THEN GO TO 2350 2340 RETURN 2350 BORDER 2: BRIGHT 0: CLS : PRINT '''"You have run out of amo."''"Your score is ";SC: FOR O=1 TO 10: BEEP .05,30: BEEP .05,15: NEXT O 2360 IF SC>BS THEN GO SUB 2430 2370 PRINT ''"Best score ";PEEK 61000*10/2;" By ";: FOR S=0 TO (PEEK 61005)-1: PRINT CHR$ PEEK (61010+S);: NEXT S: PRINT '''"TRY AGAIN? TOUCH Y/N": GO TO 2390 2380 BORDER 2: CLS : PRINT '''"YOU HAVE BEEN DAMAGED BUT"''"NOT ENOUGH TO DESTROY YOUR"''"SHIP. YOUR SCORE SO FAR ";SC''"SHOTS LEFT ";AR: LET DA=DA+1: LET D=0: BEEP .25,-10: BEEP .5,-20: FOR E=1 TO 240: NEXT E: CLS : GO TO 2020 2390 IF INKEY$="" THEN GO TO 2390 2400 IF INKEY$="Y" OR INKEY$="y" THEN RUN 1960 2410 IF INKEY$="N" OR INKEY$="n" THEN LET W=W-4881: BEEP .20,17: BEEP .20,17: BEEP .20,17: BEEP .15,5: BEEP .20,14: BEEP .20,10: BORDER 7: PAPER 7: BRIGHT 0: INK 0: RUN 90 2420 IF INKEY$<>"Y" OR INKEY$<>"y" OR INKEY$<>"N" OR INKEY$<>"n" THEN GO TO 2390 2430 POKE 61000,(SC*2)/10: POKE 61005,NA 2440 FOR N=0 TO (NA-1): POKE (61010+N),CODE (N$(N+1)): NEXT N 2450 RETURN 2500 STOP 9997 STOP 9998 SAVE "GAMES" LINE 1 `````