DECLARE FUNCTION Vazio%(n%) DECLARE SUB Nivel(n%) DEFINT A-Z RANDOMIZE TIMER VIEW ?1 TO 25 TYPE lemm Lin AS INTEGER Col AS INTEGER Dir AS INTEGER Funcao AS INTEGER Vivo AS INTEGER Texp AS INTEGER END TYPE TYPE alemm Lin AS INTEGER Col AS INTEGER Vivo AS INTEGER END TYPE DIM Lemming(1 TO 16)AS lemm DIM ALemming(1 TO 16)AS alemm Pts!=0 FOR nl=0 TO 9 dly!=.2 FOR i=1 TO 16 Lemming(i).Lin=10-10*i Lemming(i).Col=5 Lemming(i).Dir=1 Lemming(i).Funcao=0 Lemming(i).Vivo=-1 Lemming(i).Texp=0 NEXT Nivel nl LOCATE 25,2:?"0=normal 1=parar 2/3=cavar ";CHR$(26);"/";CHR$(26);" 4=explodir 5=escalar 6,7=ponte"; DO cs=0:cn=0 FOR i=1 TO 16 LOCATE 24,5*(i-1)+1 IF Lemming(i).Vivo THEN IF Lemming(i).Funcao=4 THEN COLOR 15,1 ?USING "!x:#";CHR$(64+i);5-Lemming(i).Texp\5; COLOR 7,0 ELSE ?USING "!->#";CHR$(64+i);Lemming(i).Funcao; END IF ELSE IF Lemming(i).Funcao>9 THEN COLOR 15,1 ?"!!!!"; COLOR 7,0 cs=cs+1 ELSE ?"...."; cn=cn+1 END IF END IF IF i<16 THEN ?"³"; NEXT IF cs+cn=16 THEN EXIT DO t!=TIMER IF isel=0 THEN LOCATE 23,2:?"Lemming : Funcao : "; DO k$=UCASE$(INKEY$) IF isel>0 THEN IF NOT Lemming(isel).Vivo THEN isel=0 SELECT CASE k$ CASE "":EXIT FOR CASE " ":dly!=0 CASE "A" TO "P isel=ASC(k$)-64 IF Lemming(isel).Vivo THEN LOCATE 23,2:?SPACE$(78); LOCATE 23,2:?"Lemming :";k$;" Funcao :"; ELSE isel=0 END IF CASE "0" TO "7 IF isel>0 THEN LOCATE 23,27:fc=VAL(k$):?fc; BEEP Lemming(isel).Funcao=fc Lemming(isel).Texp=0 END IF CASE CHR$(13) IF fc>0 AND isel>0 THEN Lemming(isel).Funcao=fc Lemming(isel).Texp=0 END IF CASE " CASE ELSE:BEEP END SELECT LOOP UNTIL TIMER-t!>=dly! 'novapos FOR i=1 TO 16 ALemming(i).Lin=Lemming(i).Lin ALemming(i).Col=Lemming(i).Col ALemming(i).Vivo=Lemming(i).Vivo IF Lemming(i).Vivo THEN l=Lemming(i).Lin c=Lemming(i).Col d=Lemming(i).Dir f=Lemming(i).Funcao IF f=4 THEN Lemming(i).Texp=Lemming(i).Texp+1 IF Lemming(i).Texp>25 THEN Lemming(i).Vivo=0 l=l-1 c=c-1 IF l<1 THEN l=1 IF c<1 THEN c=1 FOR k=0 TO 2:LOCATE l+k,c:?" ";:NEXT GOTO 1 END IF ELSEIF f=5 THEN IF Lemming(i).Texp=-1 THEN Lemming(i).Texp=0:GOTO 2 END IF IF l>0 THEN px=SCREEN(l+1,c) IF Vazio(px)OR px=35 THEN Lemming(i).Lin=l+1 IF px=35 THEN Lemming(i).Funcao=999:Lemming(i).Vivo=0 IF l=22 THEN Lemming(i).Vivo=0 ELSEIF f=3 THEN Lemming(i).Texp=(Lemming(i).Texp+1)MOD 2 IF Lemming(i).Texp=1 THEN Lemming(i).Lin=l+1 ELSE Lemming(i).Col=c+d IF SCREEN(l,c+d)=35 THEN Lemming(i).Funcao=999:Lemming(i).Vivo=0:GOTO 1 END IF IF SCREEN(l,c)=35 THEN Lemming(i).Funcao=999:Lemming(i).Vivo=0 IF l=23 THEN Lemming(i).Vivo=0 GOTO 1 ELSEIF f<>1 THEN 2 Lemming(i).Col=c+d IF f=7 OR f=6 THEN Lemming(i).Texp=Lemming(i).Texp+1 IF Lemming(i).Texp=5 THEN Lemming(i).Funcao=0 f=0 ELSEIF f=7 AND l>1 THEN IF Vazio(SCREEN(l-1,c+d))THEN l=l-1 Lemming(i).Lin=l END IF END IF END IF px=SCREEN(l,c+d) IF NOT Vazio(px)THEN IF px=35 THEN Lemming(i).Funcao=999:Lemming(i).Vivo=0 ELSEIF px=176 AND f<>2 THEN Lemming(i).Lin=Lemming(i).Lin-1 l=l-1 ELSE SELECT CASE f CASE 2 CASE 3 Lemming(i).Lin=l+1 CASE 5 Lemming(i).Col=c IF l>1 THEN IF Vazio(SCREEN(l-1,c))THEN Lemming(i).Lin=l-1 ELSE Lemming(i).Funcao=0:f=0 END IF ELSE Lemming(i).Funcao=0:f=0 END IF Lemming(i).Texp=-1 CASE 0,4,6,7 Lemming(i).Col=c:Lemming(i).Dir=-d END SELECT END IF END IF END IF ELSE Lemming(i).Lin=l+1 END IF END IF 1 NEXT 'apagar FOR i=1 TO 16 IF ALemming(i).Vivo THEN l=ALemming(i).Lin IF l>0 THEN LOCATE l,ALemming(i).Col:?" "; END IF NEXT 'mostrar FOR i=1 TO 16 IF Lemming(i).Vivo THEN l=Lemming(i).Lin IF l>0 THEN f=Lemming(i).Funcao c=Lemming(i).Col LOCATE l,c IF f=1 THEN ?"±";ELSE ?;CHR$(64+i); IF(f=6 OR f=7)AND(c>1 AND c<80)THEN IF SCREEN(l+1,c)<>35 THEN LOCATE l+1,c:?CHR$(190-2*f); END IF END IF NEXT LOOP CLS ?"WendelSoft Lemmings 1.0 ?"Nivel";nl ?"Chegaram :";cs ?"Nao chegaram :";cn SELECT CASE cs CASE 16:Pts!=Pts!+100 CASE 12 TO 15:Pts!=Pts!+50 CASE 8 TO 11:Pts!=Pts!+10 CASE 4 TO 7 CASE 1 TO 3:Pts!=Pts!-10 CASE 0:Pts!=Pts!-50 END SELECT ?"Pontos :";Pts! ? ?"Pressione alguma tecla para continuar a$=INPUT$(1) NEXT CLS ?"Quer jogar de novo [S/N]?"; DO:a$=UCASE$(INPUT$(1)):LOOP UNTIL a$="S" OR a$="N IF a$="S" THEN RUN CLS SYSTEM SUB Nivel(n) CLS SELECT CASE n CASE 0 FOR i=18 TO 22 LOCATE i,2:?STRING$(78,219); NEXT FOR i=14 TO 17 LOCATE i,2:?STRING$(58,219);SPACE$(10);STRING$(10,219); NEXT LOCATE 13,78:?"#"; CASE 1 LOCATE 14,2:?STRING$(20,219); LOCATE 14,70:?STRING$(10,219); FOR i=1 TO 21:LOCATE i,40:?"Û";:NEXT LOCATE 22,2:?STRING$(78,219); LOCATE 13,78:?"#"; CASE 2 FOR i=10 TO 15:LOCATE i,2:?STRING$(78,219);:NEXT FOR i=16 TO 21:LOCATE i,2:?"Û";SPACE$(76);"Û";:NEXT LOCATE 22,2:?STRING$(78,219); LOCATE 17,78:?"#"; CASE 3 LOCATE 5,1:?STRING$(78,219); LOCATE 14,70:?STRING$(10,219); LOCATE 13,79:?"Û"; LOCATE 14,5:?"#"; LOCATE 15,5:?"ÛÛ"; CASE 4 FOR i=1 TO 22 LOCATE i,2 SELECT CASE i MOD 3 CASE 0:?"°°Û Û°°"; CASE 1:?"²°Û Û°²"; CASE 2:?"²²Û Û²²"; END SELECT NEXT LOCATE 22,5:?"Û"; LOCATE 14,40:?STRING$(30,219); FOR i=2 TO 13 LOCATE i,40:?"Û"; LOCATE i,69:?"Û"; NEXT LOCATE 1,40:?"Û"; LOCATE 2,70:?STRING$(10,219); LOCATE 1,79:?"#"; CASE 5 LOCATE 2,78:?"# FOR i=1 TO 22 LOCATE i,2:?"Û"; LOCATE i,79:?"Û"; NEXT FOR i=1 TO 200 DO l=INT(RND*22)+1 c=INT(RND*76)+3 LOOP UNTIL Vazio(SCREEN(l,c)) LOCATE l,c:?"Û"; NEXT CASE 6 FOR i=2 TO 21 LOCATE i,2:?STRING$(30,219); LOCATE i-1,50:?STRING$(25,219); NEXT DO l=INT(RND*22)+1 c=INT(RND*76)+3 LOOP WHILE Vazio(SCREEN(l,c)) LOCATE l,c:?"#"; CASE 7 LOCATE 20,2:?STRING$(10,219);SPC(20);STRING$(10,219); FOR i=1 TO 19 LOCATE i,35:?"ÛÛ ÛÛ Û"; NEXT LOCATE 1,37:?"ÛÛÛÛ"; LOCATE 2,38:?" "; LOCATE 15,42:?STRING$(30,219); LOCATE 14,71:?"#"; LOCATE 19,2:?"Û"; CASE 8 FOR i=1 TO 15 LOCATE i,4:?"Û Û"; LOCATE i,40:?"Û"; NEXT FOR i=16 TO 22 LOCATE i,40:?"Û"; NEXT LOCATE 16,40:?STRING$(10,219); LOCATE 15,49:?"Û"; LOCATE 18,55:?"Û";SPC(18);"Û"; LOCATE 19,55:?STRING$(20,219); LOCATE 12,60:?STRING$(10,219); LOCATE 11,69:?"Û"; LOCATE 7,41:?STRING$(16,219); LOCATE 4,50:?STRING$(30,219); LOCATE 3,79:?"#"; LOCATE 18,5:?"Û"; CASE 9 FOR i=1 TO 10 c=INT(RND*50)+20 l=INT(RND*10)+1 FOR j=l TO l+10 LOCATE j,c:?"Û"; NEXT NEXT LOCATE 18,5:?"ÛÛÛÛ"; LOCATE 10,74:?"ÛÛÛÛ#"; END SELECT END SUB FUNCTION Vazio(n) Vazio=(n<>219 AND n<>176 AND n<>177 AND n<>178 AND n<>35) END FUNCTION