'Pixland 1.0 DECLARE SUB Inimigo() DECLARE SUB Item(l%,c%) DECLARE SUB Evento() DECLARE SUB PlayTheGame() DECLARE SUB DoLevel() DECLARE SUB Box(L1%,C1%,L2%,C2%,char$,f%) CLEAR,,16384 DEFINT A-Z RANDOMIZE TIMER '$DYNAMIC TYPE PlatDef xMin AS INTEGER xAct AS INTEGER xMax AS INTEGER yPos AS INTEGER Flag AS INTEGER'SGN=Dir ABS=Larg HVsel AS INTEGER'-1=Hor 0=Vert Refresh AS SINGLE Period AS SINGLE END TYPE TYPE EnemDef Li1 AS INTEGER Co1 AS INTEGER Li2 AS INTEGER Co2 AS INTEGER Li AS INTEGER Co AS INTEGER Dir AS INTEGER END TYPE TYPE Propried Tipo AS INTEGER Flag AS INTEGER Tempo AS SINGLE END TYPE DIM SHARED l,c,al,ac,Jump,Vidas,Pontos,Spd,Dire,Prop AS Propried,NulProp AS Propried,tsav! DIM SHARED Level,NextLevel,Escape,CanEnter DIM SHARED MaxPlat,Plat(0)AS PlatDef,Nave AS PlatDef,NavOn DIM SHARED MaxEn,Enemy AS EnemDef EndLevel=9 CLS WIDTH 40 ?"Pixland 1.0" ? ?" ";CHR$(2);" - Pixie" ?" O - ponto" ?" ? - chave" ?" * - portal (ativado pela chave)" ?" ";CHR$(24);" - espinho" ?"ßßßßß - plataforma" ?"ßÛßÛß - nave" ?" Ä - escada" ?"Pressione alguma tecla ..."; a$=INPUT$(1) DO COLOR 7,1 WIDTH 40 VIEW ?1 TO 25 CLS Level=1:Vidas=5:Pontos=0:Jump=0:Escape=0:MineOn=0:BombOn=0 Prop=NulProp DO NextLevel=0:CanEnter=0:NavOn=0:Spd=0:Dire=1 DoLevel al=l:ac=c PlayTheGame IF Vidas=0 THEN EXIT DO ELSE Level=Level+1 LOOP UNTIL Level=EndLevel OR Escape WIDTH 80 COLOR 7,0 CLS ?"Fim do jogo" IF Level=EndLevel THEN ?"Parab‚ns, vocˆ venceu !!" IF Vidas=0 THEN ?"Vocˆ perdeu ..." ?USING "Pontos :####00";Pontos ?"Continua [S/N] ? "; DO:a$=UCASE$(INPUT$(1)):LOOP UNTIL a$="S" OR a$="N" ?a$; LOOP UNTIL a$="N" SYSTEM '*Plataformas....................... Level1: DATA 2 'xMin xMax yPos Larg Horiz Period DATA 5,22,3,5,-1,.2 DATA 9,32,10,5,0,.2 '................................... Level2: DATA 3 'xMin xMax yPos Larg Horiz Period DATA 7,12,4,3,0,.25 DATA 4,12,12,3,0,.2 DATA 14,24,35,3,-1,.1 '................................... Level3: DATA 4 'xMin xMax yPos Larg Horiz Period DATA 3,35,5,3,0,.025 DATA 5,34,10,4,0,.05 DATA 7,33,15,5,0,.1 DATA 9,32,20,6,0,.2 '................................... Level4: DATA 2 'xMin xMax yPos Larg Horiz Period DATA 3,25,7,3,0,.1 DATA 15,33,17,5,0,.1 '................................... Level5: DATA 2 'xMin xMax yPos Larg Horiz Period DATA 4,15,3,4,-1,.1 DATA 10,20,10,1,0,.1 '................................... Level6: 'xMin xMax yPos Larg Horiz Period->Nave DATA 3,33,9,1,0,.1 DATA 0 '................................... Level7: DATA 5 'xMin xMax yPos Larg Horiz Period DATA 5,19,6,4,0,.1 DATA 15,33,10,4,0,.05 DATA 4,19,14,4,0,.15 DATA 15,33,18,4,0,.1 DATA 10,20,3,1,-1,.2 '................................... Level8: DATA 3 'xMin xMax yPos Larg Horiz Period DATA 8,19,19,2,0,.1 DATA 21,28,19,2,0,.15 DATA 3,28,12,1,0,.1 '*Inimigos.......................... En1: DATA 1 DATA 3,9,9,30 '................................... En2: DATA 1 DATA 16,4,21,12 '................................... En3: DATA 0 '................................... En4: DATA 0 '................................... En5: DATA 1 DATA 10,20,14,30 '................................... En6: DATA 0 '................................... En7: DATA 0 '................................... En8: DATA 1 DATA 13,4,15,32 '................................... SUB Box(L1,C1,L2,C2,char$,f) ff=-(f<>0) IF char$="" THEN char$="ÚÄ¿³ÙÄÀ³"+SPACE$(ff) char$=LEFT$(char$+SPACE$(8+ff),8+ff) DIM chrl(1 TO 8+ff)AS STRING*1 FOR i=1 TO 8+ff:chrl(i)=MID$(char$,i,1):NEXT ln=C2-C1-1 LOCATE L1,C1:?chrl(1);STRING$(ln,chrl(2));chrl(3); LOCATE L2,C1:?chrl(7);STRING$(ln,chrl(6));chrl(5); IF f THEN FOR l=L1+1 TO L2-1 LOCATE l,C1:?chrl(8);STRING$(ln,chrl(9));chrl(4); NEXT ELSE FOR l=L1+1 TO L2-1 LOCATE l,C1:?chrl(8); LOCATE l,C2:?chrl(4); NEXT END IF END SUB SUB DoLevel Box 2,2,25,38,STRING$(8,219),1 SELECT CASE Level CASE 1 RESTORE Level1 l=24:c=3 Box 3,33,24,35,STRING$(8,219),0 LOCATE 9,33:?" "; LOCATE 10,33:?" "; LOCATE 11,36:?STRING$(2,219); LOCATE 24,34:?" "; LOCATE 24,37:?"*"; LOCATE 6,13:?"O O O O"; LOCATE 7,12:?"O O O O"; LOCATE 4,34:?"?"; FOR i=5 TO 24 STEP 2 LOCATE i,34:?CHR$(196); NEXT LOCATE 12,9:?STRING$(20,24); LOCATE 24,5:?STRING$(25,24); CASE 2 RESTORE Level2 l=3:c=3 LOCATE 4,3:?STRING$(4,219); LOCATE 5,3:?STRING$(12,24); LOCATE 10,3:?STRING$(12,219); LOCATE 14,4:?STRING$(12,24); FOR i=3 TO 14 STEP 2 LOCATE 24,i:?CHR$(24); NEXT LOCATE 12,15:?"Û"; FOR i=3 TO 23:LOCATE i,16:?"Û Û";:NEXT LOCATE 3,23:?" "; LOCATE 7,25:?"ÛÛÛÛ?"; LOCATE 12,30:?"ÛÛÛÛ"; LOCATE 13,29:?STRING$(5,24); FOR i=10 TO 17:LOCATE i,34:?CHR$(24);:NEXT LOCATE 8,24:?STRING$(7,24); LOCATE 4,32:?STRING$(5,24); LOCATE 7,37:?CHR$(24); LOCATE 8,34:?"ÛÛÛ"; LOCATE 9,34:?"OOO"; FOR i=5 TO 24 STEP 2 LOCATE i,20:?"O ";CHR$(196); NEXT LOCATE 3,37:?"*"; CASE 3 RESTORE Level3 l=24:c=20 LOCATE 24,3:?STRING$(15,24); LOCATE 21,23:?STRING$(15,24); LOCATE 16,15:?STRING$(5,24); LOCATE 11,3:?STRING$(12,24); LOCATE 3,3:?"*"; LOCATE 12,32:?"?"; FOR i=1 TO 25 DO:xl=INT(RND*22)+3:xc=INT(RND*35)+3:LOOP UNTIL SCREEN(xl,xc)=32 LOCATE xl,xc:?"O"; NEXT CASE 4 RESTORE Level4 l=11:c=20 LOCATE 12,3:?STRING$(35,219); LOCATE 12,20:?"Ä"; LOCATE 3,3:?"*"; LOCATE 13,37:?"?"; LOCATE 24,3:?STRING$(35,24); LOCATE 8,10:?"O O OO O O OO O O"; CASE 5 RESTORE Level5 l=3:c=4 LOCATE 7,7:?STRING$(30,219); FOR i=8 TO 24:LOCATE i,7:?"Û";:NEXT LOCATE 24,3:?STRING$(4,24); LOCATE 15,20:?STRING$(10,219);STRING$(8,24); LOCATE 12,7:?" "; LOCATE 22,7:?" "; LOCATE 24,8:?CHR$(24); LOCATE 20,8:?STRING$(20,219); LOCATE 19,9:?"?"; LOCATE 9,12:?"*"; LOCATE 3,10:?"O O O O O O O O O O"; FOR i=9 TO 18:LOCATE i,9:?CHR$(24);:NEXT CASE 6,12 RESTORE Level6 l=24:c=3 FOR i=1 TO 12 xl=INT(RND*6)+3:xc=INT(RND*35)+3 LOCATE xl,xc SELECT CASE i CASE 1 TO 10:?"O"; CASE 11:?"*"; CASE 12:?"?"; END SELECT NEXT FOR i=1 TO 20 DO:xl=INT(RND*12)+13:xc=INT(RND*35)+3:LOOP UNTIL SCREEN(xl,xc)=32 LOCATE xl,xc:?CHR$(24); NEXT NavOn=-1 READ Nave.xMin,Nave.xMax,Nave.yPos,Nave.Flag,Nave.HVsel,Nave.Period Nave.xAct=Nave.xMin CASE 7 RESTORE Level7 l=5:c=3 LOCATE 6,3:?"ÛÛ"; LOCATE 7,4:?CHR$(24); LOCATE 9,3:?CHR$(24); LOCATE 24,3:?STRING$(35,24); LOCATE 12,37:?"?" LOCATE 7,3:?"*"; FOR i=1 TO 25 DO:xl=INT(RND*22)+3:xc=INT(RND*35)+3:LOOP UNTIL SCREEN(xl,xc)=32 LOCATE xl,xc:?"O"; NEXT CASE 8 RESTORE Level8 l=24:c=3 FOR x=1 TO 5 LOCATE 25-x,5+x:?"ÛÛ";SPACE$(26-2*x);"ÛÛ"; LOCATE 23-x,35-x:?CHR$(24); NEXT LOCATE 24,8:?STRING$(24,24); FOR x=6 TO 23 LOCATE x,35:?"Û"; IF x MOD 8=0 THEN ?" "; IF x MOD 4=0 THEN ?"Ä"; NEXT LOCATE 5,16:?STRING$(20,219); LOCATE 8,16:?"O O O O O O O O"; LOCATE 9,15:?"O O O O O O O O O"; LOCATE 10,3:?STRING$(20,219);"?"; LOCATE 11,3:?"*"; Item 5,5 END SELECT DO:xl=INT(RND*12)+13:xc=INT(RND*35)+3:LOOP UNTIL SCREEN(xl,xc)=32 LOCATE xl,xc:?CHR$(254) READ MaxPlat REDIM Plat(MaxPlat)AS PlatDef FOR i=1 TO MaxPlat READ Plat(i).xMin,Plat(i).xMax,Plat(i).yPos,Plat(i).Flag,Plat(i).HVsel,Plat(i).Period Plat(i).xAct=Plat(i).xMin NEXT SELECT CASE Level CASE 1:RESTORE En1 CASE 2:RESTORE En2 CASE 3:RESTORE En3 CASE 4:RESTORE En4 CASE 5:RESTORE En5 CASE 6:RESTORE En6 CASE 7:RESTORE En7 CASE 8:RESTORE En8 END SELECT READ MaxEn IF MaxEn THEN READ Enemy.Li1,Enemy.Co1,Enemy.Li2,Enemy.Co2 Enemy.Li=Enemy.Li1:Enemy.Co=Enemy.Co1:Enemy.Dir=1 END IF END SUB REM $STATIC SUB Evento p=SCREEN(l,c) SELECT CASE p CASE 219,33:l=al:c=ac:EXIT SUB CASE 194 IF SCREEN(l+1,c)=179 THEN LOCATE l+1,c:?CHR$(194); LOCATE l+2,c-1:?"  "; ELSE l=al:c=ac:EXIT SUB END IF CASE 196,223:l=l+(l-al+(al=l)):Jump=0:Evento:EXIT SUB CASE 24:Jump=5+5*(l3 Prop.Tempo=TIMER:Prop.Tipo=k:Prop.Flag=0:tsav!=0 CASE ELSE:EXIT SUB END SELECT LOCATE l,c:?" "; END SUB SUB Inimigo SHARED ten!,MineL,MineC,MineD,tm!,MineOn IF TIMER-ten!>=.1 THEN ten!=TIMER el=Enemy.Li:ec=Enemy.Co:ed=Enemy.Dir LOCATE el,ec:?" "; ec=ec-(ed=1)+(ed=3) el=el-(ed=2)+(ed=4) IF ed MOD 2=0 THEN tt=(el=Enemy.Li1 OR el=Enemy.Li2)ELSE tt=(ec=Enemy.Co1 OR ec=Enemy.Co2) IF tt THEN ed=ed MOD 4+1 LOCATE el,ec:?CHR$(1); Enemy.Li=el:Enemy.Co=ec:Enemy.Dir=ed IF INT(RND*5)=0 AND MineOn=0 THEN MineL=el:MineOn=-1:MineD=SGN(c-ec) IF MineD=0 THEN MineD=INT(RND*2)*2-1 MineC=ec+MineD END IF END IF IF MineOn THEN IF TIMER-tm!>=.05 THEN tm!=TIMER IF SCREEN(MineL,MineC+MineD)=32 THEN LOCATE MineL,MineC:?" "; MineC=MineC+MineD LOCATE MineL,MineC:?CHR$(15); ELSE MineOn=0 FOR ml=MineL-1 TO MineL+1 FOR mc=MineC-1 TO MineC+1 p=SCREEN(ml,mc) IF p=2 THEN Vidas=Vidas-1-(Prop.Tipo=2) ELSEIF p=15 THEN LOCATE ml,mc:?" "; END IF NEXT mc,ml END IF END IF END IF END SUB SUB Item(l,c) LOCATE l,c-1:?"ÛÂÛ" LOCATE l+1,c-1:?"Û³Û" LOCATE l+2,c-1:?"Û±Û" LOCATE l+3,c-1:?"ÛÛÛ" END SUB SUB PlayTheGame LOCATE l,c:?CHR$(2); DO LOCATE 1,2:?USING "Nivel:## Pts:###00 Vidas:#";Level;Pontos;Vidas; IF Prop.Tipo>0 THEN ?USING " Tempo:##s";30-TIMER+Prop.Tempo; ELSE ?" "; END IF al=l:ac=c SELECT CASE INKEY$ CASE CHR$(27):Escape=-1:EXIT DO CASE CHR$(9) SWAP Prop.Flag,Prop.Tipo IF Prop.Tipo>0 AND tsav!>0 THEN Prop.Tempo=Prop.Tempo+(TIMER-tsav!) ELSE tsav!=TIMER END IF CASE CHR$(0)+"H",CHR$(0)+"G": IF SCREEN(l+1,c)<>32 THEN IF Prop.Tipo=3 THEN Jump=10 ELSE Jump=5 END IF IF Prop.Tipo=1 THEN l=l-1:Evento:Jump=0 CASE CHR$(0)+"P",CHR$(0)+"O":Jump=0:l=l+1:Evento CASE CHR$(0)+"K",CHR$(0)+"S":Dire=-1:Mov=-1 CASE CHR$(0)+"M",CHR$(0)+"Q":Dire=1:Mov=-1 CASE " ":Spd=NOT Spd END SELECT IF Prop.Tipo>0 THEN IF TIMER-Prop.Tempo>30 THEN Prop.Tipo=0 IF Spd THEN Mov=-1 IF Mov THEN IF TIMER-tc!>=.04 OR NOT Spd THEN tc!=TIMER c=c+Dire:Mov=0 IF SCREEN(l,c)=219 THEN IF SCREEN(l-1,c)<>219 THEN l=l-1 ELSEIF SCREEN(l+1,c)<>219 THEN l=l+1 ELSE c=ac+Spd*Dire:Dire=-Dire END IF END IF Evento END IF END IF FOR i=1 TO MaxPlat IF TIMER-Plat(i).Refresh>=Plat(i).Period THEN Plat(i).Refresh=TIMER x=Plat(i).xAct:y=Plat(i).yPos:fl=Plat(i).Flag:d=SGN(fl):t=ABS(fl) IF fl<0 THEN xM=Plat(i).xMin ELSE xM=Plat(i).xMax ho=Plat(i).HVsel IF ho THEN LOCATE x,y ELSE LOCATE y,x ?SPACE$(t); ax=x x=x+d IF x*d>xM*d THEN x=xM-d:d=-d:Plat(i).Flag=d*t IF ho THEN IF l=ax-1 AND c>=y AND c=ax AND c=Nave.Period THEN Nave.Refresh=TIMER x=Nave.xAct:y=Nave.yPos:d=Nave.Flag IF d<0 THEN xM=Nave.xMin ELSE xM=Nave.xMax LOCATE y,x:?" "; ax=x x=x+d IF x*d>xM*d THEN x=xM-d:d=-d:Nave.Flag=d IF l=y-1 AND c>=ax AND c=.1 THEN tB!=TIMER IF SCREEN(BombL+1,BombC)=32 THEN LOCATE BombL,BombC:?" "; BombL=BombL+1 LOCATE BombL,BombC:?"Û"; ELSE BombOn=0 END IF END IF END IF END IF IF TIMER-tj!>=.04 OR Jump=5 THEN tj!=TIMER p=SCREEN(l+1,c) IF Jump THEN Jump=Jump-1:l=l-1 ELSEIF p=32 AND Prop.Tipo<>1 THEN l=l+1 ELSEIF INSTR("þO?*123456789",CHR$(p))>0 AND Prop.Tipo<>1 THEN l=l+1 Evento END IF Evento END IF IF l<>al OR c<>ac THEN LOCATE al,ac:?" "; LOCATE l,c:?CHR$(2); END IF LOOP UNTIL Vidas=0 OR NextLevel END SUB