EXPORT AIMODE:=0,BMSTR:="BMEND",Mx,My; EXPORT Ax:=1,Ay:=1,Alive,BMa,Amax:=5; EXPORT Bx:=22,By:=14,Blive,BMb,Bmax:=1; DRAWFIRE(Ti,Ix,Iy) BEGIN IF Ix=Ax AND Iy=Ay THEN Ax:=1;Ay:=1;END; IF Ix=Bx AND Iy=By THEN Bx:=22;By:=14;END; IF Ti=3 THEN DRAWITEM(13,Ix,Iy);ADDITEM(15,Ix,Iy); END; IF Ti=0 THEN RECT_P(Ix*8,Iy*8,Ix*8+7,Iy*8+7);END; END; BOOM(T,X,Y) BEGIN LOCAL IN,DN; FOR DN FROM −1 TO 1 DO IF DN≠0 THEN GEIM(X+DN,Y)►IN; IF IN=1 OR IN=2 OR IN=15 OR IN=13 THEN DRAWFIRE(T,X+DN,Y);END; GEIM(X,Y+DN)►IN; IF IN=1 OR IN=2 OR IN=15 OR IN=13 THEN DRAWFIRE(T,X,Y+DN);END; END; END; END; ADDFIRE(Ix,Iy) BEGIN LOCAL IN,DN; FOR DN FROM −1 TO 1 DO GEIM(Ix+DN,Iy)►IN; IF IN=1 OR IN=2 OR IN=15 THEN ADDITEM(15,Ix+DN,Iy);END; GEIM(Ix,Iy+DN)►IN; IF IN=1 OR IN=2 OR IN=15 THEN ADDITEM(15,Ix,Iy+DN);END; END; END; BOOMManager() BEGIN LOCAL SN:=3,T,X,Y,NA; WHILE 1 DO IF SN≤dim(BMSTR)-3 THEN T:=expr(mid(BMSTR,SN+1,2)); X:=expr(mid(BMSTR,SN+3,2)); Y:=expr(mid(BMSTR,SN+5,2)); T:=T-1; BMSTR:=left(BMSTR,SN)+IFTE(T≤9,"0"+T,T)+mid(BMSTR,SN+3); IF T≥4 THEN DRAWITEM(14,X,Y);END; IF T≤3 THEN BOOM(T,X,Y);END; IF T=0 THEN mid(BMSTR,SN,1)►NA; IF NA="A" THEN BMa:=BMa−1;END; IF NA="B" THEN BMb:=BMb−1;END; BMSTR:=left(BMSTR,SN-1)+mid(BMSTR,SN+7); SN:=SN-7; RECT_P(X*8,Y*8,X*8+7,Y*8+7); END; SN:=SN+7; ELSE BREAK; END; END; END; ADDBoom(N,X,Y) BEGIN BMSTR:=left(BMSTR,dim(BMSTR)-3)+N+"16"+IFTE(X≤9,"0"+X,X)+IFTE(Y≤9,"0"+Y,Y)+"END"; DRAWITEM(14,X,Y); //ADDFIRE(X,Y); END; MAPSH(X,Y,Mode) BEGIN //IF STOP //IF Mode≠4 THEN GET(X+1,Y) END; AI() BEGIN LOCAL LN:={0,1,0,−1,1,0,−1,0},RN,VX,VY,DN,IN; IF AIMODE=0 THEN Mx:=−1;My:=−1; RN:=2*INT(RANDOM(1,5)); VX:=LN(RN-1);VY:=LN(RN); FOR DN FROM 1 TO 13 DO GEIM(Bx+VX*DN,By+VY*DN)►IN; IF IN=0 THEN BREAK;END; IF IN=3 THEN Mx:=Bx+VX*DN;My:=By+VY*DN; BREAK;END; END; IF Mx≠−1 AND My≠−1 THEN AIMODE:=1;END; END; IF AIMODE=1 THEN RECT_P(Bx*8,By*8,Bx*8+7,By*8+7); IF Bx≠Mx THEN GEIM(Bx+SIGN(Mx-Bx),By)►IN; IF IN=15 OR IN=3 THEN Bx:=Bx+SIGN(Mx-Bx); ELSE IF BMb