home *** CD-ROM | disk | FTP | other *** search
Wrap
1 REM ********************** 2 REM * PENGUIN * 3 REM * BY STEVE ROTH * 4 REM * COPYRIGHT (C) 1985 * 5 REM * BY MICROSPARC, INC * 6 REM * CONCORD, MA 01742 * 7 REM ********************** 10 IF PEEK(104) < >64 THEN POKE 16384,0: POKE 104,64: POKE 103,1: PRINT CHR$(4)"RUN PENGUIN" 20 POKE 232,0: POKE 233,9: PRINT CHR$(4)"BLOAD PENGUIN.SHAPES,A$900" 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 *" 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 50 FOR X = 770 TO 793: READ Y: POKE X,Y: NEXT 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 70 REM SET UP VARIABLE TABLE 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 90 REM SET UP VARIABLES 100 DIM A(17,15),X(8),Y(8),D(8):LV = 1:PG = 3: SCALE= 1: ROT= 0:PP = 0 110 LH = 0:DP = 0:LM = INT((LV/2) +.5):LT = 1 +((LV/2) = INT(LV/2)): IF LV = 17 THEN 830 120 IF LV = 10 AND PP = 0 THEN PG = PG +1:PP = 1 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 140 FOR X = 2 TO 16: FOR Y = 2 TO 14:A(X,Y) = 3: NEXT : NEXT 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 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 170 A(X,Y) = 2: NEXT 180 FOR Z = 1 TO LM 190 X = INT( RND(1) *15) +2:Y = INT( RND(1) *13) +2: GOSUB 1090: IF (EF) OR A(X,Y) < >3 THEN 190 200 A(X,Y) = 4:X(Z) = X:Y(Z) = Y: NEXT 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 220 REM DRAW SCREEN 230 A(X1,Y1) = 1: POKE 230,32: CALL 62450: HGR : HCOLOR= 3: POKE -16368,0 240 FOR Y = 1 TO 15: FOR X = 1 TO 17: IF A(X,Y) = 3 THEN NEXT : NEXT 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 260 FOR X = 1 TO PG -1: DRAW 1 AT 230 +X *10,140: NEXT 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" 280 REM MAIN PROGRAM LOOP 290 GOSUB 340: GOSUB 520: ON DP GOTO 730: IF LH GOTO 110 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 310 IF TI = -1 GOTO 740 320 POKE 768,255: POKE 769,3: CALL 770: GOTO 290 330 REM MOVE SAMMY 340 X = PEEK( -16384): IF X <128 THEN RETURN 350 IF X < >155 THEN 380 360 IF PEEK( -16384) <128 THEN 360 370 GOTO 340 380 POKE -16368,0:X = X -128: IF X < >65 AND X < >21 AND X < >8 AND X < >27 AND X < >90 THEN RETURN 390 IF X = 65 THEN Z = A(X1,Y1 -1):J = 1 400 IF X = 21 THEN Z = A(X1 +1,Y1):J = 2 410 IF X = 90 THEN Z = A(X1,Y1 +1):J = 3 420 IF X = 8 THEN Z = A(X1 -1,Y1):J = 4 430 IF Z = 2 THEN 860 440 IF Z = 4 THEN 730 450 IF Z = 0 THEN RETURN 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 470 Y = Y -1: RETURN 480 X = X +1: RETURN 490 Y = Y +1: RETURN 500 X = X -1: RETURN 510 REM MOVE NATIVES 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 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 540 IF Y4 >Y1 THEN J1 = 1: GOTO 580 550 IF X4 <X1 THEN J1 = 2: GOTO 580 560 IF Y4 <Y1 THEN J1 = 3: GOTO 580 570 IF X4 >X1 THEN J1 = 4 580 ON J1 GOTO 590,600,610,620 590 IF J1 = 1 THEN Z = A(X4,Y4 -1): GOTO 630 600 IF J1 = 2 THEN Z = A(X4 +1,Y4): GOTO 630 610 IF J1 = 3 THEN Z = A(X4,Y4 +1): GOTO 630 620 IF J1 = 4 THEN Z = A(X4 -1,Y4) 630 IF Z = 3 THEN 670 640 IF Z = 2 THEN J1 = INT( RND(1) *4) +1: GOTO 580 650 IF Z = 0 THEN 530 660 IF Z = 1 THEN DP = 1: RETURN 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 680 REM POSITION SHAPE 690 X9 = (X *10) +55:Y9 = (Y -1) *10: RETURN 700 X9 = (X1 *10) +55:Y9 = (Y1 -1) *10: RETURN 710 X9 = (X4 *10) +55:Y9 = (Y4 -1) *10: RETURN 720 REM DEAD PENGUIN 730 GOSUB 710: XDRAW 4 AT X9,Y9: GOSUB 700: DRAW 4 AT X9,Y9 740 GOSUB 1040:PG = PG -1 750 ON (PG >0) +1 GOTO 770,110 760 REM GAME OVER 770 IF HS <SC THEN HS = SC 780 VTAB 22: CALL -958: VTAB 22: HTAB 1: PRINT "YOUR SCORE: ";SC;: HTAB 20: PRINT "HIGH SCORE: ";HS; 790 VTAB 24: HTAB 1: PRINT "WOULD YOU LIKE TO PLAY AGAIN? (Y/N) ";: GET YN$: IF YN$ < >"Y" AND YN$ < >"N" THEN 790 800 IF YN$ = "Y" THEN SC = 0:LV = 1:PG = 3:HP = 0: GOTO 110 810 TEXT : HOME : END 820 REM WINNER ROUTINE 830 TEXT : HOME : VTAB 5: HTAB 13: INVERSE : PRINT "CONGRATULATIONS": NORMAL : VTAB 7: HTAB 4: PRINT "YOU HAVE JUST SAVED YOUR ISLAND!" 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 850 REM PUSH ICE BLOCK 860 X = X1:Y = Y1 870 IF J = 1 THEN X = X1:Y = Y1 -1 880 IF J = 2 THEN X = X1 +1:Y = Y1 890 IF J = 3 THEN X = X1:Y = Y1 +1 900 IF J = 4 THEN X = X1 -1:Y = Y1 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) 920 IF Z = 3 THEN 910 930 IF Z = 4 THEN 970 940 X = X2:Y = Y2 950 A(X,Y) = 3:SC = SC +10: FOR H = 7 TO 0 STEP -1: IF H = 4 THEN NEXT H 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 970 FOR Z = 50 TO 5 STEP -2: POKE 768,Z: POKE 769,3: CALL 770: NEXT Z:A(X,Y) = 3 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 990 NEXT 1000 Z1 = 0: FOR Z = 1 TO LM: IF D(Z) = 1 THEN Z1 = Z1 +1 1010 NEXT : IF Z1 = LM THEN LV = LV +1:SC = SC +TI +1: VTAB 23: HTAB 13: PRINT SC: GOSUB 1050:LH = 1 1020 RETURN 1030 REM SOUND ROUTINES 1040 A$ = "192,050,192,050,192,050,229,175": GOSUB 1060: RETURN 1050 A$ = "144,040,108,040,086,040,072,065,086,035,072,125": GOSUB 1060: RETURN 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 1070 NEXT : FOR Z = 1 TO 3000: NEXT : RETURN 1080 REM CHECK FOR TRAPPED PENGUIN OR NATIVE 1090 EF = 0: FOR I = -1 TO 1 STEP 2: FOR J = -1 TO 1 STEP 2 1100 IF A(X +I,Y +J) = 0 OR A(X +I,Y +J) = 2 THEN EF = EF +1 1110 NEXT J,I:EF = EF = 4: RETURN