1000 REM********************************
1010 REM*       PARA LINHA APPLE       *
1020 REM*                              *
1030 REM*           EXPLOSAO           *
1040 REM********************************
1050 GOSUB 2410
1060 DIM RB(5,5),SB(5,5),ST(5,5)
1070 C1$="I---I---I---I---I"
1080 C2$="I   I   I   I   I"
1090 BE$=CHR$(7):ER$=BE$+BE$+BE$:ER$=ER$+ER$
1100 GOTO 2320
1110 FOR X=1 TO SI:FOR Y=1 TO SI:SB(X,Y)=RB(X,Y):NEXT Y,X:RETURN
1120 FOR X=1 TO SI:FOR Y=1 TO SI:RB(X,Y)=SB(X,Y):NEXT Y,X:RETURN
1130 REM
1140 REM  ** INICIALIZA **
1150 HOME :INPUT "TAMANHO DO TABULEIRO (3 OU 4): ";SI
1160 IF SI<3 OR SI>4 THEN 1150
1170 FOR X=1 TO SI
1180 FOR Y=1 TO SI
1190 ST(X,Y)=4-(X=1)-(X=SI)-(Y=1)-(Y=SI)
1200 NEXT Y,X
1210 PRINT :INPUT "QUEM COMECA ? VOCE(V) OU EU(E): ";AN$
1220 CM=(LEFT$(AN$,1)="E")
1230 REM  ** DESENHA TABULEIRO **
1240 HOME
1250 HTAB 12:PRINT LEFT$("\ X 1   2   3   4",13+4*(SI=4))
1260 HTAB 13:PRINT "\":HTAB 12:PRINT "Y";
1270 FOR I=1 TO SI
1280 HTAB 14:PRINT LEFT$(C1$,13+4*(SI=4))
1290 HTAB 14:PRINT LEFT$(C2$,13+4*(SI=4))
1300 HTAB 12:PRINT I;" "+LEFT$(C2$,13+4*(SI=4))
1310 HTAB 14:PRINT LEFT$(C2$,13+4*(SI=4))
1320 NEXT I
1330 HTAB 14:PRINT LEFT$(C1$,13+4*(SI=4))
1340 RETURN
1350 REM
1360 REM  ** EXECUTA MOVIMENTO **
1370 VTAB 21:HTAB 1:CALL -958
1380 HTAB 16:PRINT "SUA VEZ"
1390 HTAB 19: INPUT "X: ";X$
1400 MX=VAL(X$):IF MX<1 OR MX>SI THEN 1370
1410 HTAB 19:INPUT "Y: ";Y$
1420 MY=VAL(Y$):1F MY<1 OR MY>SI THEN 1370
1430 IF RB(MX,MY)<0 THEN PRINT ER$;:GOTO 1370
1440 GOSUB 1110
1450 X=MX:Y=MY:DI=1
1460 GOSUB 1510
1470 IF ET THEN 2240
1480 GOSUB 1120
1490 RETURN
1500 REM
1510 REM   ** EXPLOSAO ETERNA **
1520 SB(X,Y)=SB(X,Y)+PL
1530 NE=0
1540 IF PL=-1 THEN INVERSE
1550 IF DI THEN VTAB 1+4*Y:HTAB 12+4*X: PRINT ABS(SB(X,Y));
1560 NORMAL
1570 XP=0
1580 FOR X=1 TO SI
1590 FOR Y=1 TO SI
1600 IF ABS(SB(X,Y))<ST(X,Y) THEN 1690
1610 XP=1
1620 NE=NE+1
1630 SB(X,Y)=0
1640 IF DI THEN VTAB 1+4*Y:HTAB 12+4*X: PRINT " ";
1650 EX=X:EY=Y+1:GOSUB 1750
1660 EX=X+1:EY=Y:GOSUB 1750
1670 EX=X:EY=Y-1:GOSUB 1750
1680 EX=X-1:EY=Y:GOSUB 1750
1690 NEXT Y,X
1700 ET=(NE>SI*SI)
1710 IF XP AND NOT ET THEN 1570
1720 IF (DI AND ET) AND (NE<3*SI*SI) THEN 1580
1730 RETURN
1740 REM
1750 REM  ** SOMA POSICOES VIZINHAS **
1760 SB(EX,EY)=PL*(ABS(SB(EX,EY))+1)
1770 IF NOT DI OR ST(EX,EY)=0 THEN 1820
1780 IF PL=-1 THEN INVERSE
1790 VTAB 1+4*EY:HTAB 12+4*EX:PRINT ABS(SB(EX,EY));
1800 FOR DL=1 TO 300:NEXT
1810 NORMAL
1820 RETURN
1830 REM
1840 REM  ** VEZ DO COMPUTADOR **
1850 VTAB 21:HTAB 1:CALL -958
1860 HTAB 17:PRINT "MINHA VEZ"
1870 HTAB 15:PRINT "AGUARDE..."
1880 BE=1000
1890 FOR TX=1 TO SI
1900 FOR TY=1 TO SI
1910 IF RB(TX,TY)>0 THEN 1980
1920 GOSUB 1110
1930 X=TX:Y=TY:DI=0
1940 GOSUB 1510
1950 IF ET THEN MX=TX:MY=TY:GOTO 1990
1960 GOSUB 2100
1970 IF EN<BE OR (EN=BE AND INT(RND(1)*10)<3) THEN BE=EN:MX=TX:MY=TY
1980 NEXT TY,TX
1990 REM  **  MOVIMENTO ATUAL  **
2000 GOSUB 1110
2010 X=MX:Y=MY:DI=1
2020 VTAB 22:HTAB 1:CALL -958
2030 HTAB 19:PRINT "X: "X;BE$
2040 HTAB 19:PRINT "Y: "Y
2050 GOSUB 1510
2060 IF ET THEN 2240
2070 GOSUB 1120
2080 RETURN
2090 REM
2100 REM  ** ANALISA SITUACAO **
2110 EN=0
2120 FOR X=1 TO SI
2130 FOR Y=1 TO SI
2140 EN=EN+SB(X,Y)
2150 IF -SB(X,Y)<ST(X,Y)-1 THEN 2210
2160 EN=EN-2
2170 IF SB(X+1,Y)=ST(X+1,Y)-1 THEN EN=EN+10
2180 IF SB(X,Y+1)=ST(X,Y+1)-1 THEN EN=EN+10
2190 IF SB(X-1,Y)=ST(X-1,Y)-1 THEN EN=EN+10
2200 IF SB(X,Y-1)=ST(X,Y-1)-1 THEN EN=EN+10
2210 NEXT Y,X
2220 RETURN
2230 REM
2240 REM  **   FIM   **
2250 VTAB 21:HTAB 1:CALL -958
2260 PRINT "UMA EXPLOSAO SEM FIM. "
2270 IF PL=1 THEN PRINT "VOCE GANHOU ";: GOTO 2290
2280 PRINT "EU GANHEI ";
2290 PRINT "EM "NT" MOVIMENTOS ";
2300 END
2310 REM
2320 REM  **  PROGRAMA PRINCIPAL  **
2330 GOSUB 1140:REM INITIALIZE
2340 IF CM THEN 2360
2350 PL=1:GOSUB 1360
2360 PL=-1:GOSUB 1840
2370 :VTAB 24:HTAB 8:PRINT "Q/Q TECLA PARA CONTINUAR";
2380 GET A$
2390 NT=NT+1
2400 GOTO 2350
2410 REM **  INSTRUCOES  **
2420 HOME :HTAB 15:PRINT "EXPLOSAO"
2430 PRINT :PRINT "ESTE E' UM JOGO ENTRE VOCE E 0 COMPUTA-"
2440 PRINT :PRINT "TADOR. UM TABULEIRO 3*3 OU 4*4, DE A-"
2450 PRINT :PRINT "CORDO COM SUA ESCOLHA, SERA MONTADO E"
2460 PRINT :PRINT "VOCE COLOCARA SUAS PECAS AONDE QUISER"
2470 PRINT :PRINT "INTERCALANDO A VEZ COM O COMPUTADOR."
2480 PRINT :PRINT "CADA POSICAO NO TABULEIRO COMPORTA UM"
2490 PRINT :PRINT "DETERMINADO NUMERO DE PECAS, E QUANDO"
2500 PRINT :PRINT "A CAPACIDADE DE UMA POSICAO 'EXPLODIR',"
2510 PRINT :PRINT "AS PECAS CONTIDAS NESTA POSICAO SERAO"
2520 PRINT :PRINT "LANCADAS 'AS POSICOES AO SEU REDOR,"
2530 PRINT :PRINT "Q/Q TECLA PARA CONTINUAR ";:GET A$
2540 HOME :PRINT "FAZENDO COM QUE AS POSICOES QUE ESTAO"
2550 PRINT :PRINT "COM SUA CAPACIDADE NO LIMITE, EXPLODAM"
2560 PRINT :PRINT "TAMBEM, ESPALHANDO SUAS PECAS FORMANDO"
2570 PRINT :PRINT "UMA REACAO EM CADEIA."
2580 PRINT :PRINT "GANHA AQUELE QUE CONSEGUIR GERAR ESTA"
2590 PRINT :PRINT "EXPLOSAO SEM FIM."
2600 VTAB 22:PRINT "Q/Q TECLA PARA CONTINUAR ";:GET A$
2610 RETURN

