home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib25a.dsk / SEPTEMBER.1985 / PENGUIN.bas < prev    next >
BASIC Source File  |  2023-02-26  |  7KB  |  118 lines

  1. 1  REM  **********************
  2. 2  REM  *       PENGUIN      *  
  3. 3  REM  *    BY STEVE ROTH   *  
  4. 4  REM  * COPYRIGHT (C) 1985 * 
  5. 5  REM  * BY MICROSPARC, INC *
  6. 6  REM  * CONCORD, MA  01742 *
  7. 7  REM  **********************
  8. 10  IF  PEEK(104) < >64  THEN  POKE 16384,0: POKE 104,64: POKE 103,1: PRINT  CHR$(4)"RUN PENGUIN"
  9. 20  POKE 232,0: POKE 233,9: PRINT  CHR$(4)"BLOAD PENGUIN.SHAPES,A$900"
  10. 30  TEXT : HOME : CLEAR : SPEED= 255: VTAB 7: HTAB 16: INVERSE : PRINT "PENGUIN": NORMAL : VTAB 9: HTAB 13: PRINT "BY STEVE ROTH": VTAB 22: PRINT "* COPYRIGHT 1985 BY MICROSPARC, INC *"
  11. 40  VTAB 16: PRINT "USE LEFT AND RIGHT ARROW KEYS, A & Z": PRINT " TO MOVE PENGUIN AND PUSH ICE BLOCKS.": FOR I = 1 TO 3000: NEXT 
  12. 50  FOR X = 770 TO 793: READ Y: POKE X,Y: NEXT 
  13. 60  DATA  174,0,3,173,48,192,136,208,5,206,1,3,240,9,202,208,245,174,0,3,76,5,3,96
  14. 70  REM  SET UP VARIABLE TABLE
  15. 80 Z = 0:J = Z:J1 = Z:X = Z:Y = Z:Z1 = Z:X4 = Z:Y4 = Z:X1 = Z:Y1 = Y:Z9 = Z:Y9 = Z:SC = Z:Z2 = Z:Z8 = Z:LV = Z:TI = Z
  16. 90  REM  SET UP VARIABLES
  17. 100  DIM A(17,15),X(8),Y(8),D(8):LV = 1:PG = 3: SCALE= 1: ROT= 0:PP = 0
  18. 110 LH = 0:DP = 0:LM =  INT((LV/2) +.5):LT = 1 +((LV/2) =  INT(LV/2)): IF LV = 17  THEN 830
  19. 120  IF LV = 10  AND PP = 0  THEN PG = PG +1:PP = 1
  20. 130  FOR Z = 1 TO LM:D(Z) = 0: NEXT :TI = 15 +((5 *LV) -LV *2): TEXT : HOME : VTAB 10: HTAB 16: INVERSE : PRINT "LEVEL ";LV: NORMAL 
  21. 140  FOR X = 2 TO 16: FOR Y = 2 TO 14:A(X,Y) = 3: NEXT : NEXT 
  22. 150  FOR X = 1 TO 17:A(X,1) = 0:A(X,15) = 0: NEXT : FOR Y = 1 TO 15:A(1,Y) = 0:A(17,Y) = 0: NEXT 
  23. 160  FOR Z = 1 TO 35 -LV:X =  INT( RND(1) *15) +2:Y =  INT( RND(1) *13) +2: IF A(X,Y) < >3  THEN Z = Z -1: NEXT Z
  24. 170 A(X,Y) = 2: NEXT 
  25. 180  FOR Z = 1 TO LM
  26. 190 X =  INT( RND(1) *15) +2:Y =  INT( RND(1) *13) +2: GOSUB 1090: IF (EF)  OR A(X,Y) < >3  THEN 190
  27. 200 A(X,Y) = 4:X(Z) = X:Y(Z) = Y: NEXT 
  28. 210 X1 =  INT( RND(1) *15) +2:Y1 =  INT( RND(1) *13) +2:X = X1:Y = Y1: GOSUB 1090: IF (EF)  OR A(X1,Y1) < >3  THEN 210
  29. 220  REM  DRAW SCREEN
  30. 230 A(X1,Y1) = 1: POKE 230,32: CALL 62450: HGR : HCOLOR= 3: POKE  -16368,0
  31. 240  FOR Y = 1 TO 15: FOR X = 1 TO 17: IF A(X,Y) = 3  THEN  NEXT : NEXT 
  32. 250  GOSUB 690: DRAW A(X,Y) +(3 *(A(X,Y) = 0)) AT X9,Y9: NEXT X,Y: IF PG >4  OR PG = 1  THEN 270
  33. 260  FOR X = 1 TO PG -1: DRAW 1 AT 230 +X *10,140: NEXT 
  34. 270  VTAB 21: HTAB 18: INVERSE : PRINT "PENGUIN": NORMAL : VTAB 23: HTAB 1: PRINT "YOUR SCORE: ";SC;: HTAB 18: PRINT "LEVEL ";LV;: HTAB 28: PRINT "TIME: ";TI: IF HP  THEN  VTAB 23: HTAB 1: PRINT "HIGH"
  35. 280  REM  MAIN PROGRAM LOOP
  36. 290  GOSUB 340: GOSUB 520: ON DP GOTO 730: IF LH GOTO 110
  37. 300  VTAB 23: HTAB 13: PRINT SC;: HTAB 34: PRINT TI;"   ":TI = TI -1: IF SC >HS  AND HS < >SC  THEN  VTAB 23: HTAB 1: PRINT "HIGH";:HS = SC:HP = 1
  38. 310  IF TI =  -1 GOTO 740
  39. 320  POKE 768,255: POKE 769,3: CALL 770: GOTO 290
  40. 330  REM  MOVE SAMMY
  41. 340 X =  PEEK( -16384): IF X <128  THEN  RETURN 
  42. 350  IF X < >155  THEN 380
  43. 360  IF  PEEK( -16384) <128  THEN 360
  44. 370  GOTO 340
  45. 380  POKE  -16368,0:X = X -128: IF X < >65  AND X < >21  AND X < >8  AND X < >27  AND X < >90  THEN  RETURN 
  46. 390  IF X = 65  THEN Z = A(X1,Y1 -1):J = 1
  47. 400  IF X = 21  THEN Z = A(X1 +1,Y1):J = 2
  48. 410  IF X = 90  THEN Z = A(X1,Y1 +1):J = 3
  49. 420  IF X = 8  THEN Z = A(X1 -1,Y1):J = 4
  50. 430  IF Z = 2  THEN 860
  51. 440  IF Z = 4  THEN 730
  52. 450  IF Z = 0  THEN  RETURN 
  53. 460 A(X1,Y1) = 3:X = X1:Y = Y1: ON J GOSUB 470,480,490,500: GOSUB 700: XDRAW 1 AT X9,Y9:X1 = X:Y1 = Y:A(X1,Y1) = 1: GOSUB 700: DRAW 1 AT X9,Y9: RETURN 
  54. 470 Y = Y -1: RETURN 
  55. 480 X = X +1: RETURN 
  56. 490 Y = Y +1: RETURN 
  57. 500 X = X -1: RETURN 
  58. 510  REM  MOVE NATIVES
  59. 520  FOR Z2 = 1 TO LT: FOR Z1 = 1 TO LM:X4 = X(Z1):Y4 = Y(Z1): IF D(Z1) = 1  THEN  NEXT : NEXT : RETURN 
  60. 530  IF (LT = 2  AND  RND(1) <.5)  OR TM -Z8 >2  OR  RND(1) <.2  THEN J1 =  INT( RND(1) *4) +1: GOTO 580
  61. 540  IF Y4 >Y1  THEN J1 = 1: GOTO 580
  62. 550  IF X4 <X1  THEN J1 = 2: GOTO 580
  63. 560  IF Y4 <Y1  THEN J1 = 3: GOTO 580
  64. 570  IF X4 >X1  THEN J1 = 4
  65. 580  ON J1 GOTO 590,600,610,620
  66. 590  IF J1 = 1  THEN Z = A(X4,Y4 -1): GOTO 630
  67. 600  IF J1 = 2  THEN Z = A(X4 +1,Y4): GOTO 630
  68. 610  IF J1 = 3  THEN Z = A(X4,Y4 +1): GOTO 630
  69. 620  IF J1 = 4  THEN Z = A(X4 -1,Y4)
  70. 630  IF Z = 3  THEN 670
  71. 640  IF Z = 2  THEN J1 =  INT( RND(1) *4) +1: GOTO 580
  72. 650  IF Z = 0  THEN 530
  73. 660  IF Z = 1  THEN DP = 1: RETURN 
  74. 670 A(X4,Y4) = 3: HCOLOR= 0: GOSUB 710: DRAW 3 AT X9,Y9: HCOLOR= 3:X = X4:Y = Y4: ON J1 GOSUB 470,480,490,500:X4 = X:Y4 = Y:A(X4,Y4) = 4:X(Z1) = X4:Y(Z1) = Y4: GOSUB 710: DRAW 4 AT X9,Y9: NEXT : NEXT : RETURN 
  75. 680  REM  POSITION SHAPE
  76. 690 X9 = (X *10) +55:Y9 = (Y -1) *10: RETURN 
  77. 700 X9 = (X1 *10) +55:Y9 = (Y1 -1) *10: RETURN 
  78. 710 X9 = (X4 *10) +55:Y9 = (Y4 -1) *10: RETURN 
  79. 720  REM  DEAD PENGUIN
  80. 730  GOSUB 710: XDRAW 4 AT X9,Y9: GOSUB 700: DRAW 4 AT X9,Y9
  81. 740  GOSUB 1040:PG = PG -1
  82. 750  ON (PG >0) +1 GOTO 770,110
  83. 760  REM  GAME OVER
  84. 770  IF HS <SC  THEN HS = SC
  85. 780  VTAB 22: CALL  -958: VTAB 22: HTAB 1: PRINT "YOUR SCORE: ";SC;: HTAB 20: PRINT "HIGH SCORE: ";HS;
  86. 790  VTAB 24: HTAB 1: PRINT "WOULD YOU LIKE TO PLAY AGAIN? (Y/N) ";: GET YN$: IF YN$ < >"Y"  AND YN$ < >"N"  THEN 790
  87. 800  IF YN$ = "Y"  THEN SC = 0:LV = 1:PG = 3:HP = 0: GOTO 110
  88. 810  TEXT : HOME : END 
  89. 820  REM  WINNER ROUTINE
  90. 830  TEXT : HOME : VTAB 5: HTAB 13: INVERSE : PRINT "CONGRATULATIONS": NORMAL : VTAB 7: HTAB 4: PRINT "YOU HAVE JUST SAVED YOUR ISLAND!"
  91. 840  FOR Z = 1 TO 3: FOR X = 50 TO 10  STEP  -1: POKE 768,X: POKE 769,2: CALL 770: NEXT : FOR X = 10 TO 50  STEP 1: POKE 768,X: POKE 769,2: CALL 770: NEXT : NEXT : GOTO 790
  92. 850  REM  PUSH ICE BLOCK
  93. 860 X = X1:Y = Y1
  94. 870  IF J = 1  THEN X = X1:Y = Y1 -1
  95. 880  IF J = 2  THEN X = X1 +1:Y = Y1
  96. 890  IF J = 3  THEN X = X1:Y = Y1 +1
  97. 900  IF J = 4  THEN X = X1 -1:Y = Y1
  98. 910 X2 = X:Y2 = Y: ON J GOSUB 470,480,490,500: GOSUB 690: POKE 768,255: POKE 769,2: CALL 770: DRAW 2 AT X9,Y9: HCOLOR= 0: DRAW 3 AT (X2 *10) +55,(Y2 -1) *10:A(X2,Y2) = 3: HCOLOR= 3:Z = A(X,Y)
  99. 920  IF Z = 3  THEN 910
  100. 930  IF Z = 4  THEN 970
  101. 940 X = X2:Y = Y2
  102. 950 A(X,Y) = 3:SC = SC +10: FOR H = 7 TO 0  STEP  -1: IF H = 4  THEN  NEXT H
  103. 960  HCOLOR= H: GOSUB 690: DRAW 2 AT X9,Y9: POKE 768,255/(H +4): POKE 769,4: CALL 770: NEXT H: HCOLOR= 3: RETURN 
  104. 970  FOR Z = 50 TO 5  STEP  -2: POKE 768,Z: POKE 769,3: CALL 770: NEXT Z:A(X,Y) = 3
  105. 980  FOR Z = 1 TO LM: IF X(Z) = X  AND Y(Z) = Y  THEN D(Z) = 1:SC = SC +100: HCOLOR= 0: GOSUB 690: DRAW 3 AT X9,Y9: HCOLOR= 3: GOTO 1000
  106. 990  NEXT 
  107. 1000 Z1 = 0: FOR Z = 1 TO LM: IF D(Z) = 1  THEN Z1 = Z1 +1
  108. 1010  NEXT : IF Z1 = LM  THEN LV = LV +1:SC = SC +TI +1: VTAB 23: HTAB 13: PRINT SC: GOSUB 1050:LH = 1
  109. 1020  RETURN 
  110. 1030  REM  SOUND ROUTINES
  111. 1040 A$ = "192,050,192,050,192,050,229,175": GOSUB 1060: RETURN 
  112. 1050 A$ = "144,040,108,040,086,040,072,065,086,035,072,125": GOSUB 1060: RETURN 
  113. 1060  FOR X = 0 TO ( LEN(A$)/4) +1: POKE 768 +((X/2) < > INT(X/2)), VAL( MID$ (A$,X *4 +1,3)): IF ((X/2) < > INT(X/2))  THEN  CALL 770
  114. 1070  NEXT : FOR Z = 1 TO 3000: NEXT : RETURN 
  115. 1080  REM  CHECK FOR TRAPPED PENGUIN OR NATIVE
  116. 1090 EF = 0: FOR I =  -1 TO 1  STEP 2: FOR J =  -1 TO 1  STEP 2
  117. 1100  IF A(X +I,Y +J) = 0  OR A(X +I,Y +J) = 2  THEN EF = EF +1
  118. 1110  NEXT J,I:EF = EF = 4: RETURN