home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib32b.dsk
/
SPELLING.MAZE.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
7KB
|
201 lines
10 REM **********************
20 REM * SPELLING.MAZE *
30 REM * BY W. P. DOYLE, JR.*
40 REM * COPYRIGHT (C) 1987 *
50 REM * BY MICROSPARC, INC *
60 REM * CONCORD, MA 01742 *
70 REM **********************
80 REM SET UP PROGRAM
90 HIMEM: 36864 -1024 *( PEEK(48896) = 76)
100 D$ = CHR$(4):B$ = CHR$(7)
110 ONERR GOTO 1790
120 NW = 10
130 PRINT D$"BLOAD MAZE.SHAPES"
140 PRINT D$"BLOAD MAZE.TUNE"
150 POKE 216,0
160 POKE 232,0: POKE 233,144
170 HOME : VTAB 4: PRINT "SPELLING MAZE BY W.P. DOYLE, JR."
180 PRINT "COPYRIGHT 1987 BY MICROSPARC, INC.": VTAB 20: PRINT "RETURN TO CONTINUE";: GET Z$: PRINT
190 DIM P(36,2),UP(36),DN(36),RT(36),LT(36),WD$(NW),WF(NW)
200 FOR I = 1 TO 36
210 R1 = INT((I -1)/6):R = 6 -R1:C = I -(R1 *6)
220 P(I,2) = (R *20) +10
230 P(I,1) = (C *20) +70
240 NEXT I
250 FOR I = 1 TO NW
260 READ WD$(I)
270 WF(I) = 0
280 NEXT I
290 HCOLOR= 3: SCALE= 1
300 WALL = 27:MAN = 28:ARROW = 29
310 DATA CAT,DOG,BIRD,BOAT,CAR,APPLE,TREE,MAN,GIRL,BOY
320 REM KEYBOARD OR JOYSTICK COMMANDS
330 VTAB 10: CALL -958
340 JF = 0: PRINT "KEYBOARD OR JOYSTICK (K OR J)? ";: GET R$: PRINT R$
350 R$ = LEFT$(R$,1)
360 IF R$ = "J" OR R$ = CHR$(106) THEN JF = 1
370 IF R$ < >"J" AND R$ < >"K" AND R$ < > CHR$(106) AND R$ < > CHR$(107) THEN PRINT B$;: GOTO 330
380 REM GET WORD
390 FOR I = 1 TO NW
400 IF WF(I) = 0 THEN 430
410 NEXT I
420 RESTORE : GOTO 250
430 W = INT( RND(1) *NW) +1
440 IF WF(W) = 1 THEN 430
450 WF(W) = 1
460 WL = LEN(WD$(W))
470 FOR I = 1 TO WL
480 L$(I) = MID$ (WD$(W),I,1):LN(I) = ASC(L$(I))
490 NEXT I
500 REM SET UP COMMAND STRINGS
510 UC = ASC("I"):UA = 11: REM UP COMMANDS
520 DC = ASC("M"):DA = 10: REM DOWN COMMANDS
530 LC = ASC("J"):LA = 8: REM LEFT COMMANDS
540 RC = ASC("K"):RA = 21: REM RIGHT COMMANDS
550 REM DRAW MAZE
560 HGR : HTAB 1: VTAB 21: CALL -958
570 HPLOT 100,140 TO 200,140 TO 200,20
580 HPLOT 80,120 TO 80,20 TO 200,20
590 FOR I = 1 TO 36
600 UP(I) = 0:DN(I) = 0:RT(I) = 0:LT(I) = 0
610 NEXT I
620 FOR I = 1 TO 6
630 DN(I) = 1:UP(30 +I) = 1
640 LT(1 +(I -1) *6) = 1:RT(I *6) = 1
650 NEXT I
660 FOR I = 1 TO 35
670 T = INT( RND(1) *3) +1
680 IF T = 1 OR (T = 2 AND (I -(( INT((I -1)/6)) *6) = 6)) OR (T = 3 AND I >30) THEN 770
690 R1 = INT((I -1)/6):R = 6 -R1:C = I -(R1 *6)
700 IF R = 1 OR R = 6 OR C = 6 THEN 770
710 IF T = 3 THEN 750
720 RT(I) = 1:LT(I +1) = 1
730 ROT= 0: DRAW WALL AT P(I,1),P(I,2)
740 GOTO 770
750 UP(I) = 1:DN(I +6) = 1
760 ROT= 48: DRAW WALL AT P(I,1),P(I,2)
770 NEXT I
780 ROT= 0
790 REM PLACE LETTERS
800 FOR I = 1 TO WL
810 LP = INT( RND(1) *34) +2
820 IF I = 1 THEN 860
830 FOR J = 1 TO I
840 IF LP = LP(J) THEN 810
850 NEXT J
860 LP(I) = LP
870 DRAW LN(I) -64 AT P(LP,1),P(LP,2)
880 NEXT I
890 CL = 1:LP(WL +1) = 0
900 REM PLACE MAN AND DIRECTIONS
910 HTAB 1: VTAB 21: CALL -958
920 PRINT "MOVE THE MAN THROUGH THE MAZE AND SPELL"
930 FOR I = 1 TO WL
940 PRINT L$(I);" ";
950 NEXT I
960 PRINT : PRINT "TO OPEN THE EXIT (<ESC> TO QUIT)"
970 XDRAW MAN AT P(1,1),P(1,2):MP = 1
980 REM DRAW COMMANDS ON SCREEN
990 IF JF GOTO 1090
1000 IF UC < >11 THEN DRAW UC -64 AT 240,70: GOTO 1020
1010 ROT= 0: DRAW ARROW AT 240,70
1020 IF LC < >8 THEN DRAW LC -64 AT 220,80: GOTO 1040
1030 ROT= 48: DRAW ARROW AT 220,80
1040 IF RC < >21 THEN DRAW RC -64 AT 260,80: GOTO 1060
1050 ROT= 16: DRAW ARROW AT 260,80
1060 IF DC < >10 THEN DRAW DC -64 AT 240,90: GOTO 1090
1070 ROT= 32: DRAW ARROW AT 240,90
1080 REM GET COMMAND & DO IT
1090 ROT= 0
1100 IF JF GOTO 1900
1110 A$ = "ARROWS"
1120 IF UC < >11 THEN A$ = CHR$(UC) +"," + CHR$(LC) +"," + CHR$(RC) +"," + CHR$(DC)
1130 HTAB 1: VTAB 24: CALL -958: PRINT "PUSH ";A$;": ";: GET R$
1140 R = ASC(R$)
1150 IF R >90 THEN R = R -32
1160 NP = 0
1170 IF (R = UC OR R = UA) AND UP(MP) = 0 THEN NP = MP +6
1180 IF (R = LC OR R = LA) AND LT(MP) = 0 THEN NP = MP -1
1190 IF (R = RC OR R = RA) AND RT(MP) = 0 THEN NP = MP +1
1200 IF (R = DC OR R = DA) AND DN(MP) = 0 THEN NP = MP -6
1210 IF R = 27 THEN HOME : VTAB 21: GOTO 1470
1220 IF ((NP = 0) AND (JF = 0)) THEN PRINT B$;: GOTO 1130
1230 IF ((NP = 0) AND (JF = 1)) THEN 1090
1240 XDRAW MAN AT P(MP,1),P(MP,2)
1250 XDRAW MAN AT P(NP,1),P(NP,2)
1260 IF NP = LP(CL) THEN 1310
1270 FOR I = 1 TO WL
1280 IF NP = LP(I) AND L$(CL) = L$(I) THEN 1310
1290 NEXT I
1300 GOTO 1400
1310 GOSUB 1550
1320 VTAB 22: HTAB (2 *CL -1): INVERSE : PRINT L$(CL);: NORMAL
1330 XDRAW (LN(CL) -64) AT P(NP,1),P(NP,2):CL = CL +1
1340 REM OPEN EXIT
1350 IF CL < = WL THEN 1400
1360 HCOLOR= 0: HPLOT 180,20 TO 200,20 TO 200,40
1370 HCOLOR= 3
1380 GOSUB 1620
1390 REM CHECK FOR "WIN"
1400 MP = NP
1410 IF MP = 36 AND CL >WL THEN 1430
1420 GOTO 1090
1430 HTAB 1: VTAB 21: CALL -958
1440 PRINT "YOU DID IT!!!"
1450 GOSUB 1710
1460 REM QUIT ROUTINE
1470 PRINT "PRESS Q TO QUIT-RETURN TO PLAY AGAIN";
1480 POKE -16368,0
1490 IF PEEK( -16287) >127 OR PEEK( -16286) >127 GOTO 390
1500 ON PEEK( -16384) <128 GOTO 1490:R$ = CHR$( PEEK( -16384) -128): POKE -16368,0
1510 IF R$ < >"Q" AND R$ < > CHR$(113) THEN 390
1520 TEXT : HOME : PRINT "SEE YOU LATER!!"
1530 END
1540 REM MUSIC - GOT LETTER
1550 POKE 7,100
1560 FOR J = 1 TO 3
1570 POKE 6,200: CALL 768
1580 POKE 6,100: CALL 768
1590 NEXT J
1600 RETURN
1610 REM MUSIC - OPEN EXIT
1620 POKE 7,100
1630 FOR J = 1 TO 5
1640 POKE 6,(220 -(J *10))
1650 CALL 768
1660 NEXT J
1670 POKE 7,200: POKE 6,160
1680 CALL 768
1690 RETURN
1700 REM MUSIC - "WIN"
1710 FOR J = 10 TO 100 STEP 10
1720 POKE 6,100 +J: POKE 7,100: CALL 768
1730 NEXT J
1740 FOR J = 10 TO 100 STEP 10
1750 POKE 6,210 -J: POKE 7,100: CALL 768
1760 NEXT J
1770 RETURN
1780 REM ERROR ROUTINE
1790 PRINT B$;B$;B$;
1800 PRINT "THE FILES MAZE.SHAPES AND MAZE.TUNE"
1810 PRINT "MUST BE IN THE DEFAULT DISK DRIVE."
1820 PRINT "PLEASE PUT THEM THERE AND PUSH 'C',"
1830 PRINT "OR PUSH 'Q' TO QUIT."
1840 GET R$: PRINT R$
1850 IF R$ = "C" THEN RESUME
1860 IF R$ = "Q" OR R$ = CHR$(113) THEN END
1870 PRINT B$;"PUSH C OR Q"
1880 GOTO 1840
1890 REM JOYSTICK CONTROL
1900 HTAB 1: VTAB 24: PRINT "USE THE JOYSTICK";
1910 FOR I = 1 TO 150: NEXT I
1920 R = 0:P0 = PDL(0):P1 = PDL(1)
1930 IF P0 <100 THEN R = LC
1940 IF P0 >156 THEN R = RC
1950 IF P1 <100 THEN R = UC
1960 IF P1 >156 THEN R = DC
1970 X = PEEK( -16384)
1980 IF X <127 THEN 2010
1990 IF X = 155 THEN R = 27
2000 POKE -16368,0
2010 GOTO 1160