'-----------------------------------' 'Uranium 1.0á ' 'Copyright (C) WendelSoft, 1997-2000' '26.09.2000 - 29.09.2000 ' 'Wendel Scardua ' '-----------------------------------' RANDOMIZE TIMER DEFINT A-Z CONST MaxSS = 5 CONST MaxProj = 16 TYPE ProjDef CrdX AS INTEGER CrdY AS INTEGER Sel AS INTEGER END TYPE TYPE SSDef CrdX AS INTEGER CrdY AS INTEGER DirX AS INTEGER DirY AS INTEGER State AS INTEGER END TYPE DIM SHARED Box(1 TO 20, 1 TO 4), SpaceShip(1 TO MaxSS) AS SSDef, px, py, apy, Pts DIM SHARED Blevel(1 TO 20), Bidx(1 TO MaxSS), GLevel, Pic(1 TO 2) AS STRING DIM SHARED Proj(1 TO MaxProj) AS ProjDef, tProj, U238, Status, tss DIM SHARED p1, p2, p3, p4, p5, p6 DIM SHARED sp, spx, spy, NoU Pic(1) = "BM+2,+0 ND4 BM-2,+2 NR4" Pic(2) = "F4 BU4 G4" DO FOR i = 1 TO MaxSS SpaceShip(i).State = 0 NEXT FOR i = 1 TO MaxProj Proj(i).Sel = 0 NEXT GLevel = 0: U238 = 0 FOR i = 1 TO 20 Blevel(i) = 4 FOR j = 1 TO 4 Box(i, j) = 3 U238 = U238 + 1 NEXT NEXT dly# = .002 t! = TIMER FOR i# = 1 TO 1000: NEXT t! = TIMER - t! dly# = dly# * 1000 / t! px = 20: py = 20: Pts = 0: Status = 100: tss = 0: dir = 0: NoU = 0 SCREEN 1 LINE (0, 9)-(319, 190), 3, B DisplayBox LOCATE 25, 1: PRINT "Copyright (C) WendelSoft, 1997-2000"; DO LINE (0, 9)-(319, 190), 3, B IF Status > 100 THEN Status = 100 IF Pts < 0 THEN Pts = 0: Status = Status - 2 SELECT CASE Pts CASE 0 TO 199: IF GLevel < 1 THEN GLevel = 1 CASE 200 TO 399: IF GLevel < 2 THEN GLevel = 2 CASE 400 TO 599: IF GLevel < 3 THEN GLevel = 3 CASE 600 TO 799: IF GLevel < 4 THEN GLevel = 4 CASE 800 TO 999: IF GLevel < 5 THEN GLevel = 5 CASE 1000 TO 1999: IF GLevel < 9 THEN GLevel = 9 END SELECT SELECT CASE GLevel'% surgir % down stp down stp up stp ss % proj CASE 1: p1 = 128: p2 = 32: p3 = 1: p4 = 1: p5 = 1: p6 = 100 CASE 2: p1 = 96: p2 = 25: p3 = 2: p4 = 1: p5 = 2: p6 = 60 CASE 3: p1 = 64: p2 = 18: p3 = 2: p4 = 2: p5 = 4: p6 = 30 CASE 4: p1 = 32: p2 = 11: p3 = 3: p4 = 3: p5 = 5: p6 = 20 CASE 5 TO 8: p1 = 0: p2 = 4: p3 = 5: p4 = 5: p5 = 10: p6 = 10 CASE 9: p1 = 0: p2 = 0: p3 = 10: p4 = 10: p5 = 10: p6 = 2 END SELECT LOCATE 1, 1: PRINT USING "Pts:#####0 Stat:### U238:### LV:#"; Pts; Status; U238; GLevel; IF NOT sp THEN IF INT(RND * 1024) = 0 THEN sp = -1: sx = 1: sy = INT(RND * 130) + 10 ELSE LINE (sx, sy)-STEP(6, 6), 0, BF sx = sx + 1 IF sx = 312 THEN sp = 0 ELSE IF sx + 6 >= px AND sx <= px + 6 AND sy + 6 >= py AND sy <= py + 6 THEN sp = 0 Status = Status + 10 + INT(RND * 6) PLAY "MB": SOUND 0, 0: FOR i = 1 TO 3: SOUND 1250 + i * 20, 3: NEXT ELSE LINE (sx, sy)-STEP(6, 6), 3, B LINE (sx + 1, sy + 1)-STEP(4, 4), 2, BF END IF END IF END IF DoSS DoProjetil apx = px: apy = py k$ = INKEY$ SELECT CASE k$ CASE CHR$(0) + "H": IF Jump = 0 THEN Jump = 20 CASE CHR$(0) + "P": Jump = 0 CASE CHR$(0) + "K": IF dir <= -1 THEN dir = dir - 1 ELSE dir = -1 CASE CHR$(0) + "M": IF dir >= 1 THEN dir = dir + 1 ELSE dir = 1 CASE " " ii = px + 2 ff = px + 2 LINE (ii - 1, py - 1)-(ff + 1, 11), 1, BF LINE (ii, py - 1)-(ff, 11), 3, BF FOR i# = 1 TO dly#: NEXT PLAY "MB": SOUND 0, 0: FOR w = 0 TO 50: SOUND 2000 + RND * 500, .1: NEXT LINE (ii - 1, apy - 1)-(ff + 1, 11), 0, BF FOR i = 1 TO MaxSS x = SpaceShip(i).CrdX y = SpaceShip(i).CrdY IF ff >= x AND ii <= x + 6 AND y + 6 <= py - 1 THEN SSdestruct i, x, y NEXT CASE CHR$(27): EXIT DO END SELECT IF ABS(dir) > 5 THEN dir = 5 * SGN(dir) IF Jump > 0 THEN Jump = Jump - 1 py = py - 2 IF py < 10 THEN py = 10 ELSEIF py < 183 THEN py = py + 1 END IF IF py > 183 THEN py = 183 IF dir <> 0 THEN px = px + dir IF px < 5 THEN px = 5 IF px > 310 THEN px = 310 IF px <> apx OR py <> apy THEN LINE (apx, apy)-STEP(6, 6), 0, BF 1 k = -1 FOR i = px TO px + 6 STEP 3 FOR j = py TO py + 6 STEP 6 k = k AND POINT(i, j) = 0 IF NOT k THEN i = 1000: j = 1000 NEXT NEXT IF NOT k THEN py = apy k = -1 FOR j = py TO py + 6 STEP 3 FOR i = px TO px + 6 STEP 6 k = k AND POINT(i, j) = 0 IF NOT k THEN i = 1000: j = 1000 NEXT NEXT IF NOT k THEN px = apx LINE (px, py)-STEP(6, 5), 2, BF LINE (px, py + 6)-STEP(6, 0), 3 END IF FOR i# = 1 TO dly#: NEXT LOOP UNTIL Status <= 0 OR Pts >= 2000 OR NoU SOUND 0, 0 SCREEN 0 WIDTH 80 PRINT "Fim do jogo" PRINT IF Status <= 0 OR U238 = 0 THEN PRINT "Vocˆ perdeu..." IF Pts >= 2000 THEN PRINT "Vocˆ atingiu os 20000 pontos, parab‚ns!!!" IF Pts >= 0 THEN tu = 800 - U238 * 10 ts = 500 - 5 * Status Sprint "Pontos :_+#####0", Pts Sprint "U238 :_-#####0", tu Sprint "Status :_-#####0", ts Sprint "Total :######0", Pts - tu - ts END IF PRINT PRINT "Quer jogar de novo [S/N] ? "; DO: k$ = UCASE$(INPUT$(1)): LOOP UNTIL k$ = "S" OR k$ = "N" LOOP WHILE k$ = "S" SYSTEM SUB DisplayBox LINE (90, 158)-(231, 181), 0, BF FOR i = 1 TO 20 FOR j = 1 TO 4 LINE (84 + 7 * i, 152 + 7 * j)-STEP(4, 4), Box(i, 5 - j), BF NEXT NEXT END SUB SUB DoProjetil IF tss > 0 AND INT(RND * p6) = 0 AND tProj < MaxProj THEN DO: i = INT(RND * MaxSS) + 1: LOOP UNTIL SpaceShip(i).State > 0 x = SpaceShip(i).CrdX IF ABS(x - px) <= 64 THEN y = SpaceShip(i).CrdY dy = SpaceShip(i).DirY IF y <= 142 THEN tProj = tProj + 1 SpaceShip(i).DirY = -ABS(dy) FOR r = 1 TO MaxProj IF Proj(r).Sel = 0 THEN EXIT FOR NEXT Proj(r).Sel = INT(RND * 2) + 1 Proj(r).CrdX = x + 1 Proj(r).CrdY = y + 6 PLAY "MB": SOUND 0, 0: : FOR i = 1 TO 3: SOUND 750 - i * 20, 3: NEXT END IF END IF END IF FOR i = 1 TO MaxProj s = Proj(i).Sel IF s > 0 THEN xj = Proj(i).CrdX yj = Proj(i).CrdY PSET (xj, yj), POINT(xj, yj) DRAW "C0 " + Pic(s) yj = yj + 2 IF yj > 185 OR POINT(xj, yj + 6) = 3 OR POINT(xj + 4, yj + 6) = 3 THEN s = 0 ELSE IF xj + 4 > px AND xj < px + 6 AND yj + 4 > py AND yj < py + 6 THEN s = 0 Pts = Pts - 20 Status = Status - 10 - INT(RND * 6) GLevel = GLevel + 1 IF GLevel > 9 THEN GLevel = 9 PLAY "MB": SOUND 0, 0: FOR w = 1 TO 3: SOUND 500 - w * 20, 3: NEXT ELSE s = 3 - s PSET (xj, yj), POINT(xj, yj) DRAW "C3 " + Pic(s) END IF END IF Proj(i).CrdX = xj Proj(i).CrdY = yj Proj(i).Sel = s IF s = 0 THEN tProj = tProj - 1 END IF NEXT END SUB SUB DoSS FOR i = 1 TO MaxSS x = SpaceShip(i).CrdX y = SpaceShip(i).CrdY dx = SpaceShip(i).DirX dy = SpaceShip(i).DirY s = SpaceShip(i).State SELECT CASE s CASE 0 IF INT(RND * p1) = 0 THEN tss = tss + 1 x = INT(RND * 200) + 64 y = 10 dx = INT(RND * (2 * p5 + 1)) - 1 dy = INT(RND * (2 * p5 + 1)) - 1 s = 1 LINE (x, y)-STEP(6, 6), 2, B LINE (x + 1, y + 1)-STEP(4, 4), 1, BF END IF CASE 1 IF INT(RND * p2) = 0 THEN FOR j = 1 TO 20 nx = 83 + 7 * j IF x = nx AND Blevel(j) <> 0 THEN EXIT FOR NEXT IF j < 21 THEN s = 2: Bidx(i) = j END IF IF s = 1 THEN LINE (x, y)-STEP(6, 6), 0, BF x = x + dx y = y + dy k = -1 FOR ii = x TO x + 6 STEP 3 FOR jj = y TO y + 6 STEP 6 k = k AND POINT(ii, jj) = 0 IF NOT k THEN ii = 1000: jj = 1000 NEXT NEXT IF NOT k THEN y = y - 2 * dy: dy = -dy k = -1 FOR jj = y TO y + 6 STEP 3 FOR ii = x TO x + 6 STEP 6 k = k AND POINT(ii, jj) = 0 IF NOT k THEN ii = 1000: jj = 1000 NEXT NEXT IF NOT k THEN x = x - 2 * dx: dx = -dx IF x > 295 THEN x = 295: dx = -INT(RND * p5 + 1) IF x < 20 THEN x = 20: dx = INT(RND * p5 + 1) IF y > 150 THEN y = 150: dy = -INT(RND * p5 + 1) IF y < 11 THEN y = 11: dy = INT(RND * p5 + 1) k = -1 FOR z = 0 TO 6 STEP 3: k = k AND POINT(x + z, y + 6) = 0: NEXT IF NOT k THEN y = y - 1: dy = -1 LINE (x, y)-STEP(6, 6), 2, B LINE (x + 1, y + 1)-STEP(4, 4), 1, BF IF INT(RND * 40) = 0 THEN dx = INT(RND * (2 * p5 + 1)) - 1: dy = INT(RND * (2 * p5 + 1)) - 1 END IF CASE 2 LINE (x, y)-STEP(6, 6), 0, BF y = y + p3 j = Bidx(i) IF y >= 151 + 7 * (5 - Blevel(j)) THEN y = 151 + 7 * (5 - Blevel(j)) s = 3 IF j > 0 AND Blevel(j) > 0 THEN PLAY "MB": SOUND 0, 0: FOR snd = -200 TO 200 STEP 100: SOUND 2000 + snd, 1: NEXT Box(j, Blevel(j)) = 0 U238 = U238 - 1 Blevel(j) = Blevel(j) - 1 DisplayBox ELSE s = 1 END IF LINE (x, y)-STEP(6, 6), 2, B LINE (x + 1, y + 1)-STEP(4, 4), 3, BF ELSE LINE (x, y)-STEP(6, 6), 3, B LINE (x + 1, y + 1)-STEP(4, 4), 1, BF END IF CASE 3 LINE (x, y)-STEP(6, 6), 0, BF y = y - p4 IF y <= 10 THEN s = 0 IF U238 = 0 THEN NoU = -1 tss = tss - 1 Bidx(i) = 0 ELSE LINE (x, y)-STEP(6, 6), 2, B LINE (x + 1, y + 1)-STEP(4, 4), 3, BF END IF END SELECT SpaceShip(i).CrdX = x SpaceShip(i).CrdY = y SpaceShip(i).DirX = dx SpaceShip(i).DirY = dy SpaceShip(i).State = s NEXT END SUB SUB Sprint (mask$, value) l = CSRLIN: c = POS(0) PLAY "MF" stp = value / 20 IF stp = 0 THEN stp = 1 FOR i = 0 TO value STEP stp LOCATE l, c: PRINT USING mask$; i; SOUND 300 + 100 * RND, 1 NEXT LOCATE l, c: PRINT USING mask$; value END SUB SUB SSdestruct (i, x, y) s = SpaceShip(i).State IF s > 0 THEN tss = tss - 1: IF tss = 0 THEN Pts = Pts + 20 SELECT CASE s CASE 1, 2 IF s = 1 THEN Pts = Pts + 5 ELSE Pts = Pts + 2 LINE (x, y)-STEP(6, 6), 0, BF s = 0 CASE 3 Pts = Pts + 15 LINE (x, y)-STEP(6, 6), 0, BF s = 0 j = Bidx(i) IF j > 0 THEN Blevel(j) = Blevel(j) + 1 Box(j, Blevel(j)) = 3 U238 = U238 + 1 IF px > 75 AND px < 231 AND py > 150 THEN LINE (px - 1, py - 1)-STEP(7, 7), 0, BF: py = py - 7: apy = py - 1 FOR w = 1 TO MaxSS x = SpaceShip(w).CrdX y = SpaceShip(w).CrdY dy = SpaceShip(w).DirY IF x > 75 AND x < 231 AND y > 150 THEN LINE (x - 1, y - 1)-STEP(7, 7), 0, BF: y = 150 SpaceShip(w).CrdX = x SpaceShip(w).CrdY = y SpaceShip(w).DirY = dy NEXT DisplayBox END IF END SELECT SpaceShip(i).State = s END SUB