DECLARE SUB Bomba(li%,co%) DECLARE FUNCTION Continua%() DECLARE SUB MoveBarra() DECLARE SUB Nivel(n%) CLEAR,,16384 DEFINT A-Z DIM lp(1 TO 2),cp(1 TO 2),fly(1 TO 2),flag(1 TO 2),tflag!(1 TO 2),x(1 TO 2),Mx(1 TO 2),getkey(1 TO 2) RANDOMIZE TIMER TYPE VBT lin AS INTEGER col AS INTEGER col1 AS INTEGER col2 AS INTEGER tam AS INTEGER dir AS INTEGER END TYPE TYPE HBT lin AS INTEGER col AS INTEGER lin1 AS INTEGER lin2 AS INTEGER tam AS INTEGER dir AS INTEGER END TYPE DIM SHARED VBar(1 TO 5)AS VBT,HBar(1 TO 5)AS HBT,VMax,HMax CLS VIEW ?1 TO 25 Lv=1 Nivel Lv tp!=TIMER DO LOCATE 1,1:?USING "Pontos 1: ##### Pontos 2: ##### ";pts(1);pts(2); IF TIMER-tp!>=2 THEN DO l=INT(RND*24)+2 c=INT(RND*80)+1 LOOP UNTIL SCREEN(l,c)=32 LOCATE l,c:?"þ"; DO l=INT(RND*24)+2 c=INT(RND*80)+1 LOOP UNTIL SCREEN(l,c)=32 LOCATE l,c:?"#"; DO l=INT(RND*24)+2 c=INT(RND*80)+1 LOOP UNTIL SCREEN(l,c)=32 LOCATE l,c:?""; DO l=INT(RND*24)+2 c=INT(RND*80)+1 LOOP UNTIL SCREEN(l,c)=32 LOCATE l,c:?""; DO l=INT(RND*24)+2 c=INT(RND*80)+1 LOOP UNTIL SCREEN(l,c)=32 LOCATE l,c:?""; tp!=TIMER END IF IF HMax>0 OR VMax>0 THEN atl=atl+1 IF atl>5 THEN atl=0:MoveBarra END IF k$=INKEY$ FOR i=1 TO 2 alp(i)=lp(i):acp(i)=cp(i) NEXT SELECT CASE k$ CASE "W","w": IF fly(1)THEN lp(1)=lp(1)-1 ELSE IF SCREEN(lp(1)+1,cp(1))<>32 THEN flag(1)=-1:x(1)=0:Mx(1)=5 END IF CASE "S","s":IF flag(1)THEN flag(1)=0 ELSE lp(1)=lp(1)+1 CASE "A","a":cp(1)=cp(1)-1 CASE "D","d":cp(1)=cp(1)+1 CASE CHR$(0)+"G IF fly(2)THEN lp(2)=lp(2)-1 ELSE IF SCREEN(lp(2)+1,cp(2))<>32 THEN flag(2)=-1:x(2)=0:Mx(2)=5 END IF CASE CHR$(0)+"O":IF flag(2)THEN flag(2)=0 ELSE lp(2)=lp(2)+1 CASE CHR$(0)+"S":cp(2)=cp(2)-1 CASE CHR$(0)+"Q":cp(2)=cp(2)+1 CASE " ":IF NOT(flag(1)OR qda(1))AND pts(1)>=10 THEN pts(1)=pts(1)-1:flag(1)=-1:x(1)=0:Mx(1)=10 CASE CHR$(13):IF NOT(flag(2)OR qda(2))AND pts(2)>=10 THEN pts(2)=pts(2)-1:flag(2)=-1:x(2)=0:Mx(2)=10 CASE "":EXIT DO END SELECT FOR i=1 TO 2 IF flag(i)THEN qda(i)=0 lp(i)=lp(i)-1 x(i)=x(i)+1 flag(i)=x(i)24 THEN lp(i)=24 IF cp(i)<1 THEN cp(i)=1 IF cp(i)>80 THEN cp(i)=80 pxl=SCREEN(lp(i),cp(i)) IF pxl=178 OR pxl=177 THEN LOCATE lp(i),cp(i):?CHR$(pxl-1); lp(i)=alp(i):cp(i)=acp(i) ELSEIF pxl=176 THEN LOCATE lp(i),cp(i):?" "; ELSEIF pxl=186 OR pxl=205 THEN IF getkey(i)THEN getkey(i)=0 LOCATE lp(i),cp(i):?" "; ELSE BEEP lp(i)=alp(i):cp(i)=acp(i) END IF ELSE GOSUB PixDefs END IF IF NOT fly(i)AND Mx(i)=0 THEN pxl=SCREEN(lp(i)+1,cp(i)) SELECT CASE pxl CASE 32:IF NOT flag(i)THEN lp(i)=lp(i)+1:qda(i)=-1 CASE 223,254,6,64,35,15,24,4:lp(i)=lp(i)+1:qda(i)=-1:GOSUB PixDefs CASE ELSE:qda(i)=0 END SELECT END IF IF lp(i)<>alp(i)OR cp(i)<>acp(i)THEN IF NOT fly(i)THEN pxl=SCREEN(alp(i)+1,acp(i)) SELECT CASE pxl CASE 178,177:LOCATE alp(i)+1,acp(i):?CHR$(pxl-1); CASE 176:LOCATE alp(i)+1,acp(i):?" "; END SELECT END IF pxl=SCREEN(alp(i),acp(i)) IF pxl<>45 AND pxl<>223 THEN LOCATE alp(i),acp(i):?" "; LOCATE lp(i),cp(i):?CHR$(3-i); END IF IF NOT flag(i)THEN Mx(i)=0 NEXT FOR i=1 TO 2 LOCATE lp(i),cp(i):?CHR$(3-i); NEXT t!=TIMER:DO:LOOP UNTIL TIMER-t!>.02 LOOP CLS IF Continua THEN RUN SYSTEM PixDefs: SELECT CASE pxl CASE 32,45 CASE i:lp(i)=lp(i)-1 CASE 20:getkey(i)=-1:LOCATE lp(i),cp(i):?" "; CASE 254 FOR k=1000 TO 4000 STEP 500 SOUND k,1 NEXT Bomba lp(i),cp(i) flag(i)=-1:x(i)=0:Mx(i)=20 CASE 15:SOUND 600,4:pts(i)=pts(i)+1 CASE 4:IF SCREEN(lp(i)+1,cp(i))<>64 THEN LOCATE lp(i)+1,cp(i):?"-";:SOUND 2000,4 CASE 6 fly(i)=-1:flag(i)=0:tfly!(i)=TIMER FOR j=1700 TO 3500 STEP 300:SOUND j,1:NEXT CASE 24 flag(i)=-1:x(i)=0:Mx(i)=20 FOR j=700 TO 1200 STEP 120:SOUND j,1:NEXT CASE 35 SOUND 800,4 flag(i)=-1:x(i)=0:Mx(i)=1 pts(i)=pts(i)-1 CASE 64 Lv=Lv+1 Nivel Lv FOR j=1 TO 2 alp(j)=lp(j):acp(j)=cp(j) fly(j)=0:flag(j)=0:pts(j)=pts(j)+10 NEXT atl=0 CASE 223 lp(i)=lp(i)-1:qda(i)=0 CASE IS>32:lp(i)=alp(i):cp(i)=acp(i) END SELECT IF pxl=15 OR pxl=35 OR pxl=4 OR pxl=24 THEN LOCATE lp(i),cp(i):?" "; RETURN SUB Bomba(li,co) STATIC ctd LOCATE li,co:?" "; ctd=ctd+1 IF ctd=50 THEN EXIT SUB FOR l=li-2 TO li+2 FOR c=co-2 TO co+2 IF l>2 AND l<25 AND c>0 AND c<81 THEN px=SCREEN(l,c) IF px=254 THEN Bomba l,c ELSEIF px<>64 AND px<>2 AND px<>20 AND px<>223 THEN LOCATE l,c:?" "; END IF END IF NEXT NEXT ctd=ctd-1 END SUB FUNCTION Continua WHILE INKEY$<>"":WEND DO INPUT "Continua ? [S/N]",k$ k$=UCASE$(k$) LOOP UNTIL k$="S" OR k$="N Continua=k$="S END FUNCTION SUB MoveBarra IF VMax THEN FOR i=1 TO VMax l=VBar(i).lin c1=VBar(i).col1 c=VBar(i).col c2=VBar(i).col2 t=VBar(i).tam D=VBar(i).dir LOCATE l,c:?SPACE$(t); c=c+D IF c>c2 OR cl2 OR l0 THEN FOR i=1 TO VMax l=VBar(i).lin c1=VBar(i).col1 c2=VBar(i).col2 IF VBar(i).dir=1 THEN c=c1 ELSE c=c2 VBar(i).col=c LOCATE l,c1:?SPACE$(c2-c1+tam); LOCATE l,c:?STRING$(VBar(i).tam,223); NEXT END IF IF HMax>0 THEN FOR i=1 TO HMax l1=HBar(i).lin1 l2=HBar(i).lin2 IF HBar(i).dir=1 THEN l=l1 ELSE l=l2 HBar(i).lin=l c=HBar(i).col FOR j=l1 TO l2 LOCATE j,c:?SPACE$(HBar(i).tam); NEXT LOCATE l,c:?STRING$(HBar(i).tam,223); NEXT END IF END SUB