DECLARE SUB NewItem (A%, b%) DECLARE SUB NextcIdx () DEFINT A-Z CONST Max = 20 RANDOMIZE TIMER TYPE Location Lin AS INTEGER Col AS INTEGER Jump AS INTEGER END TYPE DIM Cmd(1 TO 1000) AS INTEGER, cIdx AS INTEGER DIM Posit(1 TO Max) AS Location DIM Index AS INTEGER DO WIDTH 40 VIEW PRINT COLOR 7, 1 CLS DO INPUT "Modo (1-2) :", mode LOOP UNTIL mode >= 1 AND mode <= 2 CLS Index = 1 cIdx = 0 Posit(1).Lin = 24 Posit(1).Col = 2 Posit(1).Jump = 0 LOCATE 2, 1: PRINT STRING$(40, 219); FOR i = 3 TO 24: LOCATE i, 1: PRINT "Û"; SPC(38); "Û"; : NEXT LOCATE 25, 1: PRINT STRING$(40, 219); LOCATE 24, 2: PRINT ""; SELECT CASE mode CASE 1 FOR i = 1 TO 120 NewItem 219, 32 NEXT CASE 2 j = 6 FOR i = 5 TO 20 STEP 5 j = 8 - j LOCATE i, j: PRINT STRING$(34, 219); NEXT FOR i = 1 TO 25 NewItem 32, 219 NEXT END SELECT FOR i = 1 TO 10 NewItem 15, 32 NEXT ti = 10 tini! = TIMER treg! = TIMER DO tsec! = TIMER - tini! min! = tsec! \ 60 sec! = tsec! MOD 60 LOCATE 1, 2: PRINT USING "Tempo:##:## Item:## Cont.Reg.:##"; min!; sec!; ti; 5 - TIMER + treg!; IF TIMER - treg! >= 5 THEN treg! = TIMER: NewItem 15, 32: ti = ti + 1 END IF NextcIdx Cmd(cIdx) = 0 SELECT CASE INKEY$ CASE CHR$(0) + "H": Cmd(cIdx) = 1 CASE CHR$(0) + "P": Cmd(cIdx) = 2 CASE CHR$(0) + "M": Cmd(cIdx) = 3 CASE CHR$(0) + "K": Cmd(cIdx) = 4 CASE CHR$(27): tsec! = 0: EXIT DO END SELECT IF Index < Max THEN IF cIdx MOD 20 = 1 AND cIdx > 1 THEN Index = Index + 1 Posit(Index).Lin = 24 Posit(Index).Col = 2 Posit(Index).Jump = 0 END IF END IF t! = TIMER IF cIdx > 0 THEN idxJr = cIdx FOR i = 1 TO Index l = Posit(i).Lin c = Posit(i).Col j = Posit(i).Jump al = l ac = c SELECT CASE Cmd(idxJr) CASE 1: IF SCREEN(l + 1, c) > 32 THEN j = 5 CASE 2: j = 0 CASE 3: c = c + 1: IF c = 81 THEN c = 80 CASE 4: c = c - 1: IF c = 0 THEN c = 1 END SELECT p = SCREEN(l, c) IF (p = 1 AND i > 1) OR (p = 2 AND i = 1) THEN EXIT DO idxJr = idxJr - 20: IF idxJr < 1 THEN idxJr = idxJr + 1000 p = SCREEN(l + 1, c) IF j > 0 THEN j = j - 1 l = l - 1 ELSEIF p = 32 OR p = 15 THEN l = l + 1 ELSEIF (p = 1 AND i > 1) OR (p = 2 AND i = 1) THEN EXIT DO END IF p = SCREEN(l, c) IF p > 32 THEN l = al: c = ac IF p = 15 THEN ti = ti - 1: PLAY "MBl60o4cdef": treg! = TIMER: LOCATE l, c: PRINT " "; IF al <> l OR ac <> c THEN LOCATE l, c IF i = 1 THEN PRINT ""; ELSE PRINT ""; IF SCREEN(al, ac) < 3 THEN LOCATE al, ac: PRINT " "; END IF Posit(i).Lin = l Posit(i).Col = c Posit(i).Jump = j NEXT END IF DO: LOOP UNTIL TIMER - t! > .01 LOOP UNTIL ti = 0 OR ti = 20 WIDTH 80 COLOR 7, 0 CLS PRINT "Fim do jogo"; mode PRINT IF tsec! > 0 THEN pt = min! * 60 + sec! PRINT USING "Tempo:##:## => #####"; min!; sec!; pt IF ti = 0 THEN inc = 120 + pt ELSEIF ti >= 10 THEN inc = -ti * 8 ELSE inc = -ti * 4 END IF pt = pt + inc PRINT USING "Itens restantes:## => ######"; ti; inc PRINT USING "Total de pontos => #####"; pt END IF PRINT "Continua (S/N) ? "; DO: k$ = UCASE$(INPUT$(1)): LOOP UNTIL k$ = "S" OR k$ = "N" PRINT k$ BEEP LOOP UNTIL k$ = "N" SYSTEM SUB NewItem (A, b) DO li = INT(RND * 22) + 3 co = INT(RND * 38) + 2 LOOP UNTIL SCREEN(li, co) = b LOCATE li, co: PRINT CHR$(A); END SUB SUB NextcIdx SHARED cIdx AS INTEGER cIdx = cIdx + 1 IF cIdx = 1001 THEN cIdx = 1 END SUB