Word Cross is a crossword-placement game in which the player positions words from a themed list onto an 18×18 grid, scoring points each time a letter overlaps (“crosses”) a letter already on the board. The program ships with six built-in word lists (Colors, States of America, Countries, Food, Clothes, Flowers) and allows the player to type in a custom list of up to 20 words of up to 10 letters each. Collision detection is handled entirely in BASIC through a flat 324-character string array that mirrors the grid, with the `fit` subroutine checking all four orthogonal adjacency directions before a placement is accepted or rejected. The logo routine at line 4000 uses CIRCLE and POINT-scanning to draw a filled circle, combined with block-graphic characters to render a stylized banner; a random border/paper color is selected at startup, with colors 2–4 excluded to ensure legibility.
Program Analysis
Program Structure
The program is organized as a collection of named subroutines, with line 10 acting as a symbol table that stores all entry-point line numbers in named variables (e.g., fit=20, squares=100, logo=4000). Line 12 jumps to start (line 75), which chains through the major initialization routines before falling into the main game loop at prog (line 500). This symbol-table pattern makes the control flow readable and allows line numbers to be changed without hunting through every GO TO.
Grid Representation
The 18×18 crossword grid is stored as a single flat string c$ of 324 characters, initialized with spaces. The mapping from grid row r and column c to a string index is q = 18*(r-2) + c-12, computed at line 20. Words placed across advance by stride s=1; words placed down advance by stride s=18. The complementary stride s2 = 19-s (either 18 or 1) is used in adjacency checks, neatly unifying across/down logic.
The fit Subroutine (Lines 20–70)
This is the collision-detection core. For each letter of the word being placed it sets six Boolean flags:
f— the target cell is already occupied by a different letter (hard clash)f1— there is a letter immediately ahead in the perpendicular direction (would create an illegal adjacency)f2— there is a letter immediately behind in the perpendicular directionf3— there is a letter immediately before in the placement direction (word would run into existing content)f4— there is a letter immediately after in the placement directionf5— the letter matches the existing cell content (a valid crossing)f6— signals that a crossing occurred for this specific letter, triggering a score increment and a beep
If any of f through f4 is set after iterating over all letters, the placement is rejected via the fault subroutine. A placement where every letter matches existing content (all f6, making a1 = w(n)) is caught at line 598 and routed to the cheat handler.
Word List Subsystem (Lines 2500–2566)
Six built-in word lists are stored as space-delimited strings (e.g., x$) in subroutines at lines 2510, 2520, 2530, 2540, 2550, and 2560. The item subroutine (line 2030) parses x$ by scanning for space delimiters, populating the w$() string array and w() length array. The menu at line 2500 selects a list via GO SUB 2500+10*VAL i$, a compact computed GO SUB that avoids a chain of IF statements. Custom word entry is handled by the ownlist routine (lines 120–197); re-entry is blocked by a non-empty sentinel o$.
Scoring and Game Progression
Each letter that lands on a matching existing letter scores one point (accumulated in a1 per word, a overall). Every five crossings the player is offered a stop/continue choice via the option subroutine (line 2100). Reaching 20 crossings triggers the win sequence at line 620. Up to five placement errors are allowed; the mistake counter m is tracked in the mistake subroutine (line 3030), and exhausting all five attempts routes to a game-over branch at line 3040.
Logo Routine (Lines 4000–4028)
The startup logo at line 4000 picks a random border/paper color excluding codes 2–4 (to avoid dark-on-dark combinations). It draws a filled circle using CIRCLE followed by a scanline fill: for each row from 115 to 170, the routine walks pixel-by-pixel with POINT until it hits the circle boundary, then draws a horizontal line across the diameter with DRAW. Block-graphic characters build a decorative banner. The publisher name is animated by printing it from the edges inward in a loop at lines 4016–4018.
Input Handling
The ucase subroutine (line 2000) provides a reusable uppercase-only keypress reader: it loops until a letter is detected (CODE q$ in A–Z or a–z range) and converts lowercase to uppercase by subtracting 32 from the character code. The custom word-entry routine (line 140 onward) uses a software cursor with delete support via CHR$ 12 (Spectrum DELETE), rebuilding the input string on each deletion.
Error Handling
Line 3 installs ON ERR GO TO 9990 as a global error trap. The handler at lines 9990–9993 cascades through RESET, a pause, a re-trap, and finally ON ERR CONTINUE, attempting to recover gracefully rather than halt. Line 9899 provides a PAUSE 250: RUN restart stub. Line 9900 contains the SAVE block with a machine-code companion blob saved as CODE USR "a", 168, though this code is not called within the visible BASIC listing.
Notable Bugs and Anomalies
- Line 630 references variable
col(inPAPER col) inside the win-display loop, butcolis never explicitly assigned — onlycol2is set during play. This will cause an error unless the error trap intervenes. - Line 144 is referenced by the
GO TO 144+2*(i$="")idiom at line 180, but line 144 does not exist; the nearest lower line is 140. On the Spectrum, aGO TOto a non-existent line number jumps to the next higher line, so this is intentional: wheni$is non-empty it goes to line 146 (re-read key), and when empty it falls through to line 145 (draw cursor). - Line 152 references
GO TO 144(delete-character logic), again relying on the non-existent-line behavior to land at line 145. - At line 3053, after game over the replay uses
GO TO 530, but line 530 does not exist; control will fall to line 540, skipping the initialCLSand variable resets in lines 500–510, potentially leaving stale state. - Lines 2030–2054 (
item) assume words inx$are always terminated by a space, and that there are always exactly 20 words; if fewer words are present theFOR i=1 TO wloop will attempt to index past the end ofx$.
Content
Source Code
1 REM Wordcross \ \ \ \ \ \ \ \ \ \ \
2 REM \* FISHER-MARRIOTT #3 9/2/83 ZX Spectrum 48K
3 ON ERR GO TO 9990
5 LET o$="": LET z$="WORDCROSS": LET a$=" 0": LET d$="\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s": DIM w$(20,11): DIM w(20): DIM c$(324)
10 LET option=2100: LET clear=750: LET clever=1510: LET long=700: LET item=2030: LET prog=500: LET cheat=1500: LET replay=3050: LET mistake=3030: LET ucase=2000: LET choose=2010: LET start=75: LET ownlist=120: LET fault=3000: LET intro=1000: LET fit=20: LET squares=100: LET logo=4000: LET lists=2500
12 GO TO start
19 REM fit
20 LET q=18*(r-2)+c-12
22 IF i<>w(n) THEN GO TO 36
25 IF q+s>324 THEN GO TO 29
27 IF c$(q+s)="\s" THEN GO TO 36
28 LET f5=1
29 IF c$(q)=w$(n,i) THEN GO TO 66
30 IF r+s=37 OR c+s=31 THEN GO TO 36
32 LET f4=1
36 IF i<>1 THEN GO TO 46
37 IF q-s<1 THEN GO TO 40
38 IF c$(q-s)="\s" THEN GO TO 46
39 LET f5=1
40 IF c$(q)=w$(n,i) THEN GO TO 66
41 IF r+s=20 OR c+s=14 THEN GO TO 46
42 LET f3=1
46 IF c$(q)=w$(n,i) THEN GO TO 66
47 IF q-s2<1 THEN GO TO 49
48 IF c$(q-s2)="\s" THEN GO TO 52
49 IF r+s=3 OR c+s=31 THEN GO TO 52
50 LET f2=1
52 IF q+s2>324 THEN GO TO 56
54 IF c$(q+s2)="\s" THEN GO TO 61
56 IF r+s=20 OR c+s=48 THEN GO TO 61
58 LET f1=1
61 IF c$(q)="\s" THEN GO TO 70
63 LET f=1
64 GO TO 70
66 PRINT AT r,c;""+w$(n,i)+"": BEEP .25,12: LET a1=a1+1: PRINT AT 0,26-LEN STR$ (a1+a);""+STR$ (a1+a)+"": LET f6=1
70 RETURN
74 REM start
75 GO SUB logo
76 GO SUB squares
77 GO SUB intro
78 GO SUB lists
79 GO TO prog
99 REM squares
100 FOR i=1 TO 18: LET c$((i-1)*18+1 TO i*18)=d$: NEXT i: RETURN
119 REM ownlist
120 IF o$<>"" THEN GO TO 5000
125 CLS : PRINT "\s\a\s ";z$;AT 5,0;"\a\s\a You may",,"\a\s\a enter up",,"\a\s\a to TWENTY",,"\a\s\a words.";AT 14,0;"\s\a\s Each word",,"\s\a\s may contain",,"\s\a\s up to TEN",,"\s\a\s letters."
127 PRINT AT 21,0;"Press any key when ready"; PAPER 8
128 IF INKEY$="" THEN GO TO 128
129 CLS : PRINT "\s\a\s ";z$;AT 3,0;"\a\s\a End each",,"\a\s\a word with",,"\a\s\a ""ENTER""";AT 9,0;"\s\a\s PRESS 0",,"\s\a\s if your",,"\s\a\s LAST WORD",,"\s\a\s comes",,"\s\a\s BEFORE",,"\s\a\s NUMBER 20."
130 PRINT AT 18,0;"\a\s\a If you make",,"\a\s\a a MISTAKE,",,"\a\s\a press SHIFT",,"\a\s\a and DELETE."
131 PRINT AT 12,20;"Press any";AT 13,20;"key when";AT 14,20;" ready "
133 IF INKEY$="" THEN GO TO 133
134 PRINT AT 12,20;" ";AT 13,20;" ";AT 14,20;" ": FOR i=1 TO 20
138 PRINT AT i,18-(i>9);i;"> <"
139 IF INKEY$<>"" THEN GO TO 139
140 LET p=20: LET n$=""
145 PRINT AT i,p;"\s"
146 LET i$=INKEY$: IF i$="" THEN GO TO 146
152 IF i$=CHR$ 12 AND p>20 THEN PRINT AT i,p-1;" ": LET p=p-1: LET n$=n$( TO LEN n$-1): GO TO 144
155 IF i$=CHR$ 13 AND n$<>"" THEN GO TO 190
158 IF i$="0" AND n$="" AND i>2 THEN LET i=20: GO TO 194
160 IF CODE i$<65 OR CODE i$>122 THEN GO TO 138
161 IF CODE i$>90 AND CODE i$<97 THEN GO TO 138
164 LET n$=n$+i$: PRINT AT i,20;n$: IF LEN n$>10 THEN GO TO 138
166 LET p=p+1
180 GO TO 144+2*(i$="")
190 PRINT AT i,p;" ";AT i,30;" ": LET w$(i)=n$: LET w=i: LET w(i)=LEN n$
194 NEXT i: LET o$="YES": CLS : PRINT AT 10,0;"\a\s\a Thank you for the words.",,,,,"\a\s\a WORDCROSS coming soon."
197 FOR i=1 TO 100: NEXT i: RETURN
499 REM prog
500 CLS : LET a=0: LET a2=0: LET a$=" 0": LET m=0: LET p=10: LET u=11-INT (w/2): LET d=u+w-1
501 CLS : PRINT TAB 16;" Score: ";a$;" "; PAPER 8;TAB 12;" ABCDEFGHIJKLMNOPQR "
502 FOR i=1 TO 17 STEP 2: PRINT AT i+1,12;""+CHR$ (i+64)+"";TAB 31;""+CHR$ (i+64)+"";TAB 12;""+CHR$ (i+65)+"";TAB 31;""+CHR$ (i+65)+"": NEXT i
503 PRINT TAB 12;" ABCDEFGHIJKLMNOPQR "
505 FOR i=0 TO 17: PRINT PAPER 0;AT i+2,13;c$(18*i+1 TO 18*i+18): NEXT i
507 FOR i=0 TO 10-w/2: PRINT AT i,0;TAB 12: NEXT i
510 GO SUB choose: GO SUB clear
540 LET n=p-u+1: PRINT AT 1,0;"";w$(n, TO w(n));""; PAPER 8;AT 3,0;"Start at";AT 5,0;"Column >>?";
541 GO SUB ucase: IF q$>"R" THEN GO TO 541
542 PRINT CHR$ 8;"";q$;"": LET c=CODE q$-52: LET c1=c: PRINT AT 1,c;"\s";AT 20,c;"\s";AT 7,0;"Row >>>>>?";: GO SUB ucase
544 PRINT CHR$ 8;"";q$;"";: LET r=CODE q$-63: LET r1=r: PRINT AT r,12;"\s";AT r,31;"\s";AT r,c;"*";AT 9,0;"O.K.";AT 10,0;"(Y OR N)?"
546 GO SUB ucase: IF q$<>"Y" AND q$<>"N" THEN GO TO 546
560 IF q$="N" THEN GO TO 501
563 PRINT AT 9,0;"Press";AT 10,0;"A Across ";AT 11,0;"D Down"
565 GO SUB ucase: GO TO 565+2*(q$="A" OR q$="D")
567 PRINT AT 9,0;" ";AT 10,0;" ";AT 11,0;" "
568 LET s=(q$="A")+18*(q$="D"): LET s2=19-s
572 IF (s=1 AND (c+w(n)>=32)) OR (s=18 AND (r+w(n)>=21)) THEN GO SUB long: GO SUB mistake: GO TO replay
580 LET f5=0: LET a1=0: FOR i=1 TO w(n): LET f=0: LET f1=0: LET f2=0: LET f3=0: LET f4=0: LET f6=0: GO SUB fit
582 IF f OR f1 OR f2 OR f3 OR f4 THEN GO SUB fault: GO SUB mistake: GO TO replay
590 LET col2=INT (RND*6)+1
592 IF f6 THEN GO TO 596
594 PRINT PAPER col2;AT r,c;w$(n,i): BEEP .1,-12
596 LET r=r+(s=18): LET c=c+(s=1): NEXT i
598 IF a1=w(n) THEN GO SUB cheat: GO SUB mistake: GO TO replay
599 IF f5 THEN GO SUB clever
600 FOR i=w(n) TO 1 STEP -1: LET c$(q)=w$(n,i): LET q=q-s: NEXT i
601 LET a=a+a1: IF a>=20 THEN GO TO 620
604 IF INT (a/5)>a2 THEN LET A2=A2+1: GO TO option
606 LET a$=(" " AND a<10)+STR$ a: PRINT PAPER 7;AT 0,24;a$
608 IF f5 THEN GO TO 501
610 BRIGHT 1: PRINT AT 1,c1;CHR$ (c1+52);AT 20,c1;CHR$ (c1+52);AT r1,12;CHR$ (r1+63);AT r1,31;CHR$ (r1+63): BRIGHT 0: GO TO 505
620 PAUSE 200: CLS
622 PRINT AT 12,0;"Well done",,"You have made ";a;" crossings,","and you have won the game.";AT 16,0;"Press any key"
626 IF INKEY$="" THEN GO TO 626
630 CLS : BRIGHT 1: PRINT AT 1,6;"\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a": FOR i=0 TO 17: PRINT AT i+2,6;"\a"; PAPER 7;c$(18*i+1 TO 18*i+18); PAPER col;AT i+2,25;"\a": NEXT i: PRINT AT 20,6;"\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a": BRIGHT 0
632 PRINT AT 1,0;"Press";AT 3,0;"C to";AT 4,0;"copy";AT 6,0;"P to";AT 7,0;"play";AT 8,0;"again";AT 9,0;"using";AT 10,0;"the";AT 11,0;"same";AT 12,0;"words";AT 14,0;"N for";AT 15,0;"a new";AT 16,0;"game";AT 19,0;"S to";AT 20,0;"stop"
633 LET q$=INKEY$: IF q$="" THEN GO TO 633
635 GO SUB 2006
637 IF q$="C" THEN PRINT AT 0,5: FOR i=1 TO 20: PRINT TAB 5;" ": NEXT i: COPY : GO TO 632
639 IF q$="P" THEN GO SUB squares: GO TO prog
640 IF q$="N" THEN GO SUB squares: GO TO 78
642 IF q$<>"S" THEN GO TO 633
644 CLS : PRINT AT 10,0;"\a\s\a ";z$;AT 12,4;"If anyone wants to play,";AT 13,4;"press any key";AT 14,4;"-------------"
648 IF INKEY$<>"" THEN RUN
650 GO TO 648
699 REM long
700 PRINT AT 15,0;w$(n, TO w(n));AT 16,0;"is too long"; PAPER 8;AT 17,0;"to fit,";AT 18,0;"going";AT 19,0;""+("across." AND s=1)+("downwards." AND s=18);AT 21,0;"Press any key"; PAPER 8
702 IF INKEY$<>"" THEN GO TO 702
704 IF INKEY$="" THEN GO TO 704
706 RETURN
749 REM clear
750 PRINT AT 0,0;: FOR i=0 TO 20: PRINT TAB 11;" ": NEXT i: PRINT TAB 31;" ": RETURN
999 REM intro
1000 CLS : FOR i=1 TO 9: IF i=5 THEN PRINT AT 12,4;"C": BEEP .25,24: GO TO 1002
1001 PRINT AT 7+i,4;""+z$(i)+"";: BEEP .1,12: PRINT AT 12,i-1;""+z$(i)+"": BEEP .1,12
1002 NEXT i: BEEP .25,12
1003 PRINT AT 2,13;"\a Your aim is to";AT 3,13;"\a fit words on";AT 4,13;"\a to a grid, making";AT 5,13;"\a them ""cross"".";AT 7,13;"\s You can choose";AT 8,13;"\s to stop after";AT 9,13;"\s 5,10,15, or 20";AT 10,13;"\s crossings.";AT 12,13;"\a Your WORDCROSS";AT 13,13;"\a will then";AT 14,13;"\a be complete."
1004 PRINT AT 16,13;"\s But"; PAPER 8;", you are not";AT 17,13;"\s allowed more than";AT 18,13;"\s FIVE mistakes.";AT 20,13;"Press any key"; PAPER 8
1005 IF INKEY$="" THEN GO TO 1005
1006 RETURN
1499 REM cheat
1500 CLS : PRINT AT 10,0;"\a\s\a It is no good";AT 11,4;"trying to get extra points";AT 12,4;"that way."
1503 PRINT AT 14,0;"Over-printing is not allowed.";AT 15,0;"\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''"; INK 9
1504 PRINT AT 18,4;"Press any key"
1505 IF INKEY$<>"" THEN GO TO 1505
1506 IF INKEY$="" THEN GO TO 1506
1508 RETURN
1509 REM clever
1510 CLS : PRINT AT 10,0;"\a\s\a That is very clever,";AT 11,4;"but it is not really a";AT 12,4;z$;".";AT 16,4;"However, I will allow it.";AT 18,4;"Press any key"
1514 IF INKEY$="" THEN GO TO 1514
1516 RETURN
1999 REM ucase
2000 IF INKEY$<>"" THEN GO TO 2000
2002 LET q$=INKEY$: IF (q$<"a" OR q$>"z") AND (q$<"A" OR q$>"Z") THEN GO TO 2002
2006 IF CODE q$>96 THEN LET q$=CHR$ (CODE q$-32)
2007 RETURN
2009 REM choose
2010 FOR i=1 TO w: PRINT AT u+i-1,0;" "+w$(i): NEXT i
2012 PRINT AT 0,0;"Which"; PAPER 8;" ";"word"; PAPER 8;"?";AT p,0;">";AT 21,0;"Press U or D to move, S to STOP"
2015 LET q$=INKEY$: GO SUB 2006: IF q$<>"S" AND q$<>"U" AND q$<>"D" THEN GO TO 2015
2016 IF q$="S" THEN PAPER col: GO TO 2028
2017 PRINT PAPER col;AT p,0;" "+w$(p-u+1, TO w(p-u+1))
2018 IF q$="D" THEN LET p=p+1: IF p>d THEN LET p=u
2019 IF q$="U" THEN LET p=p-1: IF p<u THEN LET p=d
2020 PRINT AT p,0;">"
2021 PAPER 7: IF col=0 OR col=7 THEN PAPER INT (RND*6)+1
2022 PRINT AT p,1;w$(p-u+1, TO w(p-u+1)); PAPER col: BEEP .075,-12
2024 GO TO 2015
2028 RETURN
2029 REM items
2030 LET l=LEN x$: LET c=0: LET w=20: CLS : FOR i=1 TO w: LET s=c+1
2042 LET c=c+1: IF x$(c)=" " THEN GO TO 2050
2048 GO TO 2042
2050 LET col2=INT (RND*8): IF col2=col THEN GO TO 2050
2052 PAPER col2: LET w$(i)=x$(s TO c-1): LET w(i)=c-s: PRINT AT i,5;"Found"; PAPER col;" ";"";w$(i, TO w(i));""
2054 NEXT i: PAUSE 200: PAPER col: RETURN
2099 REM option
2100 CLS : PRINT AT 10,0;"\a You have made ";a;" crossings.";AT 12,0;"\s Choose";AT 14,5;"S to stop.";AT 16,5;"C to carry on."
2105 IF INKEY$<>"" THEN GO TO 2105
2110 IF INKEY$="S" OR INKEY$="s" THEN GO TO 630
2112 IF INKEY$="C" OR INKEY$="c" THEN CLS : LET f5=1: GO TO 606
2114 GO TO 2110
2499 REM lists
2500 CLS : PRINT "\a\s\a Lists for ";z$;AT 4,0;"CHOOSE",,,,,,"1 Colors",,,,"2 States of America",,,"3 Countries",,,,"4 Food",,,,"5 Clothes",,,,"6 Flowers",,,,"7 Put in your own list"
2501 LET i$=INKEY$: IF i$="7" THEN GO SUB ownlist: RETURN
2502 IF i$>"0" AND i$<"7" THEN LET w=20: GO SUB 2500+10*VAL i$: GO SUB item: RETURN
2503 GO TO 2501
2510 LET x$="indigo maroon red blue green yellow scarlet navy pink orange brown white black gold silver purple gray fawn sepia cream "
2514 LET n$="Colors"
2516 RETURN
2520 LET x$="OREGON NEBRASKA ARKANSAS IDAHO WASHINGTON ILLINOIS FLORIDA LOUISIANA OKLAHOMA UTAH GEORGIA HAWAII MINNESOTA MICHIGAN MAINE CALIFORNIA NEVADA TEXAS MISSOURI KENTUCKY "
2524 LET N$="States of America"
2526 RETURN
2530 LET X$="FRANCE SPAIN PORTUGAL BRAZIL COLOMBIA CHILE CHINA INDIA BURMA AUSTRALIA ZIMBABWE ALGERIA ISRAEL TURKEY CANADA MEXICO NIGERIA GERMANY ENGLAND IRELAND "
2534 LET N$="Countries"
2536 RETURN
2540 LET x$="sugar honey peanuts popcorn cornflakes bacon egg sausage hamburgers tomatoes bread butter candy lettuce cucumber fruit vegetables cookies spaghetti beans "
2544 LET n$="Food"
2546 RETURN
2550 LET x$="slacks skirt jumper vest socks belt raincoat shoes pants shirt blouse boots sweater tights sneakers tie jeans cap slippers pajamas "
2554 LET n$="Clothes"
2556 RETURN
2560 LET x$="rose pansy carnation daffodil magnolia buttercup tulip crocus snowdrop lily daisy zinnia clematis iris poppy lilac laburnum hyacinth camellia orchid "
2562 LET n$="Flowers"
2566 RETURN
2999 REM fault
3000 PRINT AT 14,0;
3001 IF f THEN PRINT c$(q);" and ";w$(n,i)
3002 IF f1 THEN PRINT w$(n,i);" and ";c$(q+s2)
3003 IF f2 THEN PRINT c$(q-s2);" and ";w$(n,i)
3004 IF f3 THEN PRINT c$(q-s);" and ";w$(n,i)
3005 IF f4 THEN PRINT w$(n,i);" and ";c$(q+s)
3006 PRINT "do not fit"; PAPER 8
3012 PRINT AT r,c;""+w$(n,i)+""
3014 IF f1 THEN PRINT AT r+(s=1),c+(s=18);""+c$(q+s2)+""
3016 IF f2 THEN PRINT AT r-(s=1),c-(s=18);""+c$(q-s2)+""
3018 IF f3 THEN PRINT AT r-(s=18),c-(s=1);""+c$(q-s)+""
3020 IF f4 THEN PRINT AT r+(s=18),c+(s=1);""+c$(q+s)+""
3022 IF INKEY$<>"" THEN GO TO 3022
3025 IF f THEN PRINT AT r,c;w$(n,i): PAUSE 10: PRINT AT r,c;c$(q): PAUSE 10
3026 PRINT AT 21,0;"Press any key"; PAPER 8
3027 IF INKEY$="" THEN GO TO 3025
3028 RETURN
3029 REM mistake
3030 LET M=M+1: CLS : PRINT AT 10,0;"\a\s\a You have made ";m;" mistake"+("s" AND m>1);"."
3031 IF m=5 THEN GO TO 3040
3033 PRINT AT 14,0;"\a\s\a You have ";5-m;" chance"+("s" AND m<>4);" left.": GO TO 3045
3040 PRINT AT 14,0;"\a\s\a Sorry, that was your";AT 15,4;"last chance."
3045 PRINT AT 20,4;"Press any key"; PAPER 8
3046 IF INKEY$<>"" THEN GO TO 3046
3047 IF INKEY$="" THEN GO TO 3047
3048 RETURN
3049 REM replay
3050 IF m<5 THEN GO TO 501
3052 CLS : PRINT AT 5,4;"\a\s\a ";z$;AT 12,4;"Press";AT 14,4;"A To play again,";AT 15,7;"using the same words.";AT 18,4;"B To play again,";AT 19,7;"but with new words."
3053 GO SUB 2000: IF q$="A" THEN GO TO 530
3055 IF q$="B" THEN GO TO 110
3057 GO TO 3053
4000 LET col=INT (RND*8): IF col=2 OR col=3 OR col=4 THEN GO TO 4000
4001 BORDER col: PAPER col: CLS : INK 9: CIRCLE 128,115,56
4002 DIM c$(324)
4003 LET p=72: FOR i=115 TO 170
4005 IF POINT (p,i) THEN PLOT p,i: DRAW 2*(128-p),0: BEEP .01,p-72: PLOT p,230-i: DRAW 2*(128-p),0: BEEP .01,p-72: GO TO 4007
4006 LET p=p+1: GO TO 4005
4007 NEXT i
4009 IF col>3 THEN PAPER 0: INK 7: BRIGHT 1
4010 IF col>3 THEN PAPER 7: INK 0
4011 FOR j=4 TO 8: PRINT AT j,11;" \::\::\::\::\ \::\ \::\ ": NEXT j
4013 PRINT AT 4,12;"\..\..\..\::\ \..\ \..";AT 6,12;"\..\..": PAPER col: INK 9: BRIGHT 0
4014 PRINT AT 10,15;"-": FOR J=0 TO 7
4016 PRINT AT 10,j;" FISHER";AT 10,24-j;"MARRIOTT"; PAPER col;" ": BEEP .1,42-6*j: BEEP .1,39-6*j: NEXT j
4018 PRINT AT 10,8;" FISHER-MARRIOTT"; PAPER col;" "; INK 9
4020 PRINT AT 16,2;"\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''"
4022 PRINT TAB 3;"\: \: \: ";TAB 3;"\: \: \h\i\j\d\' \h\i\: \h\i\j\d\' \h\i\j\h\i\j\h\i\j";TAB 3;"\: \: \: \: \: \: \: \: \: \: \: \: \q\i\j\q\i\j";TAB 3;"\e\f\e\f\g\e\f\g\: \e\f\: \e\f\g\: \e\f\g\e\f\g\e\f\g";TAB 2;"\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.."; INK 9
4023 PRINT AT 12,13;"\* 1983": BEEP 1,-24: PAUSE 250
4028 RETURN
5000 CLS : PRINT PAPER 7;AT 5,0;"\a\s\a Wordcross";AT 10,0;"You have already entered a word-list."''"If you really want to enter another list, you will have to BREAK, and re-RUN.";AT 21,0;"Press any key"
5002 IF INKEY$<>"" THEN GO TO 5002
5004 IF INKEY$="" THEN GO TO 5004
5006 GO TO start+1
9899 PAUSE 250: RUN
9900 CLEAR : SAVE "wordcross" LINE 9902: SAVE " "CODE USR "a",168: STOP
9902 LOAD ""CODE : RUN
9990 ON ERR RESET
9991 PAUSE 100
9992 ON ERR GO TO 9990
9993 ON ERR CONTINUE
9998 STOP
9999 VERIFY "": VERIFY ""CODE
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.




