10 REM VERSION 1.1 MINES.BAS FOR TANDY 600 20 REM WRITTEN BY WARREN MONTAGUE 6-1-92 30 KEY OFF:KEY 1,"":KEY 2,"":KEY 3,"":KEY 4,"":KEY 5,"":KEY 6,"":KEY 7,"":KEY 8,"":KEY 9,"":KEY 10,"" 40 CLS : MX=75 : REM MX = STARTING NUMBER OF MINES 50 RANDOMIZE (VAL(RIGHT$(TIME$,2))) 60 DIM B(19,35), P(19,35) : CX=8 : CY=55 : NB=MX 70 GOSUB 420 : GOSUB 250 80 GOSUB 330 90 ON TIMER (1) GOSUB 1250 : TIMER STOP 100 LOCATE CX,CY : GOSUB 910 : GOSUB 1230 110 IF A$="H" THEN GOSUB 590 : GOSUB 1230 : GOSUB 750 : GOSUB 1230 : GOSUB 420 : GOTO 100 120 IF A2=77 THEN CY=CY+1 : IF CY>72 THEN CY=41 : GOTO 100 : ELSE GOTO 100 130 IF A2=75 THEN CY=CY-1 : IF CY<41 THEN CY=72 : GOTO 100 : ELSE GOTO 100 140 IF A2=80 THEN CX=CX+1 : IF CX>16 THEN CX=1 : GOTO 100 : ELSE GOTO 100 150 IF A2=72 THEN CX=CX-1 : IF CX<1 THEN CX=16 : GOTO 100 : ELSE GOTO 100 160 IF A$=" " AND P(CX,CY-40)=0 THEN P(CX,CY-40)=15 : PRINT CHR$(15); : NB=NB-1 : IF NB=0 THEN GOTO 1140 : ELSE LOCATE 4,27 : PRINT USING "###";NB; : GOTO 100 170 IF A$="H" THEN GOSUB 590 : GOTO 100 180 IF A=13 AND P(CX,CY-40)=15 THEN GOTO 100 190 IF A=13 AND B(CX,CY-40)=232 THEN GOSUB 990 : REM GAME OVER 200 IF A=13 AND B(CX,CY-40)=48 THEN GOSUB 1260 : GOTO 100 210 IF A=13 THEN PRINT CHR$(B(CX,CY-40));: GOTO 100 220 IF A$=" " AND P(CX,CY-40)=15 THEN P(CX,CY-40)=63 : NB=NB+1 : PRINT CHR$(63); : GOTO 100 230 IF A$=" " AND P(CX,CY-40)=63 THEN P(CX,CY-40)=0 : PRINT CHR$(8); : GOTO 100 240 GOTO 100 250 REM DRAW BOARD 260 FOR X=1 TO 16 270 FOR Y=1 TO 32 280 LOCATE X,Y+40 290 PRINT CHR$(8); 300 NEXT Y:NEXT X 310 RETURN 320 RETURN 330 REM HIDE MINES 340 R=INT(RND*1000) 350 IF R>511 OR R=0 THEN 340 360 X=INT(R/32) 370 Y=R-(X*32) 380 IF B(X+1,Y+1)=232 THEN GOTO 340 ELSE B(X+1,Y+1)=232 390 MINE=MINE+1 400 IF MINE=MX THEN RETURN 410 LOCATE 1,1 : PRINT "HIDING MINES";MINE; : GOTO 340 420 REM LEFT SIDE SCREEN 430 LOCATE 1,1 : PRINT " " 440 PRINT "***** LAND MINES ***** " 450 PRINT " " 460 PRINT "NUMBER OF MINES REMAINING ";:PRINT USING "###";NB;:PRINT " " 470 PRINT " " 480 PRINT " " 490 PRINT "FLAG MINES WITH SPACE BAR " 500 PRINT " " 510 PRINT "PRESS SPACE BAR AGAIN FOR ? " 520 PRINT " " 530 PRINT "PRESS ENTER KEY TO REVEAL SPACE " 540 PRINT " " 550 PRINT "PRESS SHIFT H FOR HELP AND INFORMATION " 560 PRINT " " 570 PRINT " " 580 PRINT " GOOD LUCK! ";: LOCATE 1,1 : RETURN 590 TIMER STOP : LOCATE 1,1 : PRINT " " 600 PRINT "***** LAND MINES ***** " 610 PRINT " " 620 PRINT "USE ARROW KEYS TO MOVE CURSOR " 630 PRINT " " 640 PRINT "NUMBERS INDICATE HOW MANY MINES ARE " 650 PRINT "TOUCHING THAT SPACE " 660 PRINT " " 670 PRINT "FLAG THE SPACES THAT YOU THINK ARE MINES" 680 PRINT "FLAGS CLEARED BY HITTING THE SPACE BAR " 690 PRINT "FLAGED SPACES WILL NOT REVEAL " 700 PRINT " " 710 PRINT "USE THE ? IF YOUR NOT SURE BUT REMEMBER " 720 PRINT "A ? CAN BE REVEALED " 730 PRINT " " 740 PRINT "PRESS ANY KEY TO CONTINUE ";: LOCATE CX,CY : RETURN 750 TIMER STOP : LOCATE 1,1 : PRINT " " 760 PRINT "***** LAND MINES ***** " 770 PRINT " " 780 PRINT "AT THE END OF THE GAME THE MINES ARE " 790 PRINT "REVEALED. INCORRECT MINES ARE X'ed " 800 PRINT " " 810 PRINT "IF ALL MINES ARE CORRECTLY IDENTIFIED " 820 PRINT "THE GAME ENDS AT THAT POINT " 830 PRINT " " 840 PRINT "IF YOU LIKE THIS GAME PLEASE SEND $2 " 850 PRINT " TO: WARREN MONTAGUE " 860 PRINT " 1723 GRANT AVE " 870 PRINT " REDONDO BEACH, CA 90278 " 880 PRINT " (310) 374-1106 " 890 PRINT " " 900 PRINT "PRESS ANY KEY TO CONTINUE GOOD LUCK! ";: LOCATE CX,CY : RETURN 910 REM NOW COUNT MINES IN SURROUNDING CELLS 920 IF B(CX,CY-40)<>0 THEN RETURN 930 IF B(CX,CY-40)<>232 THEN B(CX,CY-40)=48 940 FOR IX=CX-1 TO CX+1 950 FOR IY=CY-1 TO CY+1 960 IF B(IX,IY-40)=232 THEN B(CX,CY-40)=B(CX,CY-40)+1 970 NEXT IY : NEXT IX 980 RETURN 990 REM YOU LOOSE 1000 FOR X=1 TO 16 1010 FOR Y=1 TO 32 1020 IF P(X,Y)=15 AND B(X,Y)<>232 THEN LOCATE X,Y+40 : PRINT "X";:GOTO 1040 1030 IF B(X,Y)=232 THEN LOCATE X,Y+40 : PRINT CHR$(232); 1040 NEXT Y 1050 NEXT X 1060 MX=MX-1 : IF MX<70 THEN MX=70 1070 LOCATE 2,1 : PRINT "DO YOU WANT TO PLAY AGAIN":GOSUB 1230:IF A$="Y" OR A$="y" THEN 1080 ELSE STOP 1080 CLS : PRINT "RESETTING BOARD" 1090 FOR X=0 TO 18 1100 FOR Y=0 TO 34 1110 B(X,Y)=0 : P(X,Y)=0 : CX=8 : CY=55 : NB=MX : MINE=0 1120 NEXT Y : NEXT X 1130 CLS : GOTO 70 1140 REM YOU WIN 1150 LOCATE 1,1 : PRINT "CHECKING PLEASE WAIT "; 1160 FOR X=0 TO 18 1170 FOR Y=0 TO 34 1180 IF P(X,Y)=15 AND B(X,Y)<>232 THEN LOS=1 1190 NEXT Y : NEXT X 1200 IF LOS=1 THEN LOS=0 : GOTO 990 1210 LOCATE 3,1 : PRINT "YOU WIN!!!!!! "; 1220 MX=MX+5 : NB=MX : GOTO 1070 1230 A$=INKEY$ : TIMER ON : IF A$="" THEN 1230 1240 A=ASC(A$) : A2=(ASC(RIGHT$(A$,1))) : TIMER STOP : RETURN 1250 LOCATE 1,1 : PRINT TIME$,DATE$ : TIMER STOP : LOCATE CX,CY : RETURN 1260 REM SHOW ALL BLANKS 1270 FOR X1=CX-1 TO CX+1 1280 FOR Y1=CY-1 TO CY+1 1290 IF X1<1 THEN X1=1 1300 IF Y1<41 THEN Y1=41 1310 IF X1>16 THEN GOTO 1350 1320 IF Y1>72 THEN GOTO 1350 1330 LOCATE X1,Y1 : GOSUB 1380 1340 PRINT CHR$(B(X1,Y1-40)); 1350 NEXT Y1 1360 NEXT X1 1370 RETURN 1380 REM NOW COUNT MINES IN SURROUNDING CELLS 1390 IF B(X1,Y1-40)<>0 THEN RETURN 1400 IF B(X1,Y1-40)<>232 THEN B(X1,Y1-40)=48 1410 FOR IX=X1-1 TO X1+1 1420 FOR IY=Y1-1 TO Y1+1 1430 IF IX<1 THEN IX=1 1440 IF IY<41 THEN IY=41 1450 IF B(IX,IY-40)=232 THEN B(X1,Y1-40)=B(X1,Y1-40)+1 1460 NEXT IY : NEXT IX 1470 RETURN