THE PAST MASTER CLUB

   

SPACE GAME.HTM


' ** SPACE.BAS VERS 2.3 APR16/98 by: NICK K. VAN VLIET ' ** SPACE IS BEAUTIFUL FULL OF RED, BLUE ABD GREEN GIANT STARS; TRAILING ' ** TAILS OF COMET ICE AND SOLAR WINDS.. ' ** SPACE CAN BE NASTY WITH METEORITES AND SPACE JUNK ' ** YOUR A CARRIER GOING AT LIGHT SPEED ' ** YELLOW BLIPS ARE ALIEN /FRIENDLY SHIPS WAITING TO TRANSPORT SUPLIES AND ' ** MAIL IN RETURN FOR Fuel TO KEEP GOING, YOU ALSO HAVE SOLAR CELLS TO OP- ' ** PERATE A FRONT Laser CANNON TO GET RID OF RED SPACE JUNK AND GREEN ' ** COMETS. YELLOW BLIPS DISAPPEAR AS SHIPS ENTER HYPERSPACE AFTER FUELING ' ** YOUR CARRIER BUT IT IS SOMETIMES SITTING ON AN OLD JUNK PILE WHILE ' ** WAITING FOR YOUR SHIP! OR A RED JUNK MIGHT SPLIT INTO A GREEN METEOR. ' ** SOME METEORS REQUIRE VISUAL AIMING BECAUSE OF MAGNETIC DISTURBANCES. ' ** LOOKOUT FOR METEORS CROSSING YOUR PATH: THEY COME AND GO! ' ** NOTE: -ARROW KEYS GUIDE THE SHIP IN APROPREATE DIRECTIONS WITH OUTER ' ** RETRO JETS. REMEMBER SHIPS ARE ALWAYS MOVING AT AN ANGLE. ' ** -'F' KEY INCREAES SPEED. ' ** -'S' KEY SLOWS CRAFT DOWN. ' ** -'SPACE' KEY FIRES CANON DIRECTLY IN FRONT ON CROSS HAIRS. ' ** -LEFT VERT VINDOW IS TOP OF PATH FROM SATALLITE ZUES IN LIBRA. ' ** -RIGT VERT WINDOW IS SIDE VIEW OF PATH FROM LYRA IN ORION. ' ** -RIGHT MOST WINDOW IS A HUBBLE LIKE CAMERA VIEW OF SPACE IN FRONT. ' ** -TOPR RIGHT CROSS-HAIRS ARE AIMED DIRECTLY IN FRONT. ' ** -RIGHT BOTTOM CROSS-HAIRS IS A MONITOR OF THE FIRST 2 OBJECTS IN ' ** DIRECTLY IN FRONT OF PATH. ' ** -LOWEST RED TRIANGLE IS Fuel AVAILABLE : REPLENISHED BY OTHER SHIPS ' ** IT SERVICES INDICATED BY YELLOW ' ** -CYAN TRIANGLE ABOVE THAT IS THE ENERGY AVAILABLE: SUPPLIED BY SOLAR ' ** CELLS. ' ** -AREA BETWEEN Fuel AND SOLAR IS COMMUNICATION WINDOW TO OTHER SHIPS. ' ** -ABOVE THIS IS THE DISTANCE TRAVELED INDICATOR IN LIGHT YEARS ' ** -sometimes a ufo turns into a darelic so be careful there may be ' ** people on board! ' ** -Laser SHOOTS AUTO AT ANYTHING SOLID DIRECTLY INFRONT. ' ** -ARROW KEYS OR Pad WILL MOVE CROSSHAIRS TOWARD SHIP IN TARGET. ' ** -HIT A UFO AND YOU MUST PICK UP PASSENGERS - END OF GAME ' ** -GAME ENDS WHEN OUT OF Fuel AND ENERGY ' ** -GANE ENDS WITH A DIRECT HIT ' ** -YOUR SPACE SHIP IS CALLED SPARTA EMESARY FROM EARTH HEADING FOR ' ** THE NEAREST HABITABLE PLANET WILLING TO TRADE. ' ** -DONT HIT UFO'S AND RESIGN WHEN WHEN YOU SEE IT'S OVER! ' ** -SOME TIMES A UFO WAS SITTING ON AN ASRERIOD! ' ** RUNNING INTO ASTERIODS COST 30 UNITS SHOTS 10 UNITS EACH ' ** AT START IN SUB ENERGYLOSS USE u(2, 1) = 50 FOR DISPLAY 9 FOR GAME. DEFDBL M-Z 'double DEFINT A-O 'integers TYPE HUES 'XYZpoint 'define the type for hues red AS INTEGER 'red component green AS INTEGER 'green component blue AS INTEGER 'blue component END TYPE TYPE coord x AS DOUBLE Y AS DOUBLE z AS DOUBLE END TYPE DECLARE FUNCTION lngth% () DECLARE SUB PaletteChng () DECLARE SUB SHIPLOCTN () DECLARE SUB TEST () DECLARE SUB MASK () DECLARE SUB SHIPS () DECLARE SUB LRVIEW () DECLARE SUB DOT () DECLARE SUB KeyAngle (ak, ap) DECLARE SUB Arrws (e, an) DECLARE SUB Pad (e, an) DECLARE SUB LN () DECLARE SUB Laser (in, Y0) DECLARE SUB EnergyLoss () DECLARE SUB Meteor (xb, YC, ad) 'red/green/yellow dsply DECLARE SUB Fuel () DECLARE SUB Sort (a0, b0) '% DECLARE SUB TargetSymb () DECLARE SUB Views (an) DECLARE SUB EraseBorder () DECLARE SUB init (ANG) 'reset Meteor values DECLARE SUB TARGT2 () DECLARE SUB TARGET () 'SCREEN TARGET DECLARE SUB MeteoRay (a) 'METEOR RAY DECLARE SUB DrawCircle (radi%, X0%, Y0%, Z0%) 'line % DECLARE FUNCTION KeyOn% () ' DECLARE FUNCTION KeyVal% () ' COMMON SHARED a, B, c, d, aa, BB, cc, dd, strike$, ch, HITS, NoComet COMMON SHARED r, W, x, Y, z, e, pal() AS HUES, MY, game COMMON SHARED WW, XX, YY, zz, eE, X0, Y0, X1, y1, an, clr, display CONST TRUE = -1 CONST FALSE = NOT TRUE CONST METNUM = 6.5 '1/(METNUM)==># OF METEORS 7MAX CONST NN = 20 'DATA ARRAY SIZE CONST STP = 5 'STEP 360 DEGREES CONST MAXX = 640 * 2 / 3 'half width 640 319+319/2 CONST MAXY = 480 / 2 - 40 'half height 200 CONST pi = 3.141592654# 'PI /7 = 0.44880 4 * ATN(1#) SEE LAST LINE CONST XL = 319 / 2 + 50 'left boundary of viewport 209.5 CONST XH = XL / 2 'line between left/right window CONST XM = XH / 2 - 1 'center of left vert window CONST XC = XM + XH - 1 'center of right vert window CONST yb = 480 * 3 / 4 'bottom boundary of viewport 360 CONST MD = 400 'FRONT OF SHIP CONST YD = MD + 5 '460 'Meteor limit/REAR OF SHIP CONST ST = 55 'METEOR START IN WINDOW CONST FULL = 245 'energy level REDIM SHARED x(360, NN + 1) REDIM SHARED Y(2, NN + 6) '5 Sort REDIM SHARED U(2, 1) 'FUEL/PWR REDIM SHARED pal(256) AS HUES 'array for palette hues U(1, 1) = FULL: U(2, 1) = FULL CLS COLOR 15 LOCATE 10, 10: PRINT "WOULD YOU LIKE DISPLAY OR GAME /G "; : INPUT U$ IF U$ = "G" OR U$ = "g" THEN game = TRUE ELSE game = FALSE SCREEN 12 'high resolution graphics mode '640x480 RANDOMIZE TIMER 'seed random number generator PaletteChng 'border trim RANDOMIZE TIMER 'seed random number generator DIM SHARED m(4 * 4): DIM SHARED B(4 * 4): DIM SHARED c(2 * 6 * 6) DIM SHARED d(8 * 8): DIM SHARED e(10 * 10) DOT 'METEORS/UFO REDIM SHARED TOP(60 * 30) 'TOP VIEW REDIM SHARED SIDE(60 * 30) 'SIDE VIEW LRVIEW 'TOP/SIDE VIEW LETTERING REDIM SHARED SHIP(23 * 48) 'SHIP SHIPS REDIM SHARED TARGT(50 * 50) 'TARGET TARGET FOR I = 0 TO 359 init I 'init metteor variables NEXT I x(0, 0) = 11: x(0, NN) = 2 'INIT A FEW METEORS x(STP, 0) = 11: x(STP, NN) = 6 x(STP, 11) = 4 'angle x x(STP, 12) = -4 'angle y SHIPLOCTN N = 0: HITS = 0 DO '<<<<<<<
>>>>>>> N = N + 1: 'distance inc lightyear MY = FALSE EnergyLoss 'regular energy losses/gains LINE (0, 0)-(XH, 479), 11, B 'left window LINE (1, 1)-(XH - 1, 478), 11, B 'left window LINE (2, 2)-(XH - 2, 477), 11, B LINE (XH, 0)-(XL - 1, 479), 9, B 'middle window LINE (XH + 1, 1)-(XL - 2, 478), 9, B LINE (XH + 2, 2)-(XL - 3, 477), 9, B LINE (XL, yb + 1)-(639, 479), 14, B 'bottom window LINE (XL + 1, yb + 2)-(638, 478), 14, B LINE (XL + 2, yb + 2)-(637, 477), 14, B LINE (500, yb + 1)-(502, 479), 14, BF 'VERT L LINE (XL + 3, yb + 30)-(500, yb + 32), 14, BF 'HORZ LY k$ = TIME$ hr = VAL(MID$(k$, 1, 2)): 'PRINT hr MN = VAL(MID$(k$, 4, 2)): 'PRINT mn SC = VAL(MID$(k$, 7, 2)): 'PRINT sc: INPUT u$ 'seed random number generator IF MN = FIX(10 * min / 10) THEN RANDOMIZE 60000 MASK LINE (XM, YD)-(XM, 50), 7 'ship's path LINE (XC, YD)-(XC, 50), 7 PUT (XM - 11, 15), TOP(0), OR PUT (XC - 11, 15), SIDE(0), OR LOCATE 24, 28: PRINT "DIST: LGHT YRS:"; N; " HITS:"; HITS SHIPLOCTN aa = FALSE FOR I = 0 TO 359 STEP STP MeteoRay (I) NEXT I PUT (MAXX - 50, MAXY - 50), TARGT, OR EraseBorder Sort 570, 420 LOOP WHILE KeyVal 'QUIT == escape pressed END 'QUIT = CNTRL-C SUB DOT DrawCircle 2, 2, 2, 15 'w GET (0, 0)-(4, 4), m CLS DrawCircle 2, 2, 2, 10 'grn GET (0, 0)-(4, 4), B CLS DrawCircle 3, 3, 3, 12 'red GET (0, 0)-(6, 6), c CLS DrawCircle 4, 4, 4, 14 'yel GET (0, 0)-(8, 8), d CLS DrawCircle 5, 5, 5, 0 'wht GET (0, 0)-(10, 10), e END SUB DEFINT P-Z SUB DrawCircle (radi, XX, YY, zz) X1 = 0: y1 = 0: X0 = radi * COS(0): Y0 = radi * SIN(0) FOR ii = 0 TO 90 '60=6 90=4 180=2 360=1 720=.5 X2 = radi * COS(4 * ii / 180 * pi) Y2 = radi * SIN(4 * ii / 180 * pi) LINE (X1 + XX, y1 + YY)-(X2 + XX, Y2 + YY), zz X3 = (X0 + X2) / 2: Y3 = (Y0 + Y2) / 2: X0 = X2: Y0 = Y2 LINE (X1 + XX, y1 + YY)-(X3 + XX, Y3 + YY), zz NEXT ii END SUB DEFDBL P-Z SUB EnergyLoss U(1, 1) = U(1, 1) - 10 '10 'Fuel loss U(2, 1) = U(2, 1) + ((1 + game) * 50 - game * 9)'50/9 Fuel ''GAME==9/DISPLAY==50 U(2,1) END SUB SUB EraseBorder 'SPACE BORDER z = 0: zz = .5 'z=1 'ok FOR I = 0 TO 31 '12 TO 0 STEP -1 z = z + zz LINE (210 + I, 1 + I)-(639 - I, yb - I), z, B 'BORDER IF z > 7 THEN zz = -.5 NEXT I END SUB SUB Fuel IF MY THEN U(2, 1) = U(2, 1) - 30: MY = FALSE 'SHIP SHIELD COST ENERGY U(2, 1) = (U(2, 1) + U(1, 1)) / 2: 'SOLAR U(1, 1) = U(2, 1) 'Fuel CONVERSION IF U(2, 1) > FULL THEN U(2, 1) = FULL 'solar IF U(1, 1) > FULL THEN U(1, 1) = FULL 'Fuel ''IF U(1, 1) < 10 THEN END 'STOP GAME: NO Fuel LOCATE 26, 28: PRINT "Fuel"; LOCATE 26, 58: PRINT "Laser": LN LINE (XL + 3, yb + 62)-(500, 477), 14, B 'GAS/POWER BRDR YEL OUTER LINE (XL + 8, yb + 67)-(495, 472), 14, B 'GAS/POWER YEL INNER PAINT (XL + 5, yb + 64), 9, 14 'BRDR '9,14'13,14 'OK LINE (480 - U(2, 1), yb + 68)-(494, yb + 82), 11 'Laser DIAG LINE (480 - U(2, 1), yb + 68)-(494, yb + 68), 11 'HORZ LINE (494, yb + 68)-(494, yb + 83), 11 'VERT LCYAN PAINT (475, yb + 70), 11 LINE (480 - U(2, 1), yb + 68)-(494, yb + 82), 14 'Laser DIAG PAINT (XL + 18, 430), 0, 14 'BLANK LINE (480 - U(2, 1), yb + 68)-(494, yb + 82), 11 'Laser DIAG LINE (XL + 8, yb + 98)-(230 + U(1, 1), 471), 12 'Fuel DIAG LINE (XL + 8, 471)-(230 + U(1, 1), 471), 12 'HORZ LINE (XL + 8, yb + 98)-(XL + 8, 471), 12 'VERT LRED:12 PAINT (XL + 10, 468), 12 'LGRN:10 LINE (XL + 8, yb + 98)-(230 + U(1, 1), 471), 14 'Fuel DIAG PAINT (490, yb + 104), 0, 14 'BLANK LINE (XL + 8, yb + 90 + 8)-(230 + U(1, 1), 471), 12 'Fuel DIAG LINE (XL + 7, yb + 90)-(496, yb + 90), 14 'VERT TICS FOR I = XL TO 490 STEP 20 LINE (I + 6, yb + 90 - 7)-(I + 8, yb + 90 + 7), 14, BF 'VERT TICS NEXT I IF U(1, 1) < 10 AND U(2, 1) < 10 THEN LOCATE 26, 35: : INPUT "<< OUT OF FUEL! >>", U$: END END IF END SUB SUB init (angl) RANDOMIZE 1000 '''LOCATE 26, 28: PRINT "GAS POWER" x(angl, 5) = MAXX: x(angl, 6) = MAXY 'INIT LOCT'N x(angl, 7) = MAXX: x(angl, 8) = MAXY 'store erase va x(angl, 9) = MAXX: x(angl, 10) = MAXY x(angl, 0) = 0 'SPEED RADAR x(angl, 1) = 36 'LOCTN window x(angl, 2) = RND * 9 + 1 'SPEED WINDOW x(angl, 3) = 0 'COUNT x(angl, NN) = 0 'size Meteor INIT x(angl, 11) = 0 x(angl, 12) = 0 IF x(angl, 2) <= 5 AND RND > .8 THEN 'speed =>NO OF METEORS x(angl, 11) = CDBL(RND * 10 - 5) 'angle x x(angl, 12) = CDBL(RND * 10 - 5) 'angle y x(angl, 0) = 7 * RND + 8 'speed Meteor IN WINDOW x(angl, NN) = RND * METNUM 'size Meteor 2< / =4 / <+ END IF x(angl, 4) = RND * 8 + 7 '14 + 1 'COLOR 1-15 DO x(angl, 11) = -x(angl, 11) LOOP WHILE RND > METNUM / 10 FOR I = 17 TO NN - 2 '14-16 PRESERVED x(angl, I) = 0 NEXT I IF FIX(x(angl, NN)) = 4 THEN x(angl, NN) = 4 ch = FALSE END SUB SUB KeyAngle (ak, ap) 'i, +/-, +/- ratio = .9 FOR I = 0 TO 359 STEP STP IF x(I, 0) > 0 THEN x(I, 11) = x(I, 11) + ak * ratio x(I, 12) = x(I, 12) + ap * ratio END IF NEXT I END SUB DEFINT P-Z FUNCTION KeyOn 'take finger off keys strike$ = INKEY$ 'get keystrike IF LEN(strike$) THEN KeyOn = TRUE ELSE KeyOn = FALSE 'convert to an integer END FUNCTION FUNCTION KeyVal 'press ESC key KeyVal = TRUE strike$ = INKEY$: G = 0 'get keystrike IF LEN(strike$) THEN IF LEN(strike$) = 2 THEN 'arrows G = ASC(MID$(strike$, 2, 1)) 'convert to an integer h = (G = 72) - (G = 80): G = (G = 75) - (G = 77) ''' H-U P-D K-L M-R '' 'i -1/+1 -1/+1 KeyAngle G, h ELSEIF LEN(strike$) = 1 THEN 'num keypad G = ASC(strike$) 'convert to an integer SELECT CASE G CASE 55 '7 LU KeyAngle -3, -3: 'PRINT "CASE7 -1 / -1"; CASE 57 '9 RU KeyAngle 3, -3: 'PRINT "CASE9 +1 / -1"; CASE 49 '1 LD KeyAngle -3, 3: 'PRINT "CASE1 -1 / +1"; CASE 51 '3 RD KeyAngle 3, 3: 'PRINT "CASE3 +1 / +1"; CASE ELSE '4/8/6/2 h = 3 * ((G = 56) - (G = 50)): G = 3 * ((G = 52) - (G = 54)) '' 8 2 4 6 KeyAngle G, h END SELECT END IF END IF DO LOOP WHILE KeyOn 'TAKE FINGER OFF KEY IF G = 27 THEN KeyVal = FALSE END FUNCTION DEFDBL P-Z SUB Laser (in, Y0) U(2, 1) = U(2, 1) - 0 '*(MD-LNGTH)/(MD-ST) 'NO cost Laser energy IF x(in, 16) > MD THEN GOTO JMP 'SPACE DUST==ENERGY HITS = HITS + 1 IF x(in, NN) > 4 THEN LOCATE 26, 35: : PRINT "<>": END IF x(in, NN) = 4 THEN LOCATE 26, 35: : PRINT "<>" IF x(in, NN) < 4 THEN LOCATE 26, 35: : PRINT "<>" FOR h = 0 TO 10 '12RED TURN THIS LINE INTO 1000 TO CHECK YOUT AIM LINE (XM + 1, Y0)-(XM - 1, MD), 14, BF 'LIMITS on LINE (XC + 1, Y0)-(XC - 1, MD), 14, BF FOR T = 0 TO 2 SOUND T * 100, 1.3 'noise LONGER SOUND T * 100, .2 'noise NEXT T ' SOUND h * 100, .3 'noise SHORT ' SOUND h * 100, .2 'noise LINE (XM - 1, MD)-(XM + 2, Y0), 0, BF ' off LINE (XC - 1, MD)-(XC + 1, Y0), 0, BF NEXT h JMP: init in 'get rid of meteor END SUB SUB LN LINE (XL + 45, yb + 34)-(450, yb + 59), 9, BF 'communication window END SUB FUNCTION lngth 'SOLAR PWR lngth = MD - (MD - ST) * U(2, 1) / FULL * 2 / 3 END FUNCTION SUB LRVIEW LOCATE 1, 1: PRINT "TOP"; LOCATE 2, 1: PRINT "VIEW"; 'LOCATE 3, 1: PRINT "LIBRA"; GET (0, 0)-(38, 45), TOP LOCATE 1, 1: PRINT "SIDE"; LOCATE 2, 1: PRINT "VIEW"; 'LOCATE 3, 1: PRINT "ORION"; GET (0, 0)-(38, 45), SIDE LOCATE 1, 1: PRINT " "; LOCATE 2, 1: PRINT " "; LOCATE 3, 1: PRINT " "; END SUB SUB MASK LINE (4, ST - 10)-(XH - 4, MD + 20), 0, BF 'ERASE L-WIND +20 SHIELD LINE (XH + 4, ST - 10)-(XL - 5, MD + 20), 0, BF 'ERASE R-WIND LINE (4, MD)-(XM - 13, 460 + 5), 0, BF 'ERASE L-WIND SHIP LSIDE LINE (XM + 13, MD)-(XH - 4, 460 + 5), 0, BF 'ERASE L/R-SIDE 460=YD LINE (XH + 4, MD)-(XC - 13, 460 + 5), 0, BF 'ERASE R-WIND SHIP LSIDE LINE (XC + 13, MD)-(XL - 5, 460 + 5), 0, BF 'ERASE R/R-SIDE END SUB SUB Meteor (xb, YC, ad) 'color 'x1/y1/angl IF xb > 2 AND YC > 2 THEN IF x(ad, NN) < 4 THEN PUT (xb - 2, YC - 2), B(0), OR ELSEIF FIX(x(ad, NN)) = 4 THEN PUT (xb - 3, YC - 3), c(0), OR ELSE PUT (xb - 4, YC - 4), d(0), OR: aa = TRUE END IF END IF END SUB SUB MeteoRay (a) 'RAYS OF METEIRITES IN TOP RIGHT WINDOW z = FIX(a): m = .5 'delta ANGLE for erasing path V = COS(a / 180 * pi): W = SIN(a / 180 * pi) 'angle EACH Meteor VV = COS((a + m) / 180 * pi): WW = SIN((a + m) / 180 * pi) 'erase angle VW = COS((a - m) / 180 * pi): WV = SIN((a - m) / 180 * pi) '' x0 loc ang speed count ang X1 = MAXX + x(a, 1) * V + x(a, 2) * x(a, 3) * V 'coord's Meteor y1 = MAXY + x(a, 1) * W + x(a, 2) * x(a, 3) * W X3 = MAXX + x(a, 1) * VV + x(a, 2) * x(a, 3) * VV 'erase coords Y3 = MAXY + x(a, 1) * WW + x(a, 2) * x(a, 3) * WW X4 = MAXX + x(a, 1) * VW + x(a, 2) * x(a, 3) * VW Y4 = MAXY + x(a, 1) * WV + x(a, 2) * x(a, 3) * WV X2 = FIX(X1 + 3 * V): X1 = FIX(X1) 'SIZE OF BLIP Y2 = FIX(y1 + 3 * W): y1 = FIX(y1) LINE (X1, y1)-(X2, Y2), x(a, 4) 'BLIP LINE (MAXX + 18 * V, MAXY + 18 * W)-(x(a, 5), x(a, 6)), 0 'ERASE OLD LINE LINE (MAXX + 18 * V, MAXY + 18 * W)-(x(a, 7), x(a, 8)), 0 'ERASE OLD LINE LINE (MAXX + 18 * V, MAXY + 18 * W)-(x(a, 9), x(a, 10)), 0 'ERASE OLD LINE InitTrue = FALSE '0 12 '480 IF X1 > 600 OR X1 < XL + 40 OR y1 < 40 OR y1 > yb - 40 THEN LINE (X1, y1)-(X2, Y2), 0 'BLIP erased IF x(a, 0) = 0 THEN InitTrue = TRUE: GOTO jmpi 'space ray done init END IF x(a, 5) = X1: x(a, 6) = y1 'store erase val x(a, 7) = X3: x(a, 8) = Y3 x(a, 9) = X4: x(a, 10) = Y4 IF x(a, 0) > 0 THEN Views a 'display top/side views jmpi: IF x(a, 0) = 0 AND InitTrue THEN init a 'ray done init x(a, 3) = x(a, 3) + 1 'time inc END SUB SUB PaletteChng FOR ii = 1 TO 8 'do colors 1 to 6 red = 28 + 3 * ii 'red intensity value (0-63) green = 28 + 3 * ii blue = 28 + 3 * ii PALETTE ii, 65536 * blue + 256 * green + red 'set each color to random intensities NEXT END SUB SUB SHIPLOCTN PUT (XM - 12, 415), SHIP(0), PSET 'DON'T DESTROY THESE SHIPS OR PUT (XC - 12, 415), SHIP(0), PSET 'OR GAME OVER - RESIGN PUT (XM - 12, 415), SHIP(0), OR 'DON'T DESTROY THESE SHIPS OR PUT (XC - 12, 415), SHIP(0), OR 'OR GAME OVER - RESIGN END SUB SUB SHIPS LOCATE 1, 1: PRINT " ^ "; LOCATE 2, 1: PRINT "< >"; LOCATE 3, 1: PRINT "/^\"; LINE (6, 6)-(16, 15), 9, BF 'dblu 1,9 LINE (8, 15)-(14, 35), 15, BF 'wht LINE (9, 35)-(13, 43), 12, BF 'dred 4.12 GET (0, 0)-(23, 48), SHIP END SUB SUB Sort (a0, b0) 'print 1st 2 meteors on magnification FOR I = 1 TO 2 IF Y(I, NN + 2) - 5 >= 0 AND Y(I, NN + 3) - 5 >= 0 THEN PUT (Y(I, NN + 2) - 5, Y(I, NN + 3) - 5), e(0), PSET 'erase meteor END IF NEXT I PUT (a0 - 5, b0 - 5), e(0), PSET FOR k = 0 TO NN 'CLEAR VAL 0 AND x(I, NN) < 5 THEN 'only red/green in target ' SPEED TIME ;SEE SORT FOR 2 PLOTS WHITE 1ST WDIST = CDBL(x(I, 0) * x(I, 3)) 'WINDOW DIST LY IF WDIST > Y(1, NN + 1) AND WDIST > Y(2, NN + 1) THEN NoComet = FALSE FOR k = 0 TO NN + 1 Y(2, k) = Y(1, k) NEXT k Y(1, NN + 1) = WDIST FOR k = 0 TO NN Y(1, k) = x(I, k) NEXT k ELSEIF WDIST > Y(2, NN + 1) THEN NoComet = FALSE: Y(2, NN + 1) = WDIST FOR k = 0 TO NN Y(2, k) = x(I, k) NEXT k END IF END IF NEXT I LOCATE 24, 64: PRINT FIX(MD - ST - 10 - Y(1, NN + 1)); 'dist nearest LOCATE 24, 75: PRINT FIX(MD - ST - 10 - Y(2, NN + 1)); 'next IF Y(2, NN + 1) = 0 THEN 'only one meteor in window? FOR k = 0 TO NN + 1 'duplicate data Y(2, k) = Y(1, k) BB = FIX(RND * 340 / STP) * STP IF Y(1, 17) = BB THEN BB = 360 - STP x(BB, k) = Y(1, k) NEXT k Y(2, 0) = 2 * Y(1, 0): x(BB, 3) = Y(2, 0) 'SPEED RADAR x(BB, 1) = RND * 10 + 10 'LOCTN Y(2, 2) = 1: x(BB, 2) = 1 'SPEED WIND Y(2, 3) = RND * .2 + .8: x(BB, 3) = RND * .2 + .8 'COUNT Y(2, NN) = 2: x(BB, NN) = 2 'GREEN SIZE END IF IF NoComet THEN x(0, NN) = 2 'GREEN x(0, 2) = 1 'SPACE SPEED x(0, 3) = RND * .2 + .8 'TIME x(0, 11) = CDBL(RND * 10 - 5) 'angle x x(0, 12) = CDBL(RND * 10 - 5) 'angle y x(0, 0) = 7 'RADAR SPEED x(0, 17) = 0 'ANGL x(STP, NN) = 4 'GREEN x(STP, 2) = 1 'SPACE SPEED x(STP, 3) = RND * .2 + .8 'SPACE SPEED x(STP, 11) = CDBL(RND * 10 - 5) 'angle x x(STP, 12) = CDBL(RND * 10 - 5) 'angle y x(STP, 0) = 20 'RADAR SPEED x(STP, 17) = STP 'ANGL END IF FOR I = 2 TO 1 STEP -1 IF Y(1, NN + 1) > 0 THEN 'dist 'window angle x V = CDBL(COS((Y(I, 11) + 90) / 180 * pi)): ' PRINT v 'loctn 'speed 'time X1 = CDBL(a0 + Y(I, 1) * V + Y(I, 0) * Y(I, 3) * V) V = CDBL(COS((Y(I, 12) + 90) / 180 * pi)): ' PRINT v y1 = CDBL(b0 + Y(I, 1) * V + Y(I, 0) * Y(I, 3) * V) IF FIX(Y(I, NN)) = 4 THEN PUT (X1 - 3, y1 - 3), c(0), OR 'TWO TARGET IN WINDOW! ELSEIF FIX(Y(I, NN)) < 4 THEN PUT (X1 - 2, y1 - 2), B(0), OR END IF IF I = 1 THEN PUT (X1 - 2, y1 - 2), m(0), OR 'nearest white rt targt Y(I, NN + 2) = X1: Y(I, NN + 3) = y1: Y(I, NN + 4) = y1 END IF NEXT I PUT (570 - 49, 420 - 49), TARGT, OR Fuel END SUB SUB TARGET ''(rad, ang, XR, YR) CLS FOR I = 0 TO 270 STEP 90 LINE (50 - 5, 50)-(50 - 9, 50), 14 'CROSS_HAIR LINE (50 + 5, 50)-(50 + 9, 50), 14 'CROSS_HAIR LINE (50, 50 - 5)-(50, 50 - 9), 14 'CROSS_HAIR LINE (50, 50 + 5)-(50, 50 + 9), 14 'CROSS_HAIR angoff = 20 x10 = 50 * COS((I - angoff) / 180 * pi) 'ini var y10 = 50 * SIN((I - angoff) / 180 * pi) FOR k = -angoff TO angoff - 1 '40' arc x11 = 50 * COS((I + 1 + k) / 180 * pi) y11 = 50 * SIN((I + 1 + k) / 180 * pi) LINE (50 + x10, 50 + y10)-(50 + x11, 50 + y11), 14 x10 = x11: y10 = y11 NEXT k NEXT I GET (0, 0)-(100, 100), TARGT CLS END SUB SUB Views (an) IF x(an, 0) > 0 THEN 'angle meteor/space junk IF aa AND x(an, NN) > 4 THEN x(an, NN) = 4 x = CDBL(an) x(an, 2) = 0 'space SPEED ZERO V = CDBL(COS((x(an, 11) + 90) / 180 * pi)): ' PRINT v W = CDBL(SIN((x(an, 11) + 90) / 180 * pi)): 'PRINT ww 'speed 'time X1 = CDBL(XM + x(an, 0) * x(an, 3) * V): 'PRINT x1'coord's Meteor y1 = CDBL(ST + x(an, 0) * x(an, 3) * W): 'PRINT y1 XX1 = X1: yy1 = y1 ch = FALSE 'left window 'right real display IF X1 <= 10 OR X1 > XH - 10 OR y1 > YD OR ch THEN ch = TRUE: x(an, 2) = 0 'speed IF y1 > MD THEN MY = TRUE 'SHIP SHIELD COST ENERGY FIX(X(an, 14) ELSE Meteor XX1, yy1, an END IF x(an, 13) = X1: x(an, 14) = y1 'erase coord ''right window V = CDBL(COS((x(an, 12) + 90) / 180 * pi)): ' PRINT v W = CDBL(SIN((x(an, 12) + 90) / 180 * pi)): 'PRINT ww X1 = CDBL(XC + x(an, 0) * x(an, 3) * V): 'PRINT x1'coord's Meteor '' Y1 = CDBL(ST + X(an, 0) * X(an, 3) * w): 'PRINT y1 'right window 'right real display IF X1 < XH + 10 OR X1 > XL - 10 OR y1 > YD OR y1 < 5 OR ch THEN ch = TRUE: x(an, 2) = 0 'SPEED IF y1 > MD THEN MY = TRUE 'SHIP SHIELD COST ENERGY ELSE Meteor X1, y1, an 'size END IF x(an, 15) = X1: x(an, 16) = y1 'erase coord IF x(an, NN) > 4 AND RND > .8 AND (y1 > MAXY OR yy1 > MAXY) THEN za = RND LOCATE 26, 35: PRINT "BYE! DEST: "; : IF za > .9 THEN PRINT "ALPHA" ELSE PRINT "LYRA" U(1, 1) = U(1, 1) + FULL '/ 2 'REFUELING x(an, 2) = 1: x(angl, 3) = 0 'WIND-SPEED OR DISAPPEAR FOR h = 0 TO 50 '100 LINE (x(an, 15), x(an, 16))-(XC, 420), 11 'RW radio waves LINE (x(an, 15), x(an, 16))-(XC, 420), 0 PUT (x(an, 15) - 5, x(an, 16) - 5), e(0), PSET PUT (x(an, 15) - 4, x(an, 16) - 4), d(0), OR FOR T = 0 TO 3 SOUND T * 100, .3 'noise NEXT T FOR T = 0 TO 3 SOUND T * 100, .2 'noise NEXT T LINE (x(an, 13), x(an, 14))-(XM, 420), 11 'OK LW radio waves LINE (x(an, 13), x(an, 14))-(XM, 420), 0 PUT (x(an, 13) - 5, x(an, 14) - 5), e(0), PSET PUT (x(an, 13) - 4, x(an, 14) - 4), d(0), OR NEXT h aa = TRUE PUT (x(an, 15) - 5, x(an, 16) - 5), e(0), PSET PUT (x(an, 13) - 5, x(an, 14) - 5), e(0), PSET LN 'BLU MSSG WIND LINE (XL + 8, yb + 68)-(494, yb + 90 - 10), 0, BF 'BLANK SCRN PWR DIAG LINE (XL + 8, yb + 90 + 8)-(494, 471), 0, BF 'BLANK SCRN GAS DIAG Fuel IF RND > .7 THEN x(an, 13) = 0: x(an, 15) = 0 'UFO GONE init an ELSE x(an, NN) = 4 'WATCHOUT IT WAS RIDING ON SPACE JUNK! END IF ELSEIF x(an, 14) > 450 OR x(an, 16) > 450 THEN init an 'all meteorites are destroyed ELSE Meteor XX1, yy1, an ' printed END IF IF y1 > MD - 5 AND (XX1 >= XM - 20 AND XX1 <= XM + 20) OR (X1 >= XC - 20 AND X1 <= XC + 20) THEN FLG = TRUE IF y1 > MD AND (XX1 >= XM - 3 AND XX1 <= XM + 3) AND (X1 >= XC - 3 AND X1 <= XC + 3) THEN FLG = FALSE LOCATE 26, 35: : PRINT "<< MINOR DAMAGE! >>": FOR I = 0 TO 3000: NEXT IF y1 > MD AND XX1 = XM AND X1 = XC THEN LOCATE 26, 35: : PRINT "<< MAJOR DAMAGE! >>": END END IF IF FLG THEN SHIPLOCTN END IF END IF END IF FLAG = FALSE: IF x(an, NN) > 4 AND (XX1 >= XM - 3 AND XX1 <= XM + 3) AND (X1 >= XC - 3 AND X1 <= XC + 3) AND y1 >= yb THEN FLAG = TRUE IF (x(an, NN) <= 4 AND (XX1 >= XM - 3 AND XX1 <= XM + 3) AND (X1 >= XC - 3 AND X1 <= XC + 3) AND (y1 >= lngth OR yy1 >= lngth)) OR FLAG THEN Laser an, y1 END IF IF ch THEN init an END IF END SUB RETURN TO TOP
RETURN TO PMC MENU
HOME PAGE
1