40 GOSUB 320:COUNT=1
50 '
80 A$=INKEY$:IF A$= "" THEN 80
90 IF A$="Q" OR A$="q" THEN 1380
100 IF DISPLAY THEN PEN 2:LOCATE 1,1:PRINT "MOVE #";COUNT
110 IF ASC(A$)=240 AND SPACE > 4 THEN POSITION(SPACE)=POSITION(SPACE-4):POSITION(SPACE-4)=16:SPACE=SPACE-4:Z=POSITION(SPACE):X=XCOOR(SPACE):Y=YCOOR(SPACE):GOSUB 1270 ELSE 130
120 Z=POSITION(SPACE+4):X=XCOOR(SPACE+4):Y=YCOOR(SPACE+4):GOSUB 1270
130 IF ASC(A$)=241 AND SPACE < 13 THEN POSITION(SPACE)=POSITION(SPACE+4):POSITION(SPACE+4)=16:SPACE=SPACE+4:Z=POSITION(SPACE):X=XCOOR(SPACE):Y=YCOOR(SPACE):GOSUB 1270 ELSE 150
140 Z=POSITION(SPACE-4):X=XCOOR(SPACE-4):Y=YCOOR(SPACE-4):GOSUB 1270
150 IF ASC(A$)=242 AND (SPACE <>1 AND SPACE <>5 AND SPACE <>9 AND SPACE <>13) THEN POSITION(SPACE)=POSITION(SPACE-1):SPACE=SPACE-1:POSITION(SPACE)=16 ELSE 170
160 Z=POSITION(SPACE+1):X=XCOOR(SPACE+1):Y=YCOOR(SPACE+1):GOSUB 1270:Z=POSITION(SPACE):X=XCOOR(SPACE):Y=YCOOR(SPACE):GOSUB 1270
170 IF ASC(A$)=243 AND (SPACE <>4 AND SPACE <>8 AND SPACE <>12 AND SPACE <>16) THEN POSITION(SPACE)=POSITION(SPACE+1):SPACE=SPACE+1:POSITION(SPACE)=16 ELSE 80
180 Z=POSITION(SPACE-1):X=XCOOR(SPACE-1):Y=YCOOR(SPACE-1):GOSUB 1270:Z=POSITION(SPACE):X=XCOOR(SPACE):Y=YCOOR(SPACE):GOSUB 1270
190 COUNT=COUNT+1:FOR T=1 TO 16:IF POSITION(T)=T AND WIN=1 THEN NEXT T:GOTO 230 ELSE 80
200 '
230 MODE 0:SOUND 1,200,100,15,1,1,1
240 LOCATE 3,8:PEN 7:PRINT "CONGRATULATIONS!"
250 PEN 10:LOCATE 14,10:PRINT "You did it in"
260 PRINT COUNT; "MOVES."
270 FOR T=1 TO 3000:NEXT T
280 RUN
290 '
320 MODE 1
330 BORDER 0
340 PAPER 0
350 INK 0,0
360 INK 1,18
370 INK 2,15
380 INK 3,24
390 SYMBOL 240,0,0,96,96,96,96,96,96
400 SYMBOL 241,0,0,3,3,3,3,3,3
410 SYMBOL 242,0,0,99,99,99,99,99,99
420 SYMBOL 243,96,96,96,96,96,96,96,96
430 SYMBOL 244,99,99,99,99,99,99,99,99
440 SYMBOL 245,0,0,248,248,0,0,0,0
450 SYMBOL 246,0,0,248,248,24,24,24,24
460 SYMBOL 247,0,0,24,24,24,24,24,24
470 SYMBOL 248,248,248,24,24,24,24,24,24
480 SYMBOL 249,248,248,0,0,0,0,248,248
490 SYMBOL 250,24,24,24,24,24,24,248,248
500 SYMBOL 251,248,248,24,24,24,24,248,248
510 DIM CHAR$(16)
520 FOR T=1 TO 16
530 READ A,B,C,D
540 CHAR$(T)=CHR$(A)+CHR$(B)+CHR$(C)+CHR$(D)
550 NEXT T
560 DATA 241,32,209,32
570 DATA 32,246,209,249
580 DATA 32,246,32,251
590 DATA 241,247,32,248
600 DATA 241,245,32,251
610 DATA 241,245,209,251
620 DATA 32,246,32,149
630 DATA 241,246,209,251
640 DATA 241,246,32,251
650 DATA 242,246,244,250
660 DATA 242,32,244,32
670 DATA 240,246,244,249
680 DATA 240,246,243,251
690 DATA 242,247,243,248
700 DATA 242,245,243,251
710 DATA 32,32,32,32
720 DIM XCOOR(16),YCOOR(16),POSITION(16)
730 FOR T=1 TO 16:POSITION(T)=T:NEXT T
740 FOR T=1 TO 4
750 FOR N=1 TO 4
760 XCOOR(4*(T-1)+N)=N*2+15
770 YCOOR(4*(T-1)+N)=T*2+8
780 NEXT N:NEXT T
790 PEN 2
800 PRINT TAB(10) "FIFTEEN PUZZLE"
810 PEN 1
820 LOCATE 4,9:PRINT "DISPLAY MOVE NUMBER (Y/N) ?"
830 A$=INKEY$:IF A$= "" THEN 830
840 IF A$="Y" OR A$="y" THEN DISPLAY=1
850 PRINT:PRINT TAB(4); "AUDIO FEEDBACK ON (Y/N) ?"
860 A$=INKEY$:IF A$= "" THEN 860
870 IF A$="Y" OR A$="y" THEN FEEDBACK=1
880 PRINT:PRINT TAB(4) "RANDOM SET-UP (Y/N) ?"
890 A$=INKEY$:IF A$= "" THEN GOTO 890 ELSE IF A$="Y" OR A$="y" THEN WIN=1 ELSE WIN=0
895 '
900 MODE 1
910 FOR T=1 TO 400 STEP 5
920 MOVE 0,200
930 DRAW 320,T,RND(1)*2+1
940 MOVE 639,200
950 DRAW 321,T,RND(0)*2+1
960 NEXT
970 LOCATE 16,7
980 PEN 3
990 PRINT CHR$(214);
1000 FOR T=1 TO 8
1010 PRINT CHR$(143);
1020 NEXT T
1030 PRINT CHR$(215)
1040 LOCATE 16,8
1050 PRINT STRING$(10,CHR$(143))
1060 LOCATE 16,9
1070 PRINT STRING$(10, CHR$(143))
1080 FOR T=10 TO 17:LOCATE 16,T:PRINT CHR$(143)+"        "+CHR$(143):NEXT T
1090 LOCATE 16,18:PRINT CHR$(213);
1100 PRINT STRING$(8, CHR$(143));CHR$(212)
1110 PAPER 0:PEN 0:LOCATE 18,8:PRINT "PUZZLE":PAPER 0:PEN 1
1120 IF WIN=0 THEN GOTO 1210
1130 FOR T=1 TO 30
1140 R1=CINT(RND(1)*15+1)
1150 R2=CINT(RND(1)*15+1)
1160 O1=POSITION(R1)
1170 O2=POSITION(R2)
1180 POSITION(R1)=O2
1190 POSITION(R2)=O1
1200 NEXT T
1210 FOR T=1 TO 16:IF POSITION(T)=16 THEN SPACE=T ELSE NEXT T
1220 DIM COL(16)
1230 FOR T=1 TO 16:COL(T)=CINT(RND(1)*2+1):NEXT T
1240 FOR T=1 TO 16:Z=POSITION(T):X=XCOOR(T):Y=YCOOR(T):GOSUB 1270:NEXT T
1250 '
1270 PEN COL(Z)
1280 COUNT=COUNT+0.5
1290 IF FEEDBACK THEN PRINT CHR$(7) ;
1300 LOCATE X,Y
1310 PRINT LEFT$(CHAR$(Z),2)
1320 LOCATE X,Y+1
1330 PRINT RIGHT$(CHAR$(Z),2)
1340 RETURN
1350 '
1380 LOCATE 1,3:PRINT "bye for now"
1390 END