home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib36b.dsk / MARYS.GARDEN.bas < prev    next >
BASIC Source File  |  2023-02-26  |  9KB  |  125 lines

  1. 10  REM ***********************
  2. 20  REM *    MARYS GARDEN     *
  3. 30  REM * BY  TIMOTHY THOMAS  *
  4. 40  REM * COPYRIGHT (C) 1989  *
  5. 50  REM *   MICROSPARC, INC.  *
  6. 60  REM * CONCORD, MA  01742  *
  7. 70  REM ***********************
  8. 80  REM 
  9. 90  ONERR  GOTO 1220
  10. 100  LOMEM: 26408: PRINT  CHR$(17): GOSUB 710: FOR LE = 1 TO 10: GOSUB 1070
  11. 110  FOR T = 1 TO 18
  12. 120 X =  INT( RND(1) *11 +1):Y =  INT( RND(1) *5 +1): IF (X +Y)/2 =  INT((X +Y)/2)  THEN 120
  13. 130  FOR W = 1 TO 150: NEXT : ROT= 0: FOR J = 1 TO 6: XDRAW SH(T) AT X(X),Y(Y): FOR W = 1 TO 20: NEXT : NEXT 
  14. 140 OX = X:OY = Y: ROT= 0: XDRAW SH(T) AT X(X),Y(Y): POKE  -16368,0
  15. 150 TL = TL -.5
  16. 160  VTAB 22: HTAB 11: PRINT  INT(TL)" ": IF TL = 0  THEN 520: REM  1 SPACE
  17. 170 K =  PEEK( -16384): IF K <128  THEN 150
  18. 180  POKE 768,7: POKE 769,7: CALL 770
  19. 190  IF K = L  THEN 270
  20. 200  IF K = R  THEN 290
  21. 210  IF K = U  THEN 310
  22. 220  IF K = D  THEN 330
  23. 230  IF K = ESC  THEN 260
  24. 240  IF K = SP  THEN  XDRAW SH(T) AT X(X),Y(Y): GOTO 130
  25. 250  GOTO 360
  26. 260  POKE  -16368,0: GOTO 690
  27. 270 X = X -1: IF X <1  THEN X = 11
  28. 280  GOTO 340
  29. 290 X = X +1: IF X >11  THEN X = 1
  30. 300  GOTO 340
  31. 310 Y = Y -1: IF Y <1  THEN Y = 5
  32. 320  GOTO 340
  33. 330 Y = Y +1: IF Y >5  THEN Y = 1
  34. 340  IF S(X,Y)  THEN 380
  35. 350 NS = NS -1: VTAB 23: HTAB 11: PRINT NS" ": IF   NOT NS  THEN 520: REM  1 SPACE
  36. 360  XDRAW SH(T) AT X(OX),Y(OY): GOTO 140
  37. 370  REM OBJECT MATCHED
  38. 380  IF SH(T) < >S(X,Y)  THEN 430
  39. 390  HCOLOR= 3: DRAW SH(T) AT X(OX),Y(OY): ROT= R1(T): FOR I = 1 TO 5
  40. 400  POKE 768,20 +5 *(I/2 =  INT(I/2)): POKE 769,15: CALL 770
  41. 410  NEXT : XDRAW SH(T) AT X(X),Y(Y)
  42. 420 SC = SC +100:TS = TS +100: GOSUB 450: HCOLOR= 0:S(X,Y) = 0: NEXT T: GOTO 510
  43. 430  FOR W = 1 TO 5: POKE 768,255: POKE 769,15: CALL 770: NEXT :X = OX:Y = OY:SC = SC -50:TS = TS -50: GOSUB 450: GOTO 360
  44. 440  REM  UPDATE SCORE
  45. 450  IF SC <0  THEN S$ =  STR$(SC):S =  LEN(S$): VTAB 22: HTAB 34: PRINT  SPC( 6 -S)S$
  46. 460  IF TS <0  THEN S$ =  STR$(TS):S =  LEN(S$): VTAB 23: HTAB 34: PRINT  SPC( 6 -S)S$
  47. 470  IF SC > = 0  THEN  VTAB 22: HTAB 35: PRINT  SPC( SC <10000) SPC( SC <1000) SPC( SC <100) SPC( SC <10)SC
  48. 480  IF TS > = 0  THEN  VTAB 23: HTAB 35: PRINT  SPC( TS <10000) SPC( TS <1000) SPC( TS <100) SPC( TS <10)TS
  49. 490  RETURN 
  50. 500  REM  SHOW SCOREBOARD
  51. 510  FOR J = 1 TO 6: POKE 768,T(J): POKE 769,D(J): CALL 770: NEXT : GOTO 530
  52. 520  FOR J = 1 TO 6: POKE 768,100: POKE 769,30: CALL 770: NEXT 
  53. 530  FOR W = 1 TO 1000: NEXT : TEXT : HOME : PRINT "LEVEL "LE" SCORE:";: HTAB 30: PRINT  SPC( SC <1000)SC: VTAB 3: HTAB 1: IF   NOT NS  THEN  PRINT "NO STEPS REMAINING!": GOTO 580: REM  1 AND 1 SPACE
  54. 540  VTAB 5: HTAB 1: IF   NOT TL  THEN  PRINT "YOUR TIME WAS UP!": GOTO 580
  55. 550  VTAB 3: HTAB 1: PRINT "IN "ST -NS +1" STEPS"
  56. 560  VTAB 5: HTAB 1: PRINT "REMAINING TIME: " INT(TL);:TB =  INT(TL *LE/2): HTAB 23: FLASH : PRINT "BONUS:";: NORMAL : PRINT " " SPC( TB <1000) SPC( TB <100) SPC( TB <10)TB:SC = SC +TB:TS = TS +TB: IF NS  THEN BW = NS *25: REM  1 AND 1 SPACE
  57. 570  IF BW  THEN  VTAB 3: HTAB 23: FLASH : PRINT "BONUS:";: NORMAL : PRINT " " SPC( BW <1000) SPC( BW <100)BW:SC = SC +BW:TS = TS +BW: REM  1 SPACE
  58. 580  IF LE = 1  THEN V = 9: GOTO 600
  59. 590  FOR V = 9 TO 7 +LE: VTAB V: HTAB 3: PRINT "SCORE LEVEL "; SPC( V -8 <10)V -8": ";S$(V -8): NEXT 
  60. 600  VTAB V: HTAB 3: PRINT "SCORE LEVEL "; SPC( LE <10)LE": ": REM  1 AND 1 SPACE
  61. 610  VTAB 6: HTAB 30: PRINT "----":S$(LE) =  RIGHT$("    " + STR$(SC),4): VTAB 7: HTAB 30: PRINT S$(LE): FOR W = 1 TO 300: NEXT : REM  4 SPACES
  62. 620  FOR V1 = 7 TO V -1: VTAB V1: HTAB 30: PRINT "    ": VTAB V1 +1: HTAB 30: PRINT S$(LE): FOR W = 1 TO 70: NEXT : NEXT : REM  4 SPACES
  63. 630  FOR H = 30 TO 19  STEP  -1: VTAB V: HTAB H: PRINT S$(LE)" ": FOR W = 1 TO 70: NEXT : NEXT : REM  1 SPACE
  64. 640 BW = 0:TB = 0:SC = 0:ER = 0:ST = 0: FOR I = 1 TO 11: FOR J = 1 TO 5:F(I,J) = 0:S(I,J) = 0: NEXT : NEXT :TI = 0: FOR I = 1 TO 18:SH(I) = 0:FL(I) = 0: NEXT 
  65. 650  POKE  -16368,0: IF LE <10  THEN  VTAB 22: HTAB 1: PRINT "PRESS <ESCAPE> TO QUIT": VTAB 23: HTAB 1: PRINT "ANY OTHER KEY FOR LEVEL "LE +1;: GET A$: PRINT : IF A$ < > CHR$(27)  THEN  NEXT LE
  66. 660  SPEED= 150: VTAB 20: CALL  -958: HTAB 18: PRINT "-----"
  67. 670  VTAB 21: PRINT "  FINAL SCORE:";: HTAB 18: PRINT  SPC( TS <10000)TS: SPEED= 255: REM  2 SPACES
  68. 680  VTAB 22: HTAB 3: PRINT "PLAY AGAIN? (Y/N) ";: GET A$: PRINT A$: IF A$ = "Y"  THEN  RUN 
  69. 690  TEXT : HOME : HTAB 10: PRINT "THANKS FOR PLAYING";: END 
  70. 700  REM SETUP
  71. 710 K = 0:L = 0:R = 0:U = 0:D = 0:TL = 0:ESC = 0:SP = 0:T = 0:X = 0:Y = 0:OX = 0:OY = 0
  72. 720  TEXT : HOME : VTAB 3: HTAB 11: INVERSE : PRINT " MARY'S GARDEN ": NORMAL : REM  1 AND 1 SPACE
  73. 730  VTAB 5: HTAB 12: PRINT "BY TIMOTHY THOMAS"
  74. 740  VTAB 7: HTAB 10: PRINT "COPYRIGHT (C) 1989"
  75. 750  VTAB 9: HTAB 10: PRINT "BY MICROSPARC, INC."
  76. 760  FOR I = 1 TO 6: VTAB 12: HTAB I *6 -4: PRINT  CHR$(220)"! !/": HTAB I *6 -4: PRINT " " CHR$(220)" /": REM  1 AND 1 SPACE
  77. 770  HTAB I *6 -4: PRINT "  !": HTAB I *6 -4: PRINT  CHR$(223) CHR$(223)"!" CHR$(223) CHR$(223) CHR$(223): FOR W = 1 TO 300: NEXT : NEXT 
  78. 780  VTAB 21: PRINT "PRESS RETURN TO CONTINUE";: GET WW$: VTAB 5: HTAB 1: CALL  -958: HTAB 15: PRINT "LEVEL: 1": PRINT : REM  1 SPACE
  79. 790  PRINT "INSTRUCTIONS: USE THE CURSOR KEYS TO": PRINT "MOVE THE OBJECTS TO THEIR APPROPRIATE": PRINT "SPACES. SPEED AND FEW STEPS ARE SCORE": PRINT "FACTORS. MISTAKES REDUCE THE SCORE.": PRINT 
  80. 800  DIM X(11),Y(5),S(11,5),R1(18),FL(18),SH(18),F(11,5),R(11,5),T(6),D(6)
  81. 810  FOR J = 770 TO 790: READ I: POKE J,I: NEXT : DATA  173,48,192,136,208,5,206,1,3,240,9,202,208,245,174,0,3,76,2,3,96
  82. 820  FOR I = 1 TO 6: READ T(I),D(I): NEXT : DATA  250,50,185,50,145,50,123,85,145,50,123,120
  83. 830 ESC = 155:SP = 160: VTAB 12: HTAB 1: CALL  -958: PRINT "ENTER THE KEYS YOU WANT TO USE FOR": PRINT 
  84. 840  VTAB 14: HTAB 1: PRINT " LEFT MOVEMENT ";: GET L$:L =  ASC(L$) +128: IF L = SP  OR L = ESC  THEN  PRINT  CHR$(7);: GOTO 840
  85. 850  IF L = 136  THEN  PRINT "LEFT ARROW": GOTO 880
  86. 860  IF L <160  THEN  PRINT "CONTROL-" CHR$(L +64): GOTO 880
  87. 870  PRINT  CHR$(L)
  88. 880  VTAB 15: HTAB 1: PRINT "RIGHT MOVEMENT ";: GET R$:R =  ASC(R$) +128: IF R = SP  OR R = ESC  THEN  PRINT  CHR$(7);: GOTO 880
  89. 890  IF R = 149  THEN  PRINT "RIGHT ARROW": GOTO 920
  90. 900  IF R <160  THEN  PRINT "CONTROL-" CHR$(R +64): GOTO 920
  91. 910  PRINT  CHR$(R)
  92. 920  VTAB 16: HTAB 1: PRINT " DOWN MOVEMENT ";: GET D$:D =  ASC(D$) +128: IF D = SP  OR D = ESC  THEN  PRINT  CHR$(7);: GOTO 920
  93. 930  IF D = 138  THEN  PRINT "DOWN ARROW": GOTO 960
  94. 940  IF D <160  THEN  PRINT "CONTROL-" CHR$(D +64): GOTO 960
  95. 950  PRINT  CHR$(D)
  96. 960  VTAB 17: HTAB 1: PRINT "   UP MOVEMENT ";: GET U$:U =  ASC(U$) +128: IF U = SP  OR U = ESC  THEN  PRINT  CHR$(7);: GOTO 960: REM  3 SPACES
  97. 970  IF U = 139  THEN  PRINT "UP ARROW": GOTO 1000
  98. 980  IF U <160  THEN  PRINT "CONTROL-" CHR$(U +64): GOTO 1000
  99. 990  PRINT  CHR$(U)
  100. 1000  IF (R = L)  OR (R = U)  OR (R = D)  OR (L = U)  OR (L = D)  OR (D = U)  THEN  PRINT  CHR$(7): GOTO 830
  101. 1010  VTAB 19: PRINT "<ESC> TO RE-START, <RETURN> TO CONFIRM ";: GET A$: PRINT : IF A$ =  CHR$(27)  THEN 830
  102. 1020  IF  PEEK(24576) = 18  AND  PEEK(233) = 96  THEN 1040
  103. 1030  PRINT  CHR$(4)"BLOAD MARYS.SHAPES": POKE 232,0: POKE 233,96
  104. 1040  VTAB 6: HTAB 1: CALL  -958: PRINT 
  105. 1050  FOR I = 1 TO 11:X(I) = I *25 -10: NEXT : FOR I = 1 TO 5:Y(I) = I *30 -10: NEXT 
  106. 1060  RETURN 
  107. 1070 TL = 750 -40 *LE:NS = 140 -3 *LE:ST = NS: POKE 230,32: HCOLOR= 3: HPLOT 0,0: CALL  -3082: HCOLOR= 0: SCALE= 1: ROT= 0
  108. 1080  FOR I = 35 TO 159  STEP 30: HPLOT 0,I TO 279,I: NEXT : FOR I = 27 TO 252  STEP 25: HPLOT I,0 TO I,155: NEXT 
  109. 1090  IF LE >1  THEN  HOME : VTAB 3: HTAB 11: INVERSE : PRINT " MARY'S GARDEN ": NORMAL : PRINT : HTAB 15: PRINT "LEVEL: "LE: PRINT : REM  1,1, AND 1 SPACE
  110. 1100  PRINT "SETTING UP";: FOR I = 1 TO 11  STEP 2: FOR J = 1 TO 5  STEP 2: PRINT ".";
  111. 1110 S =  INT( RND(1) *18 +1): IF FL(S)  THEN 1110
  112. 1120 FL(S) = 1:S(I,J) = S:R(I,J) =  INT( RND(1) *(LE/3) +.5) *16: NEXT : NEXT : FOR I = 1 TO 11: FOR J = 1 TO 5: ROT= 0: IF S(I,J)  THEN  ROT= R(I,J): DRAW S(I,J) AT X(I),Y(J)
  113. 1130  PRINT ".";: NEXT : NEXT :J = 0
  114. 1140  FOR T = 1 TO 18: PRINT ".";
  115. 1150 X =  INT( RND(1) *11 +1):Y =  INT( RND(1) *5 +1): IF F(X,Y)  OR   NOT S(X,Y)  THEN 1150
  116. 1160 SH(T) = S(X,Y):F(X,Y) = 1:R1(T) = R(X,Y): NEXT : VTAB 22: HTAB 1: PRINT "PRESS <RETURN> TO CONTINUE ";: GET A$: PRINT : REM  1 SPACE
  117. 1170  POKE  -16300,0: POKE  -16302,0: POKE  -16297,0: POKE  -16301,0: POKE  -16304,0
  118. 1180  HOME : VTAB 21: INVERSE : PRINT  SPC( 40): VTAB 21: HTAB 17: PRINT "LEVEL: "LE: NORMAL : VTAB 22: INVERSE : PRINT " ";: NORMAL : PRINT " CLOCK:";: HTAB 27: PRINT "SCORE: ";: HTAB 40: INVERSE : PRINT " ";: NORMAL : REM  1 SPACE EVERYWHERE
  119. 1190  VTAB 23: INVERSE : PRINT " ";: NORMAL : PRINT " STEPS:";: HTAB 27: PRINT "TOTAL:  ";: IF TS  THEN  PRINT  SPC( TS <10000) SPC( TS <1000) SPC( TS <100) SPC( TS <10)TS: REM  1,1, AND 2 SPACES
  120. 1200  VTAB 23: HTAB 11: PRINT  SPC( NS <100) SPC( NS <10)NS;
  121. 1210  INVERSE : HTAB 40: PRINT " ";: VTAB 24: PRINT "  SPACEBAR TO FLASH, ESCAPE TO END GAME";: NORMAL : POKE 2039,32: RETURN 
  122. 1220  TEXT : HOME :RR =  PEEK(222):RL =  PEEK(218) +256 * PEEK(219)
  123. 1230  IF RR = 6  THEN  PRINT "THE FILE MARYS.SHAPES": PRINT "MUST BE ON THIS DISK": END 
  124. 1240  IF RR = 8  THEN  PRINT "I/O ERROR...CHECK DRIVE": END 
  125. 1250  PRINT "ERROR #"RR"IN LINE "RL: END