10 REM WORDSQUARE
20 MODE 1
30 BORDER 13
40 GOSUB 500
50 DIM P(10),X(10),Y(10)
60 DIM S$(255),T$(255)
70 DIM W(10)
80 GOSUB 680
90 GOSUB 1030
100 FOR L=1 TO 10:W(L)=0
110 NEXT L
120 SC=0
130 GOTO 160
140 LOCATE 1,22:PRINT "BE SENSIBLE"
150 FOR L=1 TO 1500:NEXT L
160 LOCATE 1,23:PRINT "Your Guess                  "
170 LOCATE 12,23
180 INPUT A$
190 IF LEN(A$)=0 OR LEN(A$)>10 THEN GOTO 140
195 a$=UPPER$(a$)
200 LOCATE 1,22
210 PRINT "                              "
220 GOSUB 1180
230 IF F=0 THEN LOCATE 1,22:PRINT "Not there":GOTO 400
240 SC=SC+1
250 REM HIGHLIGHT THE WORD WHICH HAS BEE N FOUND
260 IF W(F)=1 THEN LOCATE 1,22:PRINT "You've already had that word":GOTO 400
270 W(F)=1
280 B=INT(P(F)/15)
290 A=P(F)-15*B
300 FOR L=1 TO O
310 LOCATE A+6,B+3
320 GOSUB 640:D$=CHR$(DD)
330 LOCATE A+6,B+3:PEN 2
340 PRINT D$
350 PEN 1
360 A=A+X(F):B=B+Y(F)
370 NEXT L
380 IF SC=10 THEN GOTO 430
390 LOCATE 1,23:PRINT "Well done ";SC;" correct so far"
400 FOR L=1 TO 2000:NEXT L
410 LOCATE 1,23:PRINT "                               "
420 GOTO 160
430 REM Here when all ten are found
440 CLS
450 LOCATE 1,11
460 PRINT "Well done...you found them all"
470 IF INKEY$<>"" THEN GOTO 470
480 IF INKEY$="" THEN GOTO 480
490 END
500 REM PUT MACHINE CODE JUST ABOVE RE-ADJUSTED HIMEM
510 MEMORY 39000
520 MC=HIMEM+1
530 TA=HIMEM+&7F
540 TH=INT(TA/256)
550 TL=TA-256*TH
560 POKE MC,&CD
570 POKE MC+1,&60
580 POKE MC+2,&BB
590 POKE MC+3,&32
600 POKE MC+4,TL
610 POKE MC+5,TH
620 POKE MC+6,&C9
630 RETURN
640 CALL MC
660 DD=PEEK(TA)
670 RETURN
680 REM READ IN DATA AND STORE IN SQUARE
690 LOCATE 11,11: PRINT "ONE MOMENT"
700 S$=""
710 FOR L=1 TO 15
720 S$=S$+"                "
730 NEXT L
740 RESTORE 1270
750 FOR I=1 TO 10
760 READ N$
770 N=LEN(N$)
780 N$=RIGHT$(N$,N)
790 ON INT(RND(1)*8) GOSUB 1100,1110,1120,1130,1140,1150,1160,1170
800 A=INT(RND(1)*15):B=INT(RND(1)*15)
810 C=A+X(I)*N
820 D=B+Y(I)*N
830 IF C<0 OR D<0 OR C>14 OR D>14 THEN GOTO 790
840 L=-1
850 L=L+1
860 Q=1+(B+Y(I)*L)*15+A+X(I)*L
870 Q$=MID$(S$,Q,1)
880 IF Q$=" " THEN GOTO 900
890 IF Q$<>MID$(N$,L+1,1) THEN GOTO 790
900 IF L<>N-1 THEN GOTO 850
910 FOR L=0 TO N-1
920 Q=1+(B+Y(I)*L)*15+A+X(I)*L
930 S$=LEFT$(S$,Q-1)+MID$(N$,L+1,1)+MID$(S$,Q+1)
940 NEXT L
950 P(I)=A+B*15
960 NEXT I
970 T$=""
980 FOR L=1 TO 255
990 IF MID$(S$,L,1)=" " THEN T$=T$+CHR$(INT(RND(1)*26+65)) ELSE T$=T$+MID$(S$,L,1)
1000 NEXT L
1010 S$=T$:T$=""
1020 RETURN
1030 REM DISPLAY SQUARE CLS
1040 CLS
1050 FOR L=0 TO 14
1060 LOCATE 6,L+3
1070 PRINT MID$(S$,L*15+1,15)
1080 NEXT L
1090 RETURN
1100 X(I)=-1:Y(I)=-1:RETURN
1110 X(I)=1:Y(I)=1:RETURN
1120 X(I)=-1:Y(I)=1:RETURN
1130 X(I)=1:Y(I)=-1:RETURN
1140 X(I)=1:Y(I)=0:RETURN
1150 X(I)=0:Y(I)=1:RETURN
1160 X(I)=-1:Y(I)=0:RETURN
1170 X(I)=0:Y(I)=-1:RETURN
1180 REM CHECK IF RESPONSE IS VALID
1190 RESTORE 1270
1200 F=0
1210 FOR L=1 TO 10
1220 READ N$
1230 IF N$=A$ THEN F=L:O=LEN(N$)
1240 NEXT L
1250 RETURN
1260 REM WORD LISTS
1270 DATA AMSTRAD,VIDEO,COLOUR
1280 DATA SOUND,GRAPHICS,GAMES
1290 DATA MONITOR,PLAY,COMPUTER
1300 DATA WATER