10 REM LANDMINE 20 REM **************************************** 30 REM 40 POKE 900,10:REM NO MINES = 10 INITIALLY 50 POKE 56,PEEK(56)-1:CLR:POKE 56,PEEK(56)+1 60 DIM A$(19,18) 70 POKE 36879,42:PRINT"{clr}" 80 GOSUB 1440 90 POKE 56,PEEK(56)-1 100 POKE 36869,255 110 FOR I=1 TO 19 120 FOR J=1 TO 18 130 A$(I,J)="{green}=" 140 NEXT J 150 NEXT I 159 REM 160 REM SET UP MINES AT RANDOM 161 REM 170 FOR I=1 TO PEEK(900) 180 X%=RND(1)*19+1 190 Y%=RND(1)*18+1 200 IF A$(X%,Y%)="{yellow}>" THEN 180 210 IF X%=1 AND Y%=1 THEN 180 220 IF X%=19 AND Y%=18 THEN 180 230 A$(X%,Y%)="{yellow}>" 240 NEXT I 250 A$(1,1)="{green}=" 260 A$(19,18)="{black}8" 270 PRINT"{clr}{rvson}{white} NO OF MINES = ";PEEK(900) 279 REM 280 REM PRINT MINEFIELD ON SCREEN 281 REM 290 CL=2:NO=19:Z$="{green}=":T$="H" 300 FOR RW=2 TO 19 310 GOSUB 1050 320 NEXT RW 330 CL=0:NO=21:RW=0:Z$="{rvson}{blue}{A6}{rvsoff}":T$="H" 340 GOSUB 1050 350 RW=20 360 GOSUB 1050 370 CL=0:NO=19:RW=1:Z$="{rvson}{blue}{A6}{rvsoff}":T$="V" 380 GOSUB 1050 390 CL=21 400 GOSUB 1050 410 X%=1:Y%=1 420 CL=20:RW=19:T$="H":NO=1:Z$="{black}8":GOSUB 1050 430 PRINT"{white}" 440 GOTO 740 450 GOSUB 1370 460 PRINT"{black}?"; 470 GOSUB 1750 480 GG=VAL(GG$) 490 IF GG<1 OR GG>9 THEN 450 500 AA%=X%:BB%=Y% 510 ON GG GOTO 520,540,560,580,600,610,630,650,670 520 XX%=XX%-1:YY%=YY%+1:CR$="{left}{down}" 530 GOTO 680 540 XX%=X%:YY%=Y%+1:CR$="{down}" 550 GOTO 680 560 XX%=X%+1:YY%=Y%+1:CR$="{right}{down}" 570 GOTO 680 580 XX%=X%-1:YY%=Y%:CR$="{left}" 590 GOTO 680 600 GOTO 450 610 XX%=X%+1:YY%=Y%:CR$="{right}" 620 GOTO 680 630 XX%=X%-1:YY%=Y%-1:CR$="{up}{left}" 640 GOTO 680 650 XX%=X%:YY%=Y%-1:CR$="{up}" 660 GOTO 680 670 XX%=X%+1:YY%=Y%-1:CR$="{up}{right}" 680 IFXX%<1 OR XX%>19 THEN 450 690 IFYY%<1 OR YY%>18 THEN 450 700 X%=XX%:Y%=YY% 710 CL=1+AA%:RW=1+BB%:T$="H":Z$="{white}={home}" 720 GOSUB 1050:A$(AA%,BB%)="{white}=" 729 REM 730 REM NOW CHECK FOR MINES IN VICINITY 731 REM 740 IF A$(X%,Y%)="{yellow}>" THEN 900 750 A$(X%,Y%)="{black}?" 760 IF X%=19 AND Y%=18 THEN 860 769 REM 770 REM CHECK FOR 1 MOVE AWAY 771 REM 780 MS%=1:GOSUB 1200 790 IF MN<>0 THEN 820 799 REM 800 REM CHECK FOR 2 MOVES AWAY 801 REM 810 MS%=2:GOSUB 1200 819 REM 820 REM RESET CURSOR WITHIN MINEFIELD 821 REM 830 GOSUB 1370 840 GOTO 450 849 REM 850 REM MINEFIELD CROSSED SUCCESSFULLY 851 REM 860 CL=0:NO=1:RW=21:T$="H" 870 Z$="{rvson}{white}MINEFIELD SUCCESSFULLY CROSSED {rvsoff}" 880 GOSUB 1050 890 A$(19,18)="{black}8":GOTO930 899 REM 900 REM LANDMINE EXPLODES 901 REM 910 GOSUB 1600 920 A$(X%,Y%)="{yellow}9" 930 FOR Y=1 TO 18 940 X%=1:Y%=Y:GOSUB 1370 950 FOR X=1 TO 19 960 PRINT A$(X,Y); 970 NEXT X 980 NEXT Y 990 GET GG$:IF GG$="" THEN 990 1000 IF GG$<>"E" THEN 1030 1010 POKE 56,PEEK(56)+1:POKE 36869,240 1020 POKE 36879,27:PRINT"{clr}{blue}":END 1030 POKE 900,PEEK(900)+2 1040 POKE 56,PEEK(56)+1:GOTO 50 1049 REM 1050 REM SUBROUTINE TO DRAW LINE ON SCREEN 1060 REM CL=START COLUMN,RW=START ROW 1070 REM NO=NO OF CHARS,T$= V(VERT),H(HORIZ) 1080 REM Z$=TEXT TO PRINT 1081 REM 1090 PRINT"{home}" 1100 IF CL=0 THEN 1120 1110 FOR I=1 TO CL-1:PRINT"{right}";:NEXT I 1120 IF RW=0 THEN 1140 1130 FOR I=1 TO RW-1:PRINT"{down}";:NEXT I 1140 IF T$="H" THEN I$="" 1150 IF T$="V" THEN I$="{down}{left}" 1160 FOR I=1 TO NO 1170 PRINTZ$;I$; 1180 NEXT I 1190 RETURN 1199 REM 1200 REM CHECK FOR MINES IN VICINITY 1210 REM MS%=1 CLOSE SEARCH,MS%=2 WIDE SEARCH 1211 REM 1220 MN=0 1230 FOR I=X%-MS% TO X%+MS% 1240 FOR J=Y%-MS% TO Y%+MS% 1250 IF I<1 OR J<1 THEN 1280 1260 IF I>19 OR J>18 THEN 1280 1270 IF A$(I,J)="{yellow}>" THEN MN=MN+1 1280 NEXT J 1290 NEXT I 1300 Z$="{rvson} {rvsoff}" 1310 IF MN<=0 THEN 1340 1320 Z$="{rvson}{white}"+STR$(MN)+" MINE(S) " 1330 Z$=Z$+STR$(MS%)+" MOVES AWAY{rvsoff}" 1340 CL=1:NO=1:RW=21:T$="H" 1350 GOSUB 1050 1360 RETURN 1369 REM 1370 REM CURSOR ADDRESS TO WITHIN MINEFIELD 1380 REM X%=X AXIS, Y%=Y AXIS 1381 REM 1390 PRINT"{home}"; 1400 FOR I=1 TO X%+1:PRINT"{right}";:NEXT I 1410 FOR I=1 TO Y%+1:PRINT"{down}";:NEXT I 1420 PRINT"{left}"; 1430 RETURN 1434 REM 1435 REM SET UP GRAPHICS CHARACTERS 1436 REM 1440 FOR I=1 TO 9 1450 READ X 1460 FOR J=0 TO 7 1470 READ K 1480 POKE X+J,K 1490 NEXT J,I 1500 RETURN 1504 REM 1505 REM CHARACTER DATA 1506 REM 1510 DATA 7424,0,0,0,0,0,0,0,0 1520 DATA 7656,0,12,12,0,96,102,6,0 1530 DATA 7664,60,66,153,165,165,153,66,60 1540 DATA 7672,28,28,8,62,8,20,34,0 1550 DATA 7624,153,90,60,255,255,60,90,153 1560 DATA 7632,146,84,56,254,56,84,146,0 1570 DATA 7640,0,0,0,24,24,0,0,0 1580 DATA 7648,0,0,0,0,0,0,0,0 1590 DATA 7616,20,44,68,254,68,68,124,0 1599 REM 1600 REM EXPLOSION 1601 REM 1610 POKE 36877,220 1620 FOR L=15 TO 0 STEP -1 1630 POKE 36878,L 1640 IF L=15 THEN Z$="{yellow}<" 1650 IF L=11 THEN Z$="{yellow};" 1660 IF L=7 THEN Z$="{yellow}:" 1670 IF L=3 THEN Z$="{yellow}9" 1680 CL=1+X%:RW=1+Y%:NO=1 1690 GOSUB 1050 1700 FOR M=1 TO 50:NEXT M 1710 NEXT L 1720 POKE 36877,0 1730 POKE 36878,0 1740 RETURN 1749 REM 1750 REM GET MOVE AND ALARM 1751 REM 1760 IF MN<>0 THEN 1790 1770 GET GG$:IF GG$="" THEN 1770 1780 RETURN 1790 IF MS%=2 THEN SH=180:SL=128:GOTO 1810 1800 SL=180:SH=235 1810 POKE 36878,15 1820 FOR M=SL TO SH STEP 2 1830 POKE 36876,M 1840 GET GG$:IF GG$<>"" THEN 1920 1850 FOR N=1 TO 10 1860 NEXT N 1870 NEXT M 1880 POKE 36876,0 1890 FOR M=1 TO 100 1900 NEXT M 1910 GOTO 1820 1920 POKE 36878,0 1930 POKE 36876,0 1940 RETURN