DECLARE FUNCTION Algo% (x%) 2 CLEAR DEFINT A-Z RANDOMIZE TIMER VIEW PRINT 1 TO 25 COLOR 7, 1 CLS PLAY "MBl20" 'Musica inicio$ = "l8o3ccc#fo3bfl20" Parede$ = "o5c" ponto$ = "o4dg" bloco$ = "o5e" perdeu$ = "o3bafdc" bonus$ = "o4cdfab" LOCATE 1, 1: PRINT STRING$(80, 219); LOCATE 25, 1: PRINT STRING$(80, 219); FOR i = 2 TO 24 LOCATE i, 1: PRINT STRING$(i, 219); SPC(80 - 2 * i); STRING$(i, 219); NEXT LOCATE 25, 25: PRINT SPC(32); lf = 24 lg = 12 cg = lg + 1 tg = 82 - cg * 2 g1 = tg \ 2: g2 = g1 LOCATE lg, cg: PRINT STRING$(tg, 255); FOR i = 1 TO 20 DO lx = INT(RND * 21) + 3 cx = INT(RND * 80) + 1 LOOP UNTIL SCREEN(lx, cx) = 32 LOCATE lx, cx: PRINT ""; IF i MOD 4 THEN DO lx = INT(RND * 21) + 3 cx = INT(RND * 77) + 2 LOOP UNTIL SCREEN(lx, cx - 1) = 32 AND SCREEN(lx, cx) \ 10 <> 4 AND SCREEN(lx, cx + 1) \ 10 <> 4 AND SCREEN(lx, cx + 2) = 32 LOCATE lx, cx - 1: PRINT "("; : LOCATE , cx + 2: PRINT ")"; END IF NEXT MaxPort = 10 DIM Portal(MaxPort, 2, 1) FOR i = 1 TO MaxPort FOR j = 1 TO 2 DO lx = INT(RND * 21) + 3 cx = INT(RND * 78) + 2 LOOP UNTIL SCREEN(lx, cx) = 32 LOCATE lx, cx: PRINT "#"; Portal(i, j, 0) = lx Portal(i, j, 1) = cx NEXT NEXT DO l = INT(RND * 10) + 3 c = INT(RND * 60) + 10 LOOP UNTIL SCREEN(l, c) = 32 vl = SGN(INT(RND * 2) - .5) vc = INT(RND * 3) - 1 LOCATE l, c: COLOR 15, 1: PRINT "þ"; : COLOR 7, 1 PLAY inicio$ DO: LOOP UNTIL PLAY(0) = 0 achar$ = " " DO LOCATE 24, 1: PRINT USING "Pontos :####00"; pt; t! = TIMER: DO: LOOP UNTIL TIMER - t! >= .001 IF TIMER - tp! >= 2 THEN tp! = TIMER: DO: lx = INT(RND * 21) + 3: cx = INT(RND * 78) + 2: LOOP UNTIL SCREEN(lx, cx) = 32: LOCATE lx, cx: PRINT "²"; IF l = 25 THEN PLAY perdeu$: EXIT DO LOCATE l, c: PRINT achar$; IF f1 = 0 THEN LOCATE lf, 25: PRINT SPACE$(16); IF f2 = 0 THEN LOCATE lf, 41: PRINT SPACE$(16); IF l <> lg THEN IF g1 = tg \ 2 - 1 THEN LOCATE lg, cg: PRINT STRING$(tg \ 2, 255); IF g2 = tg \ 2 - 1 THEN LOCATE lg, cg + tg \ 2: PRINT STRING$(tg \ 2, 255); IF g1 < tg \ 2 - 1 THEN g1 = g1 + 1 LOCATE lg, cg: PRINT STRING$(g1, 205); "Û"; STRING$(tg - 1 - g1, 255); ELSEIF g2 < tg \ 2 - 1 THEN g2 = g2 + 1 LOCATE lg, cg: PRINT STRING$(tg - 1 - g2, 255); "Û"; STRING$(g2, 205); END IF END IF k$ = INKEY$ SELECT CASE k$ CASE "" CASE CHR$(0) + "S" IF l <> lf THEN LOCATE lf, 25: PRINT STRING$(15, 205); "Û"; SPACE$(16); f1 = -1 f2 = 0 END IF CASE CHR$(0) + "Q" IF l <> lf THEN LOCATE lf, 25: PRINT SPACE$(16); "Û"; STRING$(15, 205); f1 = 0 f2 = -1 END IF CASE CHR$(0) + "R" g1 = 0 g2 = tg \ 2 - 1 CASE CHR$(0) + "I" g1 = tg \ 2 - 1 g2 = 0 CASE " " vl = SGN(INT(RND * 2) - .5) vc = INT(RND * 3) - 1 pt = pt - 5 CASE "": EXIT DO END SELECT 1 p1 = Algo(SCREEN(l + vl, c)) p2 = Algo(SCREEN(l, c + vc)) p3 = Algo(SCREEN(l + vl, c + vc)) IF p1 AND vc = 0 THEN PLAY Parede$ IF SCREEN(l, c + 1) <> 32 THEN vc = -1 ELSEIF SCREEN(l, c - 1) <> 32 THEN vc = 1 ELSE vc = INT(RND * 3 - 1) END IF vl = -vl: GOTO 1 ELSEIF p1 AND p2 AND vc <> 0 THEN PLAY Parede$ vc = 0: vl = -vl: GOTO 1 ELSEIF p2 AND NOT p1 THEN PLAY Parede$ vc = -vc: GOTO 1 ELSEIF p1 AND NOT p2 THEN PLAY Parede$ vl = -vl: GOTO 1 ELSEIF p3 THEN PLAY Parede$ vl = -vl: vc = -vc: GOTO 1 ELSE l = l + vl: c = c + vc END IF p = SCREEN(l, c) IF (SCREEN(l, c - 1) = 40 AND SCREEN(l, c + 2) = 41) THEN PLAY bonus$ pt = pt + 10 LOCATE l, c - 1: PRINT " "; LOCATE l, c + 2: PRINT " "; DO lx = INT(RND * 21) + 3 cx = INT(RND * 77) + 2 LOOP UNTIL SCREEN(lx, cx - 1) = 32 AND SCREEN(lx, cx) \ 10 <> 4 AND SCREEN(lx, cx + 1) \ 10 <> 4 AND SCREEN(lx, cx + 2) = 32 LOCATE lx, cx - 1: PRINT "("; : LOCATE , cx + 2: PRINT ")"; vc = -vc ELSEIF (SCREEN(l, c - 2) = 40 AND SCREEN(l, c + 1) = 41) THEN PLAY bonus$ pt = pt + 10 LOCATE l, c - 2: PRINT " "; LOCATE l, c + 1: PRINT " "; DO lx = INT(RND * 21) + 3 cx = INT(RND * 77) + 2 LOOP UNTIL SCREEN(lx, cx - 1) = 32 AND SCREEN(lx, cx) \ 10 <> 4 AND SCREEN(lx, cx + 1) \ 10 <> 4 AND SCREEN(lx, cx + 2) = 32 LOCATE lx, cx - 1: PRINT "("; : LOCATE , cx + 2: PRINT ")"; vc = -vc END IF IF p = 8 THEN PLAY ponto$ pt = pt + 1: LOCATE l, c: PRINT " "; DO lx = INT(RND * 21) + 3 cx = INT(RND * 80) + 1 LOOP UNTIL SCREEN(lx, cx) = 32 LOCATE lx, cx: PRINT ""; vl = -vl: vc = -vc: GOTO 1 ELSEIF p > 175 AND p < 179 THEN PLAY bloco$ p = p - 1 IF p = 175 THEN p = 32 LOCATE l, c: PRINT CHR$(p); vl = SGN(INT(RND * 2) - .5): vc = INT(RND * 3) - 1: GOTO 1 ELSEIF p = 35 THEN FOR i = 1 TO MaxPort FOR j = 1 TO 2 IF Portal(i, j, 0) = l AND Portal(i, j, 1) = c THEN LOCATE l, c: COLOR 15, 1: PRINT "#"; al = l: ac = c l = Portal(i, 3 - j, 0): c = Portal(i, 3 - j, 1) LOCATE l, c: PRINT "#"; PLAY "MF" FOR z! = 100 TO 2000 STEP 500 SOUND z!, z! / 1000 NEXT PLAY "MB" COLOR 7, 1: LOCATE al, ac: PRINT "#"; : LOCATE l, c: PRINT "#"; GOTO 1 END IF NEXT NEXT ELSEIF p = 40 OR p = 41 THEN LOCATE l, c: COLOR 15, 1: PRINT "þ"; : COLOR 7, 1 t! = TIMER: DO: LOOP UNTIL TIMER - t! > 0 LOCATE l, c: PRINT CHR$(p); GOTO 1 END IF achar$ = CHR$(SCREEN(l, c)) LOCATE l, c: COLOR 15, 1: PRINT "þ"; : COLOR 7, 1 LOOP COLOR 7, 0 CLS IF l > 24 THEN PRINT "Voce perdeu" ELSE IF pt >= 1000 THEN PRINT "Voce ganhou" PRINT USING "Pontos :####00"; pt PRINT PRINT "Joga de novo [S/N] ? "; DO: a$ = UCASE$(INPUT$(1)): LOOP UNTIL a$ = "S" OR a$ = "N": PRINT a$; IF a$ = "S" THEN 2 SYSTEM FUNCTION Algo (x) Algo = (x = 219) OR (x > 47 AND x < 58) OR (x = 205) END FUNCTION