DECLARE SUB WaterSystem () DECLARE SUB Start () DECLARE SUB Finalization () DECLARE SUB Delay (dl!) DECLARE SUB Vertical (xl%, xc%, n%, t$) DECLARE SUB Button (x%, y%, z%) DECLARE SUB ButtonPressed () DECLARE SUB MovePlataform () DECLARE SUB DoMine () DECLARE SUB Box (l1%, c1%, l2%, c2%, char$, f%) DECLARE SUB DoScreen () DECLARE SUB Event () DECLARE SUB StartShot () DECLARE SUB MoveShot () RANDOMIZE TIMER DEFINT A-Z TYPE vShot Active AS INTEGER Lin AS INTEGER Col AS INTEGER Dir AS INTEGER Flag1 AS INTEGER Flag2 AS INTEGER END TYPE TYPE vMine Count AS INTEGER Sec AS SINGLE Lin AS INTEGER Col AS INTEGER END TYPE TYPE vPlat Lin AS INTEGER Col AS INTEGER Dir AS INTEGER Size AS INTEGER Sec AS SINGLE Active AS INTEGER END TYPE TYPE vWater Active AS INTEGER Sec AS SINGLE Volume AS INTEGER Lin AS INTEGER Level AS INTEGER END TYPE OPTION BASE 1 DIM SHARED l, c, al, ac, Level, jump, spd, Dir, kDir, GameOver, NewLevel DIM SHARED It(26), Pt, Sel, Lf, ItemName(26) AS STRING DIM SHARED Shot AS vShot, Mine(5) AS vMine, Code(4), KeyCode(4) DIM SHARED Plat AS vPlat, ActiveButton, ButtonCount, Final, BombClock AS SINGLE DIM SHARED Water AS vWater VIEW PRINT WIDTH 40 COLOR 7, 1 FOR i = 1 TO 26: READ ItemName(i): NEXT ResetVars = -1 DO WIDTH 40 COLOR 7, 1 IF ResetVars THEN Start BombClock = TIMER Sel = 1 kDir = 1 Level = 1 GameOver = 0 ResetVars = 0 Pt = 0 Lf = 100 FOR i = 1 TO 4 Code(i) = 0 KeyCode(i) = INT(RND * 9) + 1 NEXT FOR i = 1 TO 26 It(i) = 0 NEXT Final = 0 Water.Active = 0 Water.Lin = 25 Water.Level = 0 Water.Volume = 0 END IF FOR i = 1 TO 5 Mine(i).Count = -1 NEXT DoScreen NewLevel = 0 ActiveButton = 0 Plat.Active = 0 jump = 0: spd = 0 afog = 0 DO tsec = 300 - TIMER + BombClock IF tsec < 0 THEN tsec = 0 Sec = tsec MOD 60 Min = tsec \ 60 LOCATE 1, 1: PRINT USING "Level:## Lf:### Item:## \ \ Rem:##:##"; Level; Lf; It(Sel); ItemName(Sel); Min; Sec; IF tsec = 0 THEN GameOver = -1: EXIT DO al = l: ac = c kb$ = INKEY$ SELECT CASE kb$ CASE CHR$(0) + "H" IF SCREEN(l + 1, c) <> 32 THEN jump = 5 IF SCREEN(l, c + kDir) = 179 THEN jump = 2 IF (l > Water.Lin - 2) AND l > 2 AND Water.Lin < 25 THEN jump = 3 IF (l > Water.Lin OR Water.Level > Level) AND l > 2 THEN jump = 1 CASE CHR$(0) + "P" IF SCREEN(l, c + kDir) = 179 OR jump = 0 THEN l = l + 1: Event: IF NewLevel THEN EXIT DO IF jump > 0 THEN jump = 0 CASE CHR$(0) + "K": Dir = -1: kDir = -1 CASE CHR$(0) + "M": Dir = 1: kDir = 1 CASE " ": spd = NOT spd CASE CHR$(27): GameOver = -1: EXIT DO CASE CHR$(9): Sel = Sel MOD 26 + 1 CASE CHR$(0) + CHR$(15): IF Sel = 1 THEN Sel = 26 ELSE Sel = Sel - 1 CASE "a" TO "z", "A" TO "Z": Sel = ASC(UCASE$(kb$)) - 64 CASE CHR$(13) StartShot END SELECT MoveShot DoMine IF ActiveButton THEN ButtonPressed IF Plat.Active THEN MovePlataform IF Water.Active THEN WaterSystem IF spd THEN Dir = kDir c = c + Dir IF NOT spd THEN Dir = 0 IF c < 2 THEN c = 2 IF c > 39 THEN c = 39 Event IF NewLevel THEN EXIT DO IF jump > 0 THEN jump = jump - 1 l = l - 1 Event IF NewLevel THEN EXIT DO ELSEIF SCREEN(l, c + kDir) = 179 AND jump = 0 THEN ELSE p = SCREEN(l + 1, c) IF p = 32 THEN l = l + 1 ELSEIF INSTR("þÿ´Ãabcdefghijklmnopqrstuvwxyz" + CHR$(15) + CHR$(24), CHR$(p)) THEN l = l + 1 Event IF NewLevel THEN EXIT DO END IF END IF IF (l > Water.Lin OR Water.Level > Level) AND l > 2 THEN afog = afog + 1 IF afog >= 10 THEN Lf = Lf - 1: afog = 0 ELSE afog = 0 END IF IF al <> l OR ac <> c THEN p = SCREEN(al, ac) IF (al >= Water.Lin OR Water.Level > Level) AND l > 2 THEN LOCATE al, ac: PRINT "°"; ELSEIF p = 2 THEN LOCATE al, ac: PRINT " "; END IF LOCATE l, c: PRINT ""; END IF Delay .01 IF Lf <= 0 OR l = 25 THEN GameOver = -1 IF l = 2 THEN Level = Level + 1: NewLevel = -1: EXIT DO IF Final AND l = 24 AND c = 2 THEN EXIT DO LOOP UNTIL GameOver IF Final AND NOT GameOver THEN Finalization: GameOver = -1 ELSE Final = 0 IF GameOver THEN WIDTH 80 COLOR 7, 0 CLS PRINT "Fim do jogo" PRINT IF Final THEN PRINT "Parabens, voce venceu !!!": PRINT PRINT "Continua [s/n] ? "; DO: k$ = UCASE$(INPUT$(1)): LOOP UNTIL k$ = "S" OR k$ = "N" PRINT k$ BEEP ResetVars = -1 END IF LOOP UNTIL k$ = "N" SYSTEM DATA a DATA brigde DATA c DATA d DATA e DATA fire DATA g DATA h DATA i DATA j DATA k DATA l DATA mine DATA n DATA o DATA p DATA q DATA rope DATA s DATA t DATA u DATA v DATA w DATA x DATA y DATA z 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) ln = c2 - c1 - 1 LOCATE l1, c1: PRINT MID$(char$, 1, 1); STRING$(ln, MID$(char$, 2, 1)); MID$(char$, 3, 1); LOCATE l2, c1: PRINT MID$(char$, 7, 1); STRING$(ln, MID$(char$, 6, 1)); MID$(char$, 5, 1); IF f THEN FOR ll = l1 + 1 TO l2 - 1 LOCATE ll, c1: PRINT MID$(char$, 8, 1); STRING$(ln, MID$(char$, 9, 1)); MID$(char$, 4, 1); NEXT ELSE FOR ll = l1 + 1 TO l2 - 1 LOCATE ll, c1: PRINT MID$(char$, 8, 1); LOCATE ll, c2: PRINT MID$(char$, 4, 1); NEXT END IF END SUB SUB Button (x, y, z) IF z = 1 THEN LOCATE x, y: PRINT "ÛÛÛ"; LOCATE x + 1, y: PRINT "ÃÄÛ"; LOCATE x + 2, y: PRINT "ÛÛÛ"; ELSEIF z = 2 THEN LOCATE x, y: PRINT "ÛÛÛ"; LOCATE x + 1, y: PRINT "ÛÄ´"; LOCATE x + 2, y: PRINT "ÛÛÛ"; END IF END SUB SUB ButtonPressed ButtonCount = ButtonCount + 1 SELECT CASE Level CASE 2 ActiveButton = 0 Plat.Sec = TIMER Plat.Active = -1 CASE 3 ActiveButton = 0 IF ButtonCount = 1 THEN Plat.Sec = TIMER Plat.Active = -1 ELSE LOCATE Plat.Lin, Plat.Col: PRINT SPACE$(Plat.Size); Plat.Lin = 14 Plat.Size = 3 Plat.Dir = 1 Plat.Sec = TIMER Plat.Active = -1 LOCATE Plat.Lin, Plat.Col: PRINT STRING$(Plat.Size, 223); END IF IF INT(RND * 2) = 0 THEN Water.Active = -1: SOUND 0, 0: PLAY "MBo4l4b" CASE 4 ActiveButton = 0 Plat.Sec = TIMER Plat.Active = -1 CASE 5 IF ButtonCount = 10 THEN Plat.Sec = TIMER Plat.Active = -1 ELSE LOCATE 23 - 2 * ButtonCount, 5: PRINT STRING$(5, 176); END IF ActiveButton = 0 END SELECT END SUB SUB Delay (dl!) t! = TIMER: DO: LOOP UNTIL TIMER - t! > dl! END SUB SUB DoMine FOR i = 1 TO 5 IF Mine(i).Count > -1 THEN IF TIMER - Mine(i).Sec >= .5 THEN Mine(i).Count = Mine(i).Count - 1 Mine(i).Sec = TIMER IF Mine(i).Count < 0 THEN l1 = Mine(i).Lin - 2 c1 = Mine(i).Col - 2 l2 = Mine(i).Lin + 2 c2 = Mine(i).Col + 2 IF l1 < 3 THEN l1 = 3 IF c1 < 2 THEN c1 = 2 IF l2 > 24 THEN l2 = 24 IF c2 > 39 THEN c2 = 39 Box l1, c1, l2, c2, SPACE$(9), 1 SOUND 0, 0: PLAY "MBo0l32cdef" IF (Water.Lin >= l1 AND Water.Lin <= 24) THEN Box Water.Lin, c1, l2, c2, STRING$(9, 176), 1 ELSEIF Water.Level > Level THEN Box l1, c1, l2, c2, STRING$(9, 176), 1 END IF IF l >= l1 AND l <= l2 AND c >= c1 AND c <= c2 THEN Lf = Lf - 10: IF Lf < 0 THEN Lf = 0 ELSE LOCATE Mine(i).Lin, Mine(i).Col: PRINT USING "#"; Mine(i).Count; SOUND 0, 0: PLAY "MBo4l8c>c" END IF END IF END IF NEXT END SUB SUB DoScreen Box 2, 1, 25, 40, STRING$(8, 219), 1 ButtonCount = 0 Plat.Size = 0 SELECT CASE Level CASE 1 l = 24: c = 3 LOCATE 24, 30: PRINT "bb"; LOCATE 16, 4: PRINT "m"; LOCATE 12, 4: PRINT "r"; Box 20, 32, 25, 38, STRING$(9, 219), 0 LOCATE 22, 33: PRINT "fffff"; LOCATE 23, 33: PRINT "ffmff"; LOCATE 24, 33: PRINT "fffff"; LOCATE 17, 6: PRINT STRING$(5, 24); LOCATE 24, 10: PRINT STRING$(5, 24); LOCATE 24, 20: PRINT STRING$(5, 24); LOCATE 19, 34: PRINT STRING$(5, 24); LOCATE 6, 2: PRINT STRING$(25, 24); LOCATE 4, 2: PRINT STRING$(25, 15); LOCATE 7, 2: PRINT STRING$(25, 219); LOCATE 2, 2: PRINT " "; CASE 2 l = 24: c = 3 FOR i = 6 TO 24: LOCATE i, 4: PRINT "³"; : NEXT LOCATE 8, 5: PRINT STRING$(10, 24); LOCATE 9, 5: PRINT STRING$(10, 24); FOR i = 10 TO 15: LOCATE i, 5: PRINT STRING$(29, 24); : NEXT FOR i = 16 TO 24: LOCATE i, 5: PRINT STRING$(10, 24); : NEXT FOR i = 8 TO 23: LOCATE i, 36: PRINT "Û"; : NEXT LOCATE 23, 20: PRINT STRING$(5, 15); "bbb"; FOR i = 4 TO 24 STEP 2 LOCATE i, 38: PRINT CHR$(24); NEXT LOCATE 2, 38: PRINT " "; Button 4, 35, 1 Plat.Lin = 7 Plat.Col = 30 Plat.Size = 3 Plat.Dir = -1 Plat.Active = 0 CASE 3 l = 24: c = 38 FOR i = 21 TO 24: LOCATE i, 5: PRINT STRING$(30, 24); : NEXT LOCATE 4, 15: PRINT STRING$(20, 15) LOCATE 5, 30: PRINT STRING$(8, 219); LOCATE 20, 38: PRINT "r"; Plat.Lin = 7 Plat.Col = 35 Plat.Size = 3 Plat.Dir = -1 Plat.Active = 0 Button 5, 6, 2 Button 3, 38, 1 LOCATE 2, 3: PRINT " "; Vertical 3, 4, 10, "³" CASE 4 l = 24: c = 3 LOCATE 2, 2: PRINT SPACE$(37); Box 22, 2, 25, 4, STRING$(8, 219), 0 Plat.Lin = 9 Plat.Col = 33 Plat.Size = 5 Plat.Dir = -1 Plat.Active = 0 Button 7, 38, 1 LOCATE 7, 37: PRINT "m"; LOCATE 7, 7: PRINT "m"; LOCATE 9, 5: PRINT STRING$(9, 219); CASE 5 l = 24 c = 39 LOCATE 25, 2: PRINT SPACE$(37); LOCATE 23, 5: PRINT STRING$(27, 178); FOR i = 1 TO 10 Button 2 * i + 1, 2, 2 NEXT FOR i = 1 TO 4 Mine(i).Lin = 22 Mine(i).Col = 5 * i + 5 Mine(i).Sec = TIMER Mine(i).Count = i + 6 NEXT Plat.Lin = 6 Plat.Col = 35 Plat.Size = 5 Plat.Dir = -1 Plat.Active = 0 LOCATE 2, 30: PRINT " "; CASE 6 l = 24: c = 30 Box 2, 1, 25, 40, SPACE$(8), 1 LOCATE 25, 1: PRINT STRING$(40, 219); LOCATE 4, 20: PRINT "þ"; Vertical 5, 20, 20, "³" Vertical 20, 29, 5, "³" LOCATE 25, 10: PRINT SPACE$(10); LOCATE 2, 18: PRINT STRING$(5, 219); FOR i = 1 TO 5 Mine(i).Lin = 27 - 4 * i IF i MOD 2 = 0 THEN Mine(i).Col = 18 ELSE Mine(i).Col = 22 Mine(i).Sec = TIMER Mine(i).Count = 6 NEXT END SELECT LOCATE l, c: PRINT ""; IF Plat.Size > 0 THEN LOCATE Plat.Lin, Plat.Col: PRINT STRING$(Plat.Size, 223); ll = 26 IF Water.Level > Level THEN ll = 3 IF Water.Level = Level THEN ll = Water.Lin FOR wl = 25 TO ll STEP -1 FOR wc = 2 TO 39 IF SCREEN(wl, wc) = 32 THEN LOCATE wl, wc: PRINT "°"; NEXT NEXT END SUB SUB Event p = SCREEN(l, c) SELECT CASE p CASE 35: Level = Level + 1: NewLevel = -1 CASE 179, 219, 223, 180, 195, 209, 255 l = al: c = ac: EXIT SUB CASE 176: IF al >= Water.Lin OR Water.Level > Level THEN LOCATE al, ac: PRINT "°"; CASE 177: LOCATE l, c: PRINT "°"; : l = al: c = ac: EXIT SUB CASE 178: LOCATE l, c: PRINT "±"; : l = al: c = ac: EXIT SUB CASE 97 TO 122 Sel = p - 96 It(p - 96) = It(p - 96) + 1 SOUND 0, 0: PLAY "MBo4l32cde" CASE 15 Lf = Lf + 5: IF Lf > 100 THEN Lf = 100 SOUND 0, 0: PLAY "MBo5l32cde" CASE 24 Lf = Lf - 10: IF Lf < 0 THEN Lf = 0 jump = 3 SOUND 0, 0: PLAY "MBo1l32cde" CASE 254 FOR i = 4 TO 10 STEP 2 Box 2, i, 4, i + 2, STRING$(8, 219), 0 NEXT COLOR 7, 1 isel = 1 DO ok = -1 tsec = 300 - TIMER + BombClock IF tsec < 0 THEN tsec = 0 Sec = tsec MOD 60 Min = tsec \ 60 LOCATE 1, 32: PRINT USING "Rem:##:##"; Min; Sec; IF tsec = 0 THEN GameOver = -1: EXIT DO FOR i = 1 TO 4 IF i = isel THEN COLOR 15, 1 LOCATE 3, i * 2 + 3: PRINT USING "#"; Code(i); COLOR 7, 1 IF Code(i) <> KeyCode(i) THEN ok = 0 NEXT IF ok THEN Final = -1: EXIT DO SELECT CASE INKEY$ CASE CHR$(0) + "H" Code(isel) = Code(isel) MOD 9 + 1 IF Code(isel) = KeyCode(isel) THEN PLAY "MBl64o4cdefgab" BombClock = BombClock - 5 CASE CHR$(0) + "P" IF Code(isel) < 2 THEN Code(isel) = 9 ELSE Code(isel) = Code(isel) - 1 IF Code(isel) = KeyCode(isel) THEN PLAY "MBl64o4cdefgab" BombClock = BombClock - 5 CASE CHR$(0) + "K": IF isel = 1 THEN isel = 4 ELSE isel = isel - 1 CASE CHR$(0) + "M": isel = isel MOD 4 + 1 END SELECT LOOP CASE ELSE: EXIT SUB END SELECT LOCATE l, c IF l >= Water.Lin OR Water.Level > Level THEN PRINT "°"; ELSE PRINT " "; END SUB SUB Finalization CLS PLAY "MBl12o1ccefccfgccefgfabccl4c" LOCATE 24, 1: PRINT STRING$(40, 219); Box 3, 30, 24, 38, STRING$(9, 219), 1 LOCATE 2, 30: PRINT ""; FOR i = 3 TO 23 LOCATE i, 29: PRINT "³"; Delay .05 NEXT LOCATE 2, 30: PRINT " "; FOR i = 3 TO 23 LOCATE i, 28: PRINT ""; Delay .08 LOCATE i, 28: PRINT " "; NEXT FOR i = 28 TO 3 STEP -1 LOCATE 23, i: PRINT ""; Delay .2 LOCATE 23, i: PRINT " "; NEXT CLS END SUB SUB MovePlataform IF TIMER - Plat.Sec > .25 THEN Plat.Sec = TIMER IF Plat.Dir = -1 THEN IF SCREEN(Plat.Lin, Plat.Col - 1) = 32 THEN IF l = Plat.Lin - 1 AND c >= Plat.Col AND c <= Plat.Col + Plat.Size - 1 THEN c = c - 1 Plat.Col = Plat.Col - 1 LOCATE Plat.Lin, Plat.Col: PRINT STRING$(Plat.Size, 223); " "; ELSE Plat.Dir = 1 END IF ELSE IF SCREEN(Plat.Lin, Plat.Col + Plat.Size) = 32 THEN IF l = Plat.Lin - 1 AND c >= Plat.Col AND c <= Plat.Col + Plat.Size - 1 THEN c = c + 1 Plat.Col = Plat.Col + 1 LOCATE Plat.Lin, Plat.Col - 1: PRINT " "; STRING$(Plat.Size, 223); ELSE Plat.Dir = -1 END IF END IF END IF END SUB SUB MoveShot IF Shot.Active THEN p = SCREEN(Shot.Lin, Shot.Col) SELECT CASE Shot.Active CASE 2 Shot.Flag1 = Shot.Flag1 - 1 IF Shot.Flag1 = 0 THEN Shot.Active = 0 SELECT CASE SCREEN(Shot.Lin, Shot.Col + Shot.Dir) CASE 32 Shot.Col = Shot.Col + Shot.Dir LOCATE Shot.Lin, Shot.Col: PRINT CHR$(178); CASE ELSE Shot.Active = 0 END SELECT CASE 6 IF p = 26 OR p = 27 THEN LOCATE Shot.Lin, Shot.Col: PRINT " "; SELECT CASE SCREEN(Shot.Lin, Shot.Col + Shot.Dir) CASE 180 LOCATE Shot.Lin, Shot.Col - 2: PRINT "´ÿ"; ActiveButton = -1 Shot.Active = 0 SOUND 0, 0: PLAY "MBo2l32c>c" CASE 195 LOCATE Shot.Lin, Shot.Col + 1: PRINT "ÿÃ"; ActiveButton = -1 Shot.Active = 0 SOUND 0, 0: PLAY "MBo2l32c>c" CASE 32 Shot.Col = Shot.Col + Shot.Dir LOCATE Shot.Lin, Shot.Col IF Shot.Dir = 1 THEN PRINT CHR$(26); ELSE PRINT CHR$(27); CASE ELSE l1 = Shot.Lin - 1 c1 = Shot.Col - 1 l2 = Shot.Lin + 1 c2 = Shot.Col + 1 IF l1 < 3 THEN l1 = 3 IF c1 < 2 THEN c1 = 2 IF l2 > 24 THEN l2 = 24 IF c2 > 39 THEN c2 = 39 Box l1, c1, l2, c2, STRING$(9, 178), 1 SOUND 0, 0: PLAY "MBo0l32cdef" Shot.Active = 0 END SELECT CASE 18 IF SCREEN(Shot.Lin, Shot.Col) <> 32 THEN Shot.Active = 0 ELSE LOCATE Shot.Lin, Shot.Col: PRINT "³"; Shot.Lin = Shot.Lin - 1 END IF END SELECT END SUB SUB Start CLS LOCATE 24, 1: PRINT STRING$(40, 219); Box 3, 30, 24, 38, STRING$(9, 219), 1 FOR i = 3 TO 29 LOCATE 23, i: PRINT ""; Delay .1 LOCATE 23, i: PRINT " "; NEXT PLAY "MFl12o1ccefccfgccefgfabccl4c" CLS END SUB SUB StartShot IF It(Sel) = 0 THEN EXIT SUB It(Sel) = It(Sel) - 1 SELECT CASE Sel CASE 2 Shot.Active = 2 Shot.Lin = l Shot.Col = c Shot.Dir = kDir Shot.Flag1 = 5 CASE 6 Shot.Active = 6 Shot.Lin = l Shot.Col = c Shot.Dir = kDir CASE 13 FOR i = 1 TO 5 IF Mine(i).Count = -1 THEN EXIT FOR NEXT IF i < 6 THEN Mine(i).Lin = l Mine(i).Col = c Mine(i).Sec = TIMER Mine(i).Count = 6 END IF CASE 18 Shot.Active = 18 Shot.Lin = l Shot.Col = c + kDir END SELECT END SUB SUB Vertical (xl, xc, n, t$) FOR i = 1 TO n LOCATE xl + i - 1, xc: PRINT t$; NEXT END SUB SUB WaterSystem IF Water.Volume = 0 THEN lim = 10 ELSEIF Water.Level < Level - 1 THEN lim = .5 ELSE lim = 1 END IF IF TIMER - Water.Sec > lim THEN Water.Volume = Water.Volume + 1 Water.Sec = TIMER wl = Water.Volume Water.Level = (Water.Volume - 1) \ 22 + 1 IF wl > 22 * (Level - 1) AND wl < 22 * Level + 1 THEN wl = wl - 22 * (Level - 1) wl = 25 - wl Water.Lin = wl FOR wc = 2 TO 39 IF SCREEN(wl, wc) = 32 THEN LOCATE wl, wc: PRINT "°"; NEXT ELSE Water.Lin = 25 END IF END IF IF Water.Level = 6 THEN Water.Active = 0 END SUB