home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib31b.dsk / SHARK.bas < prev    next >
BASIC Source File  |  2023-02-26  |  7KB  |  133 lines

  1. 10  REM **********************
  2. 20  REM *       SHARK!       *
  3. 30  REM *   BY STEVEN ROTH   *
  4. 40  REM * COPYRIGHT (C) 1987 *
  5. 50  REM * BY MICROSPARC, INC *
  6. 60  REM * CONCORD, MA  01742 *
  7. 70  REM **********************
  8. 80  REM 
  9. 90  REM  ----------------------
  10. 100  REM    SET UP VARIABLES
  11. 110  REM ----------------------
  12. 120  REM 
  13. 130  GOSUB 1330: ONERR  GOTO 1300
  14. 140  PRINT  CHR$(4);"BLOAD SHARK.SHAPES": LOMEM: 25856
  15. 150  FOR X = 768 TO 786: READ Y: POKE X,Y: NEXT X: DATA  173,48,192,136,208,4,198,9,240,8,202,208,246,166,8,76,0,3,96: DIM SH$(20)
  16. 160  GOSUB 610: GOSUB 460: GOSUB 690: GOSUB 800:XX = 1: GOSUB 1260:XX = 0
  17. 170  POKE  -16297,0: POKE  -16304,0: POKE  -16301,0:BP = 2500:FL = 10:FS = 1
  18. 180  GOSUB 780: FOR X = 1 TO 10:P(X) = 0: NEXT X:N = 1: GOSUB 970:P(1) = 1
  19. 190  REM 
  20. 200  REM ----------------------
  21. 210  REM       MAIN LOOP
  22. 220  REM ----------------------
  23. 230  REM 
  24. 240  IF P(FS) = 23  THEN 1030
  25. 250  CALL 25576: VTAB 21: CALL  -868: HTAB 34 -P(FS): PRINT Q$
  26. 260  FOR X = 1 TO 10: IF P(X) >0  THEN P(X) = P(X) +1
  27. 270  NEXT X
  28. 280  FOR T = 1 TO 100 -(L/1.5):K =  PEEK( -16384): IF K <128  THEN  NEXT T:BP = BP -50: GOTO 240
  29. 290  POKE  -16368,0:K = K -128: IF K = 27  THEN 1220
  30. 300  IF K = 8  AND  LEN(Q$) >1  THEN Q$ =  LEFT$(Q$, LEN(Q$) -1)
  31. 310  IF K <48  OR K >58  THEN  NEXT T: GOTO 240
  32. 320 Q$ = Q$ + CHR$(K): VTAB 21: CALL  -868: HTAB 34 -P(FS): PRINT Q$
  33. 330  IF  LEN(Q$) < > LEN( STR$(A(FS)))  THEN  NEXT T: GOTO 240
  34. 340  IF  VAL(Q$) = A(FS)  THEN 370
  35. 350 SC = SC -10: IF SC <0  THEN SC = 0
  36. 360  GOSUB 780: POKE 8,255: POKE 9,25: CALL 768:Q$ = "": NEXT T: GOTO 240
  37. 370  POKE 8,150: POKE 9,1: CALL 768
  38. 380 Z = P(FS) *7: HCOLOR= 0: DRAW 20 AT 210 -Z,87: DRAW 20 AT 211 -Z,87: FOR Y = 79 TO 89: HPLOT 213 -Z,Y TO 257 -Z,Y: NEXT Y: HCOLOR= 3
  39. 390 SC = SC +100:FL = FL -1: GOSUB 780: IF FL = 0  THEN 1080
  40. 400  POKE  -16368,0:Q$ = "":N = N +1: GOSUB 970:P(N) = 1:FS = FS +1: GOTO 280
  41. 410  REM 
  42. 420  REM ----------------------
  43. 430  REM      DRAW SCREEN
  44. 440  REM ----------------------
  45. 450  REM 
  46. 460  POKE 232,0: POKE 233,96: POKE 230,32: POKE  -16368,0: CALL 62450: HCOLOR= 3: SCALE= 1: ROT= 0
  47. 470  FOR X = 1 TO 6: DRAW 2 AT 15 +X *5,65 +((7 -X) ^2)/6: NEXT X
  48. 480  FOR X = 1 TO 6: DRAW 3 AT 13 +X *5,96 -((7 -X) ^2)/6: NEXT X
  49. 490  HPLOT 14,91 TO 12,86 TO 14,79 TO 19,72
  50. 500  HPLOT 49,65 TO 57,62 TO 62,57 TO 61,53 TO 50,47 TO 40,44 TO 35,45 TO 15,49 TO 2,53
  51. 510  HPLOT 45,99 TO 48,100 TO 47,102 TO 39,103 TO 32,104 TO 18,107 TO 2,112
  52. 520  ROT= 0: DRAW 1 AT 15,60
  53. 530  FOR X = 3 TO 270  STEP 17: DRAW 18 AT X,15: NEXT 
  54. 540  HPLOT 0,0 TO 279,0 TO 279,159 TO 0,159 TO 0,0 TO 1,1 TO 278,1 TO 278,158 TO 1,158 TO 1,1
  55. 550  RETURN 
  56. 560  REM 
  57. 570  REM ----------------------
  58. 580  REM       TITLE PAGE 
  59. 590  REM ----------------------
  60. 600  REM 
  61. 610  TEXT : HOME : POKE 48,32: HLIN 0,39 AT 1: HLIN 0,39 AT 47: VLIN 0,47 AT 0: VLIN 0,47 AT 39
  62. 620  VTAB 3: HTAB 17: INVERSE : PRINT "SHARK!": NORMAL 
  63. 630  VTAB 5: HTAB 5: PRINT "TYPE THE ANSWER TO THE PROBLEM": HTAB 5: PRINT "IN THE FISH NEXT TO THE SHARK."
  64. 640  INVERSE : VTAB 11: HTAB 16: PRINT "SCORING": NORMAL 
  65. 650  VTAB 13: HTAB 5: PRINT "CORRECT ANSWER";: HTAB 25: PRINT "100 POINTS"
  66. 660  PRINT : HTAB 5: PRINT "INCORRECT ANSWER";: HTAB 25: PRINT "-10 POINTS"
  67. 670  PRINT : PRINT : HTAB 8: PRINT "BONUS POINTS ARE AWARDED": HTAB 9: PRINT "FOR ANSWERING QUICKLY."
  68. 680  RETURN 
  69. 690  VTAB 22: HTAB 5: INPUT "START ON WHICH LEVEL? (1-25): ";LV$: INVERSE : VTAB 22: HTAB 40: PRINT " ";: NORMAL 
  70. 700 L =  VAL(LV$): IF L <1  THEN L = 1
  71. 710  IF L >25  THEN L = 25
  72. 720  RETURN 
  73. 730  REM 
  74. 740  REM ----------------------
  75. 750  REM      SUBROUTINES
  76. 760  REM ----------------------
  77. 770  REM 
  78. 780  HOME : VTAB 22: PRINT " FISH LEFT: ";FL;: HTAB 17: PRINT "LEVEL: ";L;: HTAB 28: PRINT "SCORE: ";SC;: RETURN 
  79. 790  REM --- CREATE PROBLEMS ---
  80. 800  FOR N = 1 TO 10
  81. 810 N1 =  INT( RND(1) *(2 *L +1)) +1:N2 =  INT( RND(1) *(2 *L +1)) +1
  82. 820 SN = 4:S =  INT( RND(1) *SN) +1
  83. 830  IF S = 3  AND N1 >10  THEN N1 =  INT(N1/2)
  84. 840  IF S = 3  AND N2 <100  AND N2 >10  THEN N2 =  INT(N2/100)
  85. 850  IF S = 4  THEN N1 = N1 *N2
  86. 860  IF (S = 2  AND N1 <N2)  OR N1 >99  OR N2 >99  OR N2 = 0  THEN 810
  87. 870 Z1 =  INT(N1/10):Z2 =  INT(N2/10):S2$ = "4567":S$ = "08091011121314151617":T1 =  INT((N1 -10 *Z1) *2 +1):T2 =  INT((N2 -10 *Z2) *2 +1)
  88. 880 SH$(N) =  MID$ (S$, INT(Z1 *2 +1),2) + MID$ (S$,T1,2) +"0" + MID$ (S2$,S,1) + MID$ (S$, INT(Z2 *2 +1),2) + MID$ (S$,T2,2)
  89. 890  IF SH$(N -1) = SH$(N)  THEN 810
  90. 900  ON S GOTO 910,920,930,940
  91. 910 A(N) = N1 +N2: GOTO 950
  92. 920 A(N) = N1 -N2: GOTO 950
  93. 930 A(N) = N1 *N2: GOTO 950
  94. 940 A(N) = N1/N2
  95. 950  NEXT N: RETURN 
  96. 960  REM --- DRAW FISH ---
  97. 970  DRAW 20 AT 203,87: DRAW 20 AT 204,87: DRAW 21 AT 207,79: DRAW 21 AT 208,79
  98. 980 F = 0: FOR X = 1 TO 5:S =  VAL( MID$ (SH$(N),X *2 -1,2))
  99. 990  IF S = 8  AND X = 1  THEN  NEXT X
  100. 1000  IF S = 8  AND X = 4  THEN S =  VAL( MID$ (SH$(N),9,2)):F = 1
  101. 1010  IF X = 5  AND F = 1  THEN  RETURN 
  102. 1020  DRAW S AT 210 +(X -1) *7,81: NEXT X: RETURN 
  103. 1030 Z = P(FS) *7: HCOLOR= 0: DRAW 20 AT 210 -Z,87: DRAW 20 AT 211 -Z,87: FOR Y = 79 TO 89: HPLOT 213 -Z,Y TO 257 -Z,Y: NEXT Y: HCOLOR= 3
  104. 1040  FOR X = 255 TO 200  STEP  -5: POKE 8,X: POKE 9,X/50: CALL 768: DRAW 19 AT 33,80: NEXT X: VTAB 20: CALL  -958: GOSUB 1260
  105. 1050 Q$ = "": POKE  -16368,0:SC = SC -500: IF SC <0  THEN SC = 0
  106. 1060  TEXT : HOME : INVERSE : VTAB 10: HTAB 15: PRINT "GET READY!": NORMAL 
  107. 1070  GOSUB 460: GOSUB 800: GOTO 170
  108. 1080 Q$ = "": TEXT : HOME : INVERSE : VTAB 10: HTAB 11: PRINT "LEVEL ";L;" COMPLETED"
  109. 1090  FOR Z = 1 TO 2: FOR X = 25 TO 75  STEP 3: POKE 8,X: POKE 9,3: CALL 768: NEXT X
  110. 1100  FOR X = 75 TO 25  STEP  -3: POKE 8,X: POKE 9,2: CALL 768: NEXT X
  111. 1110  NEXT Z: IF BP <0  THEN BP = 0
  112. 1120 A$ =  STR$(BP) +" BONUS POINTS AWARDED": VTAB 12: HTAB 20 - LEN(A$)/2: PRINT A$: NORMAL 
  113. 1130  GOSUB 1260
  114. 1140 L = L +1:SC = SC +BP: IF L <26  THEN 1060
  115. 1150  TEXT : HOME : VTAB 10: HTAB 12: PRINT "CONGRATULATIONS!"
  116. 1160  PRINT : HTAB 6: PRINT "YOU HAVE COMPLETED LEVEL 25"
  117. 1170  PRINT :P$ = "FINAL SCORE: " + STR$(SC): HTAB 20 - LEN(P$)/2: PRINT P$
  118. 1180  VTAB 23: HTAB 10: PRINT "PLAY AGAIN? (Y/N): ";
  119. 1190  GET A$: IF A$ < >"Y"  AND A$ < > CHR$(121)  AND A$ < >"N"  AND A$ < > CHR$(110)  THEN 1180
  120. 1200  IF A$ = "Y"  OR A$ =  CHR$(121)  THEN 160
  121. 1210  TEXT : HOME : END 
  122. 1220  VTAB 22: HTAB 1: CALL  -958: HTAB 5: PRINT "DO YOU WANT TO QUIT? (Y/N): ";
  123. 1230  GET A$: IF A$ < >"Y"  AND A$ < > CHR$(121)  AND A$ < >"N"  AND A$ < > CHR$(110)  THEN 1220
  124. 1240  IF A$ = "Y"  OR A$ =  CHR$(121)  THEN 1210
  125. 1250  POKE  -16368,0: GOSUB 780: GOTO 280
  126. 1260  VTAB 22: HTAB 2: CALL  -868: HTAB 8: PRINT "PRESS RETURN TO CONTINUE";: IF XX = 1  THEN  INVERSE 
  127. 1270  HTAB 40: PRINT " ";: NORMAL : VTAB 22: HTAB 32
  128. 1280  GET A$: IF A$ < > CHR$(13)  THEN 1280
  129. 1290  RETURN 
  130. 1300  VTAB 10: HTAB 6: INVERSE : PRINT "SHAPE TABLE CANNOT BE LOADED"
  131. 1310  PRINT : HTAB 5: PRINT "INSERT CORRECT DISK INTO DRIVE": NORMAL 
  132. 1320  GOSUB 1260: RUN 
  133. 1330  HOME : VTAB 12: HTAB 10: PRINT "SHARK BY STEVEN ROTH": PRINT : HTAB 3: PRINT "COPYRIGHT 1987 BY MICROSPARC, INC.": VTAB 22: HTAB 8: PRINT "PRESS RETURN TO CONTINUE";: GET A$: PRINT : RETURN