10 REM 15-PUZZLE GAME 20 REM COMMODORE BASIC 2.0 30 REM ******************************** 40 GOSUB 400 : REM INTRO AND LEVEL 50 GOSUB 510 : REM SETUP BOARD 60 GOSUB 210 : REM PRINT PUZZLE 70 PRINT "TO MOVE A PIECE, ENTER ITS NUMBER:" 80 INPUT X 90 GOSUB 760 : REM CHECK IF MOVE IS VALID 100 IF MV=0 THEN PRINT "WRONG MOVE" : GOSUB 1130 : GOTO 60 110 D(Z)=X : D(Y)=0 120 GOSUB 210 : REM PRINT PUZZLE 130 GOSUB 1030: REM CHECK IF PUZZLE COMPLETE 140 IF PC THEN 160 150 GOTO 70 160 PRINT"YOU WON!" 170 END 180 REM 190 REM ******************************* 200 REM PRINT/DRAW THE PUZZLE 210 FOR P=1 TO 16 220 IF D(P)=0 THEN D$(P)=" " : GOTO 260 230 S$=STR$(D(P)) 240 N=LEN(S$) 250 D$(P) = LEFT$(" ",3-N)+S$+" " 260 NEXT 270 PRINT "+-----+-----+-----+-----+" 280 PRINT "!"D$(1)"!"D$(2)"!"D$(3)"!"D$(4)"!" 290 PRINT "+-----+-----+-----+-----+" 300 PRINT "!"D$(5)"!"D$(6)"!"D$(7)"!"D$(8)"!" 310 PRINT "+-----+-----+-----+-----+" 320 PRINT "!"D$(9)"!"D$(10)"!"D$(11)"!"D$(12)"!" 330 PRINT "+-----+-----+-----+-----+" 340 PRINT "!"D$(13)"!"D$(14)"!"D$(15)"!"D$(16)"!" 350 PRINT "+-----+-----+-----+-----+" 360 RETURN 370 REM 380 REM ******************************* 390 REM INTRO AND LEVEL OF DIFFICULTY 400 PRINT CHR$(147) 410 DIM SH(3) : SH(1)=10 : SH(2)=50 : SH(3)=100 420 PRINT "15 PUZZLE GAME FOR COMMODORE BASIC 2.0" : PRINT : PRINT 430 PRINT "PLEASE ENTER LEVEL OF DIFFICULTY," 440 PRINT "1(EASY), 2(MEDIUM) OR 3(HARD):"; 450 INPUT V 460 IF V<1 OR V>3 THEN 440 470 RETURN 480 REM 490 REM ******************************* 500 REM BUILD THE BOARD 510 DIM D(16) : DIM D$(16) : REM BOARD PIECES 520 REM SET PIECES IN CORRECT ORDER FIRST 530 FOR P=1 TO 15 540 D(P) = P 550 NEXT 560 D(16) = 0 : REM 0 = EMPTY PIECE/SLOT 570 Z=16 : REM Z = EMPTY POSITION 580 PRINT: PRINT "SHUFFLING PIECES"; 590 FOR N=1 TO SH(V) 600 PRINT"."; 610 X = INT(RND(0)*4)+1 620 IF X=1 THEN R=Z-4 630 IF X=2 THEN R=Z+4 640 IF (X=3) AND (INT((Z-1)/4)<>(Z-1)/4) THEN R=Z-1 650 IF (X=4) AND (INT(Z/4)<>Z/4) THEN R=Z+1 660 IF R<1 OR R>16 THEN 610 670 D(Z)=D(R) 680 Z=R 690 D(Z)=0 700 NEXT 710 PRINT CHR$(147) 720 RETURN 730 REM 740 REM ******************************* 750 REM CHECK IF MOVE IS VALID 760 MV = 0 770 IF X<1 OR X>15 THEN RETURN 780 REM FIND POSITION OF PIECE X AND OF EMPTY PIECE 790 AX=X 800 GOSUB 940 : REM FIND POSITION OF PIECE AX 810 Y=P 820 AX=0 830 GOSUB 940 : REM FIND POSITION OF PIECE AX 840 Z=P 850 REM CHECK IF EMPTY PIECE IS ABOVE, BELOW, LEFT OR RIGHT TO PIECE X 860 IF Y-4=Z THEN MV=1 : RETURN 870 IF Y+4=Z THEN MV=1 : RETURN 880 IF (Y-1=Z) AND (INT(Z/4)<>Z/4) THEN MV=1 : RETURN 890 IF (Y+1=Z) AND (INT(Y/4)<>Y/4) THEN MV=1 : RETURN 900 RETURN 910 REM 920 REM ******************************* 930 REM FIND POSITION OF PIECE AX 940 P=1 950 IF D(P)=AX THEN 990 960 P=P+1 970 IF P>16 THEN PRINT "UH OH!" : STOP 980 GOTO 950 990 RETURN 1000 REM 1010 REM ******************************* 1020 REM CHECK IF PUZZLE IS COMPLETE / GAME OVER 1030 PC = 0 1040 P=1 1050 IF (P>=16) OR (D(P)<>P) THEN 1080 1060 P=P+1 1070 GOTO 1050 1080 IF P=16 THEN PC=1 1090 RETURN 1100 REM 1110 REM ****************************** 1120 REM A SMALL DELAY 1130 FOR T=0 TO 400 1140 NEXT 1150 RETURN