Compucolor.org – Virtual Media

Listing of file='MAZE.BAS;01' on disk='vmedia/chip_90-sector.ccvf'

0 POKE 33278,0
1 PLOT 6,4,12,11,14
2 PRINT "MAZE.":PRINT
3 PRINT "DO YOU NEED INSTRUCTIONS?";
4 I= RND (1):I= PEEK (33278):IF I= 0THEN 4
5 INPUT "";A$:IF I= 89THEN 2000
10 PRINT :INPUT "INPUT HEIGHT, WIDTH: ";L,W
12 L= INT (L):IF L< 1THEN L= 1
13 IF L> 27THEN L= 27
14 W= INT (W- 1):IF W< 0THEN W= 0
15 IF W> 61THEN W= 61
20 PLOT 15,30,12,6,36
30 DIM P(W),R(W),PP(W),PS(W),PO(W):PRINT " ";
40 FOR I= 0TO W:PRINT "";
50 PS(I)= I
60 NEXT I
70 FOR I= 1TO L
80 IF I> 1THEN PRINT "b";
90 FOR J= 0TO W
100 IF J= 0THEN 460
110 IF R(J- 1)= 0OR R(J- 1)= 2THEN 460
120 PO(P(J- 1))= PO(P(J- 1))- 1
130 IF R(J)= 0OR R(J)= 1THEN 450
140 PO(P(J))= PO(P(J))- 1
150 K= P(J)
160 IF K= P(J- 1)THEN 200
170 K= PP(K):IF K< > P(J)THEN 160
180 M= PP(P(J- 1)):PP(P(J- 1))= PP(P(J)):PP(P(J))= M
190 K= P(J- 1):GOTO 230
200 IF RND (1)> .5THEN 220
210 R(J)= R(J)- 2:K= P(J):P(J)= P(J- 1):GOTO 230
220 R(J- 1)= R(J- 1)- 1:K= P(J- 1)
230 IF PO(K)> 0THEN 280
235 IF P(J)= KTHEN 280
240 PC= PC- 1:PS(PC)= K
250 M= PP(K)
260 IF PP(M)< > KTHEN M= PP(M):GOTO 260
270 PP(M)= PP(K)
280 K= P(J)
290 IF PO(K)> 0THEN 420
300 K= PP(K):IF K< > P(J)THEN 290
310 IF I= LTHEN EC= 1:GOTO 430
320 IF J= WTHEN EC= 2:GOTO 340
330 EC= INT (RND (1)* 3)+ 1
340 IF I= 1THEN 370
350 IF I= LAND EC> 1THEN EC= EC- 2
360 GOSUB 1000
370 PO(P(J))= PO(P(J))+ EC- INT (EC/ 2)
371 IF PO(P(J))> 0THEN 380
373 PC= PC- 1:PS(PC)= P(J)
375 M= PP(P(J))
377 IF PP(M)< > P(J)THEN M= PP(M):GOTO 377
379 PP(M)= PP(P(J))
380 R(J)= EC
390 NEXT J:PRINT :NEXT I:PRINT "b";
400 FOR J= 0TO W:GOSUB 1000:NEXT J:PRINT
411 GOTO 1500
420 EC= INT (RND (1)* 4)
430 IF J= WAND EC< > 0AND EC< > 2THEN EC= EC- 1
440 GOTO 340
450 P(J)= P(J- 1):GOTO 280
460 IF R(J)= 0OR R(J)= 1THEN 480
470 PO(P(J))= PO(P(J))- 1:GOTO 280
480 P(J)= PS(PC):PC= PC+ 1:PP(P(J))= P(J):GOTO 280
1000 ON R(J)+ 1GOTO 1010,1020,1030,1040
1010 PRINT "m";:RETURN
1020 PRINT "";:RETURN
1030 PRINT "b";:RETURN
1040 PRINT " ";:RETURN
1500 PLOT 3,W+ 1,L+ 1,6,4
1502 PLOT 3,0,L+ 3:INPUT "PRESS 'ENTER' WHEN READY: ";A$
1504 PLOT 28,11
1510 FOR I= L- 1TO - 1STEP - 1
1520 FOR J= 1TO 2* W+ 3STEP 2
1530 POKE 24704+ 128* I+ J,4
1540 NEXT J
1550 NEXT I
1560 P= 24707
1570 G= 24705+ 2* (W+ 1)+ 128* (L- 1)
1575 POKE 33210,0:POKE 33209,0
1576 PLOT 3,64,0,27,13
1580 POKE P,12
1590 POKE 33278,0
1600 I= PEEK (33278):IF I= 0THEN 1600
1610 IF I= 25THEN 1660
1620 IF I= 28THEN 1680
1630 IF I= 26THEN 1700
1640 IF I= 8THEN 1720
1650 GOTO 1600
1660 IF PEEK (P- 1)= 2OR PEEK (P- 1)= 13THEN 1590
1670 NP= P+ 2:GOTO 1740
1680 IF PEEK (P- 129)= 13OR PEEK (P- 129)= 31THEN 1590
1690 NP= P- 128:GOTO 1740
1700 IF PEEK (P- 3)= 2OR PEEK (P- 3)= 13THEN 1590
1710 NP= P- 2:GOTO 1740
1720 IF PEEK (P- 1)= 13OR PEEK (P- 1)= 31THEN 1590
1730 NP= P+ 128
1740 IF NP= GTHEN 1780
1750 IF PEEK (NP)= 12THEN POKE P,4
1760 P= NP:GOTO 1580
1780 POKE G,20
1790 POKE 33265,0
1800 PLOT 3,0,L+ 3:PRINT "TIME =";PEEK (33210)* 60+ PEEK (33209);
1810 INPUT " SECONDS.  PLAY AGAIN? ";A$
1820 IF LEFT$ (A$,1)= "Y"THEN CLEAR :GOTO 10
1830 PLOT 1
2000 PLOT 12,14
2010 PRINT "     THIS PROGRAM CREATES A MAZE, AND THEN LETS YOU SOLVE IT."
2020 PRINT
2025 PRINT "     ";
2030 PRINT "YOU INPUT THE DIMENSIONS OF THE MAZE, THE COMPUTER CREATES"
2040 PRINT "IT, AND THEN YOU TRY TO MOVE FROM THE UPPER LEFT CORNER TO THE"
2050 PRINT "LOWER RIGHT CORNER.  MOVE LEFT, RIGHT, AND UP BY PRESSING THE"
2060 PRINT "APPROPRIATE CURSOR CONTROL (GRAY) KEYS.  MOVE DOWN BY PRESSING"
2070 PRINT "THE 'HOME' KEY.  DO NOT PRESS THE CURSOR DOWN KEY.  IF YOU DO,"
2080 PRINT "YOU MUST PRESS 'CPU RESET', AND THEN 'ESC E' TO GET BACK TO"
2090 PRINT "BASIC."
2100 PRINT :INPUT "     PRESS 'ENTER' FOR YOUR FIRST MAZE. ";A$
2110 GOTO 10