home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib31b.dsk
/
SHARK.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
7KB
|
133 lines
10 REM **********************
20 REM * SHARK! *
30 REM * BY STEVEN ROTH *
40 REM * COPYRIGHT (C) 1987 *
50 REM * BY MICROSPARC, INC *
60 REM * CONCORD, MA 01742 *
70 REM **********************
80 REM
90 REM ----------------------
100 REM SET UP VARIABLES
110 REM ----------------------
120 REM
130 GOSUB 1330: ONERR GOTO 1300
140 PRINT CHR$(4);"BLOAD SHARK.SHAPES": LOMEM: 25856
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)
160 GOSUB 610: GOSUB 460: GOSUB 690: GOSUB 800:XX = 1: GOSUB 1260:XX = 0
170 POKE -16297,0: POKE -16304,0: POKE -16301,0:BP = 2500:FL = 10:FS = 1
180 GOSUB 780: FOR X = 1 TO 10:P(X) = 0: NEXT X:N = 1: GOSUB 970:P(1) = 1
190 REM
200 REM ----------------------
210 REM MAIN LOOP
220 REM ----------------------
230 REM
240 IF P(FS) = 23 THEN 1030
250 CALL 25576: VTAB 21: CALL -868: HTAB 34 -P(FS): PRINT Q$
260 FOR X = 1 TO 10: IF P(X) >0 THEN P(X) = P(X) +1
270 NEXT X
280 FOR T = 1 TO 100 -(L/1.5):K = PEEK( -16384): IF K <128 THEN NEXT T:BP = BP -50: GOTO 240
290 POKE -16368,0:K = K -128: IF K = 27 THEN 1220
300 IF K = 8 AND LEN(Q$) >1 THEN Q$ = LEFT$(Q$, LEN(Q$) -1)
310 IF K <48 OR K >58 THEN NEXT T: GOTO 240
320 Q$ = Q$ + CHR$(K): VTAB 21: CALL -868: HTAB 34 -P(FS): PRINT Q$
330 IF LEN(Q$) < > LEN( STR$(A(FS))) THEN NEXT T: GOTO 240
340 IF VAL(Q$) = A(FS) THEN 370
350 SC = SC -10: IF SC <0 THEN SC = 0
360 GOSUB 780: POKE 8,255: POKE 9,25: CALL 768:Q$ = "": NEXT T: GOTO 240
370 POKE 8,150: POKE 9,1: CALL 768
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
390 SC = SC +100:FL = FL -1: GOSUB 780: IF FL = 0 THEN 1080
400 POKE -16368,0:Q$ = "":N = N +1: GOSUB 970:P(N) = 1:FS = FS +1: GOTO 280
410 REM
420 REM ----------------------
430 REM DRAW SCREEN
440 REM ----------------------
450 REM
460 POKE 232,0: POKE 233,96: POKE 230,32: POKE -16368,0: CALL 62450: HCOLOR= 3: SCALE= 1: ROT= 0
470 FOR X = 1 TO 6: DRAW 2 AT 15 +X *5,65 +((7 -X) ^2)/6: NEXT X
480 FOR X = 1 TO 6: DRAW 3 AT 13 +X *5,96 -((7 -X) ^2)/6: NEXT X
490 HPLOT 14,91 TO 12,86 TO 14,79 TO 19,72
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
510 HPLOT 45,99 TO 48,100 TO 47,102 TO 39,103 TO 32,104 TO 18,107 TO 2,112
520 ROT= 0: DRAW 1 AT 15,60
530 FOR X = 3 TO 270 STEP 17: DRAW 18 AT X,15: NEXT
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
550 RETURN
560 REM
570 REM ----------------------
580 REM TITLE PAGE
590 REM ----------------------
600 REM
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
620 VTAB 3: HTAB 17: INVERSE : PRINT "SHARK!": NORMAL
630 VTAB 5: HTAB 5: PRINT "TYPE THE ANSWER TO THE PROBLEM": HTAB 5: PRINT "IN THE FISH NEXT TO THE SHARK."
640 INVERSE : VTAB 11: HTAB 16: PRINT "SCORING": NORMAL
650 VTAB 13: HTAB 5: PRINT "CORRECT ANSWER";: HTAB 25: PRINT "100 POINTS"
660 PRINT : HTAB 5: PRINT "INCORRECT ANSWER";: HTAB 25: PRINT "-10 POINTS"
670 PRINT : PRINT : HTAB 8: PRINT "BONUS POINTS ARE AWARDED": HTAB 9: PRINT "FOR ANSWERING QUICKLY."
680 RETURN
690 VTAB 22: HTAB 5: INPUT "START ON WHICH LEVEL? (1-25): ";LV$: INVERSE : VTAB 22: HTAB 40: PRINT " ";: NORMAL
700 L = VAL(LV$): IF L <1 THEN L = 1
710 IF L >25 THEN L = 25
720 RETURN
730 REM
740 REM ----------------------
750 REM SUBROUTINES
760 REM ----------------------
770 REM
780 HOME : VTAB 22: PRINT " FISH LEFT: ";FL;: HTAB 17: PRINT "LEVEL: ";L;: HTAB 28: PRINT "SCORE: ";SC;: RETURN
790 REM --- CREATE PROBLEMS ---
800 FOR N = 1 TO 10
810 N1 = INT( RND(1) *(2 *L +1)) +1:N2 = INT( RND(1) *(2 *L +1)) +1
820 SN = 4:S = INT( RND(1) *SN) +1
830 IF S = 3 AND N1 >10 THEN N1 = INT(N1/2)
840 IF S = 3 AND N2 <100 AND N2 >10 THEN N2 = INT(N2/100)
850 IF S = 4 THEN N1 = N1 *N2
860 IF (S = 2 AND N1 <N2) OR N1 >99 OR N2 >99 OR N2 = 0 THEN 810
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)
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)
890 IF SH$(N -1) = SH$(N) THEN 810
900 ON S GOTO 910,920,930,940
910 A(N) = N1 +N2: GOTO 950
920 A(N) = N1 -N2: GOTO 950
930 A(N) = N1 *N2: GOTO 950
940 A(N) = N1/N2
950 NEXT N: RETURN
960 REM --- DRAW FISH ---
970 DRAW 20 AT 203,87: DRAW 20 AT 204,87: DRAW 21 AT 207,79: DRAW 21 AT 208,79
980 F = 0: FOR X = 1 TO 5:S = VAL( MID$ (SH$(N),X *2 -1,2))
990 IF S = 8 AND X = 1 THEN NEXT X
1000 IF S = 8 AND X = 4 THEN S = VAL( MID$ (SH$(N),9,2)):F = 1
1010 IF X = 5 AND F = 1 THEN RETURN
1020 DRAW S AT 210 +(X -1) *7,81: NEXT X: RETURN
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
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
1050 Q$ = "": POKE -16368,0:SC = SC -500: IF SC <0 THEN SC = 0
1060 TEXT : HOME : INVERSE : VTAB 10: HTAB 15: PRINT "GET READY!": NORMAL
1070 GOSUB 460: GOSUB 800: GOTO 170
1080 Q$ = "": TEXT : HOME : INVERSE : VTAB 10: HTAB 11: PRINT "LEVEL ";L;" COMPLETED"
1090 FOR Z = 1 TO 2: FOR X = 25 TO 75 STEP 3: POKE 8,X: POKE 9,3: CALL 768: NEXT X
1100 FOR X = 75 TO 25 STEP -3: POKE 8,X: POKE 9,2: CALL 768: NEXT X
1110 NEXT Z: IF BP <0 THEN BP = 0
1120 A$ = STR$(BP) +" BONUS POINTS AWARDED": VTAB 12: HTAB 20 - LEN(A$)/2: PRINT A$: NORMAL
1130 GOSUB 1260
1140 L = L +1:SC = SC +BP: IF L <26 THEN 1060
1150 TEXT : HOME : VTAB 10: HTAB 12: PRINT "CONGRATULATIONS!"
1160 PRINT : HTAB 6: PRINT "YOU HAVE COMPLETED LEVEL 25"
1170 PRINT :P$ = "FINAL SCORE: " + STR$(SC): HTAB 20 - LEN(P$)/2: PRINT P$
1180 VTAB 23: HTAB 10: PRINT "PLAY AGAIN? (Y/N): ";
1190 GET A$: IF A$ < >"Y" AND A$ < > CHR$(121) AND A$ < >"N" AND A$ < > CHR$(110) THEN 1180
1200 IF A$ = "Y" OR A$ = CHR$(121) THEN 160
1210 TEXT : HOME : END
1220 VTAB 22: HTAB 1: CALL -958: HTAB 5: PRINT "DO YOU WANT TO QUIT? (Y/N): ";
1230 GET A$: IF A$ < >"Y" AND A$ < > CHR$(121) AND A$ < >"N" AND A$ < > CHR$(110) THEN 1220
1240 IF A$ = "Y" OR A$ = CHR$(121) THEN 1210
1250 POKE -16368,0: GOSUB 780: GOTO 280
1260 VTAB 22: HTAB 2: CALL -868: HTAB 8: PRINT "PRESS RETURN TO CONTINUE";: IF XX = 1 THEN INVERSE
1270 HTAB 40: PRINT " ";: NORMAL : VTAB 22: HTAB 32
1280 GET A$: IF A$ < > CHR$(13) THEN 1280
1290 RETURN
1300 VTAB 10: HTAB 6: INVERSE : PRINT "SHAPE TABLE CANNOT BE LOADED"
1310 PRINT : HTAB 5: PRINT "INSERT CORRECT DISK INTO DRIVE": NORMAL
1320 GOSUB 1260: RUN
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