1000 REM ******************************
1010 REM *                            *
1020 REM *     PARA LINHA APPLE       *
1030 REM *                            *
1040 REM *          PINGUIM           *
1050 REM ******************************
1060 REM
1070 REM *  AJUSTA INICIO DE MEMORIA  *
1080 REM
1090 IF PEEK(104)<>64 THEN POKE 16384,0 :POKE 104,64:POKE 103,1:PRINT CHR$(4)"RUN PINGUIM"
1100 REM
1110 REM * CARREGA TABELA DE  FORMAS  *
1120 REM 
1130 POKE 232,0:POKE 233,9
1140 DIM AS(16):FOR X=0 TO 15:READ A$(X):NEXT
1150 TEXT :HOME :VTAB 10:HTAB 15:PRINT "AGUARDE... ";:FOR Y=1 TO 214:READ B$:VTAB 10:HTAB 30:PRINT 214-Y;"   "
1160 FOR X=0 TO 15:IF LEFT$(B$,1)<>A$(X) THEN NEXT
1170 BYTE=X*16
1180 FOR X=0 TO 15:IF RIGHT$(B$,1)<>A$(X) THEN NEXT
1190 BYTE=BYTE+X:POKE 2303+Y,BYTE:NEXT Y
1200 FOR X=770 TO 793:READ Y:POKE X,Y:NEXT
1210 TEXT :HOME :CLEAR :SPEED=255:VTAB 7:HTAB 16: INVERSE :PRINT "  PINGUIM  ":NORMAL
1220 GOSUB 2680
1230 REM
1240 REM *    INICIALIZA VARIAVEIS    *
1250 REM
1260 Z=0:J=Z:JI=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
1270 DIM A(17,15),X(8),Y(8),D(8):LV=1:PG=3:SCALE=1:ROT=0:PP=0
1280 LH=0:DP=0:LM=INT((LV/2)+.5):LT=1+((LV/2)=INT(LV/2)):IF LV=17 THEN 2160
1290 IF LV=10 AND PP=0 THEN PG=PG+1:PP=1
1300 FOR Z=1 TO LM:D(Z)=0:NEXT :TI=15+((5*LV)-LV*2):TEXT :HOME :VTAB 10:HTAB 18:INVERSE :PRINT "NIVEL ";LV:NORMAL
1310 FOR X=2 TO 16:FOR Y=2 TO 14:A(X,Y)=3:NEXT :NEXT
1320 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
1330 FOR Z=1 TO 35-LV:X=INT(RND(1)*14)+2:Y=INT(RND(1)*12)+2:IF A(X,Y)<>3 THEN Z=Z-1:NEXT Z
1340 A(X,Y)=2:NEXT
1350 FOR Z=1 TO LM
1360 X=INT(RND(1)*I4)+2:Y=INT(RND(1)*12)+2:GOSUB 2480:IF (EF) OR A(X,Y)<>3 THEN 1360
1370 A(X,Y)=4:X(Z)=X:Y(Z)=Y:NEXT
1380 X1=INT(RND(1)*14)+2:Y1=INT(RND(1)*12)+2:X=X1:Y=Y1:GOSUB 2480:IF (EF) OR A(X1,Y1)<>3 THEN 1380
1390 REM
1400 REM *        DESENHA TELA       *
1410 REM
1420 A(X1,Y1)=1:POKE 230,32:CALL 62450:HGR :HCOLOR=3:POKE -16368,0
1430 FOR Y=1 TO 15:FOR X=1 TO 17:IF A(X,Y)=3 THEN NEXT:NEXT
1440 GOSUB 1960:DRAW A(X,Y)+(3*(A(X,Y)=0)) AT X9,Y9:NEXT X,Y:IF PG>4 OR PG=1 THEN 1460
1450 FOR X=1 TO PG-1:DRAW 1 AT 230+X*10,140:NEXT
1460 VTAB 23:HTAB 1:PRINT "PONTOS:  ";SC;:HTAB 18:PRINT "NIVEL ";LV;:HTAB 28:PRINT "TEMPO: ";TI:IF HP THEN VTAB 23:HTAB 1:PRINT "RECORDE:"
1470 REM
1480 REM * ROTINA BASICA DO  PROGRAMA *
1490 REM
1500 GOSUB 1570:GOSUB 1770:ON DPGOTO 2020:IF LHGOTO 1280
1510 VTAB 23:HTAB 10:PRINT SC;:HTAB 34:PRINT TI;"   ":TI=TI-1:IF SC>HS AND HS<>SC THEN VTAB 23:HTAB 1:PRINT "RECORDE:";:HS=SC:HP=1
1520 IF TI=-1GOTO 2030
1530 POKE 768,255:POKE 769,3:CALL 770:GOTO 1500
1540 REM
1550 REM *    MOVIMENTA 0 PINGUIM     *
1560 REM
1570 X=PEEK(-16384):IF X<128 THEN RETURN
1580 IF X<>155 THEN 1610
1590 IF PEEK(-16384)<128 THEN 1590
1600 GOTO 1570
1610 POKE -16368,0:X=X-128:IF X<>65 AND X<>21 AND X<>8 AND X<>27 AND X<>90 THEN RETURN
1620 IF X=65 THEN Z=A(X1,Y1-1):J=1
1630 IF X=21 THEN Z=A(X1+1,Y1):J=2
1640 IF X=90 THEN Z=A(X1,Y1+1):J=3
1650 IF X=8 THEN Z=A(X1-1,Y1):J=4
1660 IF Z=2 THEN 2210
1670 IF 2=4 THEN 2020
1680 IF Z=0 THEN RETURN
1690 A(X1,Y1)=3:X=X1:Y=Y1:ON JGOSUB 1700,1710,1720,1730:GOSUB 1970:XDRAW 1 AT X9,Y9:X1=X:Y1=Y:A(X1,Y1)=1:GOSUB 1970:DRAW 1 AT X9,Y9:RETURN
1700 Y=Y-1:RETURN
1710 X=X+1:RETURN
1720 Y=Y+1:RETURN
1730 X=X-1:RETURN
1740 REM
1750 REM *  MOVIMENTA OS INVASORES    *
1760 REM
1770 FOR Z2=1 TO LT:FOR Z1=1 TO LM:X4=X(Z1):Y4=Y(Z1):IF D(Z1)=1 THEN NEXT:NEXT :RETURN
1780 IF (LT=2 AND RND(1)<.5) OR TM-Z8>2 OR RND(1)<.2 THEN J1=INT(RND(1)*4)+1:GOTO 1830
1790 IF Y4>Y1 THEN J1-1:GOTO 1830
1800 IF X4<X1 THEN J1=2:GOT0 1830
1810 IF Y4<Y1 THEN J1=3:GOTO 1830
1820 IF X4>X1 THEN J1=4
1830 ON JIGOTO 1840,1850,1860,1870
1840 IF J1=1 THEN Z=A(X4,Y4-1):GOTO 1880
1850 IF J1=2 THEN Z=A(X4+1,Y4):GOTO 1880
1860 IF JI=3 THEN Z=A(X4,Y4+1):GOTO 1880
1870 IF J1=4 THEN Z=A(X4-1,Y4)
1880 IF Z=3 THEN 1920
1890 IF Z=2 THEN J1=INT(RND(1)*4)+1:GOTO 1830
1900 IF Z=0 THEN 1780
1910 IF Z=1 THEN DP=1:RETURN
1920 A(X4,Y4)=3:HCOLOR=0:GOSUB 1980:DRAW 3 AT X9,Y9:HCOLOR=3:X=X4:Y=Y4:ON J1GOSUB 1700,1710,1720,1730:X4=X:Y4 =Y:A(X4,Y4)=4:X(Z1)=X4:Y(Z1)=Y4:GOSUB 1980:DRAW 4 AT X9,Y9:NEXT :NEXT :RETURN
1930 REM
1940 REM *     POSICIONA   FORMAS     *
1950 REM
1960 X9=(X*10)+55:Y9=(Y-1)*10:RETURN
1970 X9=(X1*10)+55:Y9=(Y1-1)*10:RETURN
1980 X9=(X4*10)+55:Y9=(Y4-1)*10:RETURN
1990 REM
2000 REM *      PINGUIM MORRE         *
2010 REM
2020 GOSUB 1980:XDRAW 4 AT X9,Y9:GOSUB 1970:DRAW 4 AT X9,Y9
2030 GOSUB 2410:PG=PG-1
2040 ON (PG)0)+1GOTO 2080,1280
2050 REM
2060 REM *        FIM DO JOGO         *
2070 REM
2080 IF HS<SC THEN HS=SC
2090 VTAB 22:CALL -958:VTAB 22:HTAB 1:PRINT "PONTOS :";SC;:HTAB 20:PRINT "RECORDE: ";HS:
2100 VTAB 24:HTAB 1:PRINT "OUTRA VEZ ? (S/N) ";:GET YN$:IF YN$<>"S" AND YN$<>"N" THEN 2100
2110 IF YN$="S" THEN SC=0:LV=1:PG=3:HP=0:GOTO 1280
2120 TEXT :HOME :END
2130 REM
2140 REM *       VENCEU O JOGO        *
2150 REM
2160 TEXT :HOME :VTAB 5:HTAB 13:INVERSE:PRINT "PARABENS !!!":NORMAL :VTAB 7:HTAB 4:PRINT "VOCE ACABOU DE SALVAR SUA ILHA ! "
2170 FOR Z=1 TO 3:FOR X=50 TO 0 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 2100
2180 REM
2190 REM *   EMPURRA BLOCO DE GELO    * 
2200 REM
2210 X=X1:Y=Y1
2220 IF J=1 THEN X=X1:Y=Y1-1
2230 IF J=2 THEN X=X1+1:Y=Y1
2240 IF J=3 THEN X=X1:Y=Y1+1
2250 IF J=4 THEN X=X1-1:Y=Y1
2260 X2=X:Y2=Y:ON JGOSUB 1700,1710,1720,1730:GOSUB 1960: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)
2270 IF Z=3 THEN 2260
2280 IF Z=4 THEN 2320
2290 X=X2:Y=Y2
2300 A(X,Y)=3:SC=SC+10:FOR H=7 TO 0 STEP -1:IF H=4 THEN NEXT H
2310 HCOLOR=H:GOSUB 1960:DRAW 2 AT X9,Y9:POKE 768,255/(H+4):POKE 769,4:CALL 770:NEXT H:HCOLOR=3:RETURN
2320 FOR Z=50 TO 5 STEP -2:POKE 768,Z:POKE 769,3:CALL 770: NEXT Z:A(X,Y)=3
2330 FOR Z=1 TO LM:IF X(Z)=X AND Y(Z)=Y THEN D(Z)=1:SC=SC+100:HCOLOR=0: GOSUB 1960:DRAW 3 AT X9,Y9:HCOLOR=3:GOTO 2350
2340 NEXT
2350 Z1=0:FOR Z=1 TO LM:IF D(Z)=1 THEN Z1=Z1+1
2360 NEXT :IF Z1=LM THEN LV=LV+1:SC=SC+TI+1:VTAB 23:HTAB 10:PRINT SC:GOSUB 2420:LH=1
2370 RETURN
2380 REM
2390 REM *      ROTINA  DE  SOM       *
2400 REM
2410 A$="192,050,192,050,192,050,229,175":GOSUB 2430:RETURN
2420 A$="144,040,108,040,086,040,072,065,086,035,072,125":GOSUB 2430:RETURN
2430 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
2440 NEXT :FOR Z=1 TO 300:NEXT :RETURN
2450 REM
2460 REM *    VERIFICA  SITUACAO     *
2470 REM
2480 EF=0:FOR I=-1 TO 1 STEP 2:FOR J=-1 TO 1 STEP 2
2490 IF A(X+I,Y+J)=0 OR A(X+I,Y+J)=2 THEN EF=EF+1
2500 NEXT J,I:EF=EF=4:RETURN
2510 REM
2520 REM *    UNIDADE  HEXADECIMAL    *
2530 REM
2540 DATA    0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
2550 REM
2560 REM *   TABELA  DE  FORMAS      *
2570 REM
2580 DATA 04,00,0A,00,3D,00,70,00,A3,00,09,09,09,09,11,1B,1B,3F,1B,13,09,09,2D,09
2590 DATA 11,1B,3F,1B,3F,13,29,09,2D,09,15,3B,3B,3F,1F,17,09,2D,2D,2D,11,18,3B,3F
2600 DATA 1F,13,09,2D,09,2D,11,1B,1B,1B,1B,1B,00,29,2D,2D,2D,15,1F,1B,1B,1B,33,0D
2610 DATA 2D,09,2D,31,1F,1F,1B,3B,33,0D,09,09,09,31,1F,1B,1B,1B,33,0D,0D,09,29,31
2620 DATA 1F,3F,1B,3F,33,0D,09,09,09,31,3B,3F,3F,3F,1F,00,2D,2D,2D,2D,35,3F,3F,3F
2630 DATA 3F,37,2D,2D,2D,2D,35,3F,3F,3F,3F,37,2D,2D,2D,2D,35,3F,3F,3F,3F,37,2D,2D
2640 DATA 2D,2D,35,3F,3F,3F,3F,37,2D,2D,2D,2D,35,3F,3F,3F,3F,3F,00,09,09,09,09,11
2650 DATA 18,18,3F,1F,13,09,29,2D,09,11,18,18,38,18,13,09,2D,2D,00,11,18,1F,3F,1F
2660 DATA 17,09,29,2D,09,11,1B,1B,3F,1F,13,09,2D,29,0D,11,1B,1B,1B,1B,1B,00
2670 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 
2680 REM
2690 REM *        INSTRUCOES          *
2700 REM
2710 VTAB 12:HTAB 05:PRINT "DESEJA INSTRUCOES ? (S/N) ";:GET A$:IF A$<>"S" AND A$<>"N" THEN 2710
2720 IF A$="N" THEN RETURN
2730 HOME :PRINT "ESTE E' UM JOGO QUE REQUER ESTRATEGIA E"
2740 PRINT :PRINT "ABILIDADE.  ILHA DO PINGUIM  E' UMA PE-"
2750 PRINT :PRINT "QUENA ILHA PERTO DO POLO SUL. UMA TRIBO"
2760 PRINT :PRINT "QUE MORA EM  UMA ILHA VIZINHA A SUA ES-"
2770 PRINT :PRINT "TA COM PROBLEMAS DE ESPACO   E SEUS MO-"
2780 PRINT :PRINT "RADORES  RESOLVERAM INVADIR  A SUA   EM"
2790 PRINT :PRINT "BUSCA DE MAIS TERRENO. E' 0 QUE SE CHA-"
2800 PRINT :PRINT "MA DE EXPLOSAO DEMOGRA'FICA !!!"
2810 PRINT :PRINT "SUA TAREFA E' A DE   IMPEDI-LOS  E PARA"
2820 PRINT :PRINT "ISTO VOCE  CONTARA APENAS COM UMA ARMA,"
2830 PRINT :PRINT "BLOCOS DE GELO. VOC E DEVERA' LANCA-LOS"
2840 PRINT :PRINT "Q/Q TECLA PARA CONTINUAR. ";:GET A$
2850 HOME :PRINT "CONTRA SEU INVASORES.  E NAO PENSE QUE "
2860 PRINT :PRINT "ISTO SERA TAO FACIL QUANTO APARENTA, A-"
2870 PRINT :PRINT "LEM DE AGEIS,  ELES PODERAO VIR EM GRU-"
2880 PRINT :PRINT "POS DE ATE' 8 !"
2890 PRINT :PRINT "PLANEJE  SEUS ATAQUES  CUIDADOSAMENTE, "
2900 PRINT :PRINT "PORQUE,  LEMBRE-SE,   VOCE E' APENAS UM"
2910 PRINT :PRINT "PINGUIM, E PINGUINS CANSAM-SE FACILMEN-"
2920 PRINT :PRINT "TE, E UMA VEZ CANSADO,  SEUS MOVIMENTOS"
2930 PRINT :PRINT "SAO MUITO LENTOS."
2940 PRINT :PRINT "ALEM DE TUDO ISTO, VOCE TEM UM PRAZO P/"
2950 PRINT :PRINT "CUMPRIR SUA TAREFA,     ULTRAPASSANDO-O,"
2960 PRINT :PRINT "Q/Q TECLA PARA CONTINUAR. ";:GET A$
2970 HOME :PRINT "VOCE PERDERA'  UMA DAS  TRES VIDAS  QUE"
2980 PRINT :PRINT "POSSUI.   PERDENDO-AS TODAS,  PERDERA A"
2990 PRINT :PRINT "ILHA."
3000 PRINT :PRINT "PARA SE MOVIMENTAR, UTILIZE AS SETAS P/"
3010 PRINT :PRINT "ESQUERDA E DIREITA E 'A' E 'Z' PARA CI-"
3020 PRINT :PRINT "MA E PARA BAIXO. A TECLA 'ESC' PAUSARA'"
3030 PRINT :PRINT "O JOGO, DIGITANDO-A NOVAMENTE RETORNARA"
3040 PRINT :PRINT "PARA LANCAR OS BLOCOS DE GELO. BASTA IR"
3050 PRINT :PRINT "DE ENCONTRO 'A ELES."
3060 PRINT :PRINT "A CADA BLOCO  DE GELO QUEBRADO VOCE RE-"
3070 PRINT :PRINT "CEBERA'  10 PONTOS, 100  SE ATINGIR  UM"
3080 PRINT :PRINT "Q/Q TECLA PARA CONTINUAR. ";:GET A$
3090 HOME :PRINT "INTRUSO E GANHARA UMA  VIDA SE ULTRAPAS-"
3100 PRINT :PRINT "SAR O  DECIMO NIVEL DE  DEZESSEIS EXIS-"
3110 PRINT :PRINT "TENTES."
3120 PRINT :PRINT "Q/Q TECLA PARA COMECAR. ";:GET A$
3130 RETURN

