DECLARE SUB Instructions (InstructionWindow()) DECLARE SUB Splash (Stars!(), x!, y!, PI!) DECLARE SUB UpdateAsteroids (Asteroid1!(), Asteroid2!(), Asteroid3!(), Asteroid4!(), Asteroid5!(), Ast1x!, Ast1y!, Ast2x!, Ast2y!, Ast3x!, Ast3y!, Ast4x!, Ast4y!, Ast5x!, Ast5y!, Ast1Timer!) DECLARE SUB DrawHomeBase () DECLARE SUB DrawDestination (HotSpotx!, HotSpoty!, TurnNumber!, Target!()) DECLARE SUB FuelUp (TurnNumber!, Fuel!, Cash!, FuelUpWindow!(), FuelingDone!, FuelPrice!) DECLARE SUB DrawFuelStop () DECLARE SUB DrawTargets () DECLARE SUB DrawMaze () DECLARE SUB DrawSaucer (x!, y!, PI!) DECLARE SUB DrawStars () DECLARE SUB DrawControlPanel (TurnNumber, Fuel, Cash, Shields, Speed, GameTimer) DECLARE SUB DrawFlash (x!, y!) DECLARE SUB Menu (Choice$) ON ERROR GOTO TryToFix '* * * * * * * * * * * * * ' Saucer Program * ' GET/PUT Demo * ' Written by Vince Long * ' March 2000 * ' Modified November 2000 * ' Turned into a Spaze * ' Maze / Intergalactic * ' Pizza Delivery Game * ' in Dec 2005 * '* * * * * * * * * * * * * '* * * * * * * * * * * * * ' Setup the Program * '* * * * * * * * * * * * * RANDOMIZE TIMER SCREEN 12 CLS DIM Stars(500), FuelUpWindow(5500), Asteroid1(500), Asteroid2(500) DIM Asteroid3(500), Asteroid4(500), Asteroid5(500), Asteroid6(500) DIM InstructionWindow(5500) PI = 3.141593 CALL DrawStars CALL Splash(Stars(), x, y, PI) DisplayMenu: CALL Menu(Choice$) IF Choice$ = "1" THEN GOTO StartGame IF Choice$ = "2" THEN CALL Instructions(InstructionWindow()) IF Choice$ = "3" THEN GOTO ShutDown GOTO DisplayMenu StartGame: CLS CALL DrawStars CALL DrawHomeBase x = 62: y = 225 Ast1x = 245: Ast1y = 10 Ast2x = 260: Ast2y = 350 Ast3x = 430: Ast3y = 200 Ast4x = 445: Ast4y = 400 Ast5x = 600: Ast5y = 230 GET (x - 22, y - 13)-(x + 22, y + 9), Stars CALL DrawSaucer(x, y, PI) CALL DrawMaze CALL DrawTargets TurnNumber = 1 Fuel = 750 Cash = 50 Shields = 50 Speed = 1 FuelPrice = .5 GameTimer = TIMER Direction$ = "Stop" CALL DrawFuelStop LINE (1, 446)-(640, 480), 6, BF CALL DrawControlPanel(TurnNumber, Fuel, Cash, Shields, Speed, GameTimer) GET (Ast1x - 5, Ast1y - 5)-(Ast1x + 5, Ast1y + 5), Asteroid1 CIRCLE (Ast1x, Ast1y), 4, 7 PAINT (Ast1x, Ast1y), 14, 7 GET (Ast2x - 5, Ast2y - 5)-(Ast2x + 5, Ast2y + 5), Asteroid2 CIRCLE (Ast2x, Ast2y), 4, 7 PAINT (Ast2x, Ast2y), 14, 7 GET (Ast3x - 5, Ast3y - 5)-(Ast3x + 5, Ast3y + 5), Asteroid3 CIRCLE (Ast3x, Ast3y), 4, 7 PAINT (Ast3x, Ast3y), 14, 7 GET (Ast4x - 5, Ast4y - 5)-(Ast4x + 5, Ast4y + 5), Asteroid4 CIRCLE (Ast4x, Ast4y), 4, 7 PAINT (Ast4x, Ast4y), 14, 7 GET (Ast5x - 5, Ast5y - 5)-(Ast5x + 5, Ast5y + 5), Asteroid5 CIRCLE (Ast5x, Ast5y), 4, 7 PAINT (Ast5x, Ast5y), 14, 7 ' Randomize the Target Sequence FOR I = 1 TO 6 T = INT(6 * RND(1) + 1) FOR J = 1 TO I IF Target(J) = T THEN Found = 1 NEXT J IF Found <> 1 THEN Target(I) = T ELSE Found = 9 I = I - 1 END IF NEXT I CALL DrawDestination(HotSpotx, HotSpoty, TurnNumber, Target()) '* * * * * * * * * * * * * ' Start the Program * '* * * * * * * * * * * * * StartHere: StartTime = TIMER FuelTimer = TIMER Ast1Timer = TIMER DO CALL UpdateAsteroids(Asteroid1(), Asteroid2(), Asteroid3(), Asteroid4(), Asteroid5(), Ast1x, Ast1y, Ast2x, Ast2y, Ast3x, Ast3y, Ast4x, Ast4y, Ast5x, Ast5y, Ast1Timer) I$ = INKEY$ Oldx = x: OldY = y IF I$ = CHR$(27) THEN GOTO ShutDown IF VAL(I$) > 0 AND VAL(I$) < 6 THEN Speed = VAL(I$) IF I$ = CHR$(32) THEN Direction$ = "Stop" IF I$ = CHR$(0) + "H" THEN Direction$ = "Up" IF I$ = CHR$(0) + "K" THEN Direction$ = "Left" IF I$ = CHR$(0) + "P" THEN Direction$ = "Down" IF I$ = CHR$(0) + "M" THEN Direction$ = "Right" IF Direction$ = "Up" THEN y = y - Speed IF Direction$ = "Left" THEN x = x - Speed IF Direction$ = "Down" THEN y = y + Speed IF Direction$ = "Right" THEN x = x + Speed ' Check to see if it hit the wall or off the screen Collision = 0 IF POINT(x - 22, y - 13) = 12 OR POINT(x, y - 13) = 12 OR POINT(x + 22, y - 13) = 12 THEN Collision = 1 IF POINT(x - 22, y) = 12 OR POINT(x + 22, y) = 12 THEN Collision = 1 IF POINT(x - 22, y + 9) = 12 OR POINT(x, y + 9) = 12 OR POINT(x + 22, y + 9) = 12 THEN Collision = 1 IF x - 22 < 1 OR x + 22 > 640 THEN Collision = 1 IF y - 13 < 1 OR y + 9 > 445 THEN Collision = 1 IF Collision = 1 AND Shields > 0 THEN FOR S = 1 TO 8 SOUND 250, .2 SOUND 700, .1 NEXT S x = Oldx y = OldY Direction$ = "Stop" Shields = Shields - 10 CALL DrawControlPanel(TurnNumber, Fuel, Cash, Shields, Speed, GameTimer) ELSEIF Collision = 1 AND Shields < 1 THEN GOTO YouDie END IF ' check to see if the coordinates changed meaning that we have ' to move the saucer else just update things IF Direction$ <> "Stop" THEN 'delete fuel Fuel = Fuel - .5 'Erase the Saucer LINE (Oldx - 22, OldY - 13)-(Oldx + 22, OldY + 9), 0, BF 'Put the Stars Back PUT (Oldx - 22, OldY - 13), Stars 'Get a SnapShot of the new Stars GET (x - 22, y - 13)-(x + 22, y + 9), Stars CALL DrawSaucer(x, y, PI) CALL DrawFlash(x, y) CALL DrawControlPanel(TurnNumber, Fuel, Cash, Shields, Speed, GameTimer) ELSE IF TIMER - FuelTimer > 1 THEN Fuel = Fuel - .5 FuelTimer = TIMER CALL DrawControlPanel(TurnNumber, Fuel, Cash, Shields, Speed, GameTimer) END IF END IF ' Check to See if Saucer Hit a Destination IF x > HotSpotx - 8 AND x < HotSpotx + 8 AND y > HotSpoty - 8 AND y < HotSpoty + 8 THEN GOSUB NextTurn END IF ' Check to See if Saucer Hit the Fuel Stop IF x > 600 AND y > 218 AND y < 242 AND FuelingDone = 0 THEN CALL FuelUp(TurnNumber, Fuel, Cash, FuelUpWindow(), FuelingDone, FuelPrice) Direction$ = "Stop" END IF ' Reset ability to fuel when ship has cleared the station IF x < 580 THEN FuelingDone = 0 ' Check for Collision With Asteroid IF ABS(x - Ast1x) < 13 AND ABS(y - Ast1y) < 10 THEN GOTO YouDie IF ABS(x - Ast2x) < 13 AND ABS(y - Ast2y) < 10 THEN GOTO YouDie IF ABS(x - Ast3x) < 13 AND ABS(y - Ast3y) < 10 THEN GOTO YouDie IF ABS(x - Ast4x) < 13 AND ABS(y - Ast4y) < 10 THEN GOTO YouDie IF ABS(x - Ast5x) < 13 AND ABS(y - Ast5y) < 10 THEN GOTO YouDie oldI$ = I$ I$ = "" LOOP UNTIL I$ <> "" GOTO StartHere YouDie: CLS PRINT "You Died" END '* * * * * * * * * * * * * ' Cycle to the Next Turn '* * * * * * * * * * * * * NextTurn: TurnNumber = TurnNumber + 1 Cash = Cash + 25 + INT(10 * RND(1) + 1) FOR I = 500 TO 2000 STEP 50 SOUND I, .1 SOUND I + 250, .1 NEXT I LINE (x - 22, y - 13)-(x + 22, y + 9), 0, BF PUT (x - 22, y - 13), Stars CIRCLE (HotSpotx, HotSpoty), 15, 14 CIRCLE (HotSpotx, HotSpoty), 7, 14 PAINT (HotSpotx, HotSpoty - 10), 3, 14 PAINT (HotSpotx, HotSpoty), 6, 14 GET (x - 22, y - 13)-(x + 22, y + 9), Stars CALL DrawSaucer(x, y, PI) CALL DrawDestination(HotSpotx, HotSpoty, TurnNumber, Target()) CALL DrawControlPanel(TurnNumber, Fuel, Cash, Shields, Speed, GameTimer) RETURN TryToFix: BEEP LOCATE 1, 1 PRINT "internal Error "; ERR RESUME ' * * * * * * * * * ' DATA BLOCK ' * * * * * * * * * DATA 95,40,105,120 DATA 95,40,160,50 DATA 160,40,225,50 DATA 215,40,225,120 DATA 215,120,225,185 DATA 160,175,225,185 DATA 95,175,160,185 DATA 95,120,105,185 '* * * * * * * * * * * * * ' Shutdown the Program '* * * * * * * * * * * * * ShutDown: END SUB DrawControlPanel (TurnNumber, Fuel, Cash, Shields, Speed, GameTimer) 'LINE (1, 446)-(640, 480), 6, BF LOCATE 29, 5 PRINT " Assignment #"; TurnNumber; LOCATE 30, 5 PRINT "Assignments to Go:"; 6 - TurnNumber; LOCATE 29, 30 PRINT USING "Fuel Left: ####.#"; Fuel; LOCATE 30, 30 PRINT "Shields: "; Shields; LOCATE 29, 50 PRINT USING "Cash: $$##.##"; Cash; LOCATE 30, 50 PRINT "Speed: "; Speed; LOCATE 29, 68 EllapsedTime = INT(TIMER - GameTimer) PRINT "Time: "; EllapsedTime; END SUB SUB DrawDestination (HotSpotx, HotSpoty, TurnNumber, Target()) IF Target(TurnNumber) = 1 THEN HotSpotx = 160 HotSpoty = 120 END IF IF Target(TurnNumber) = 2 THEN HotSpotx = 350 HotSpoty = 120 END IF IF Target(TurnNumber) = 3 THEN HotSpotx = 540 HotSpoty = 120 END IF IF Target(TurnNumber) = 4 THEN HotSpotx = 160 HotSpoty = 350 END IF IF Target(TurnNumber) = 5 THEN HotSpotx = 350 HotSpoty = 350 END IF IF Target(TurnNumber) = 6 THEN HotSpotx = 540 HotSpoty = 350 END IF PAINT (HotSpotx, HotSpoty), 13, 14 END SUB SUB DrawFlash (x, y) 'Draw the Yellow Arcs CIRCLE (x, y - 2), 21, 14, .000001, .8, .5 CIRCLE (x, y - 2), 21, 14, 2.2, 4, .5 CIRCLE (x, y - 2), 21, 14, 5.4, 6.2, .5 'Delay Loop T = TIMER DO LOOP UNTIL TIMER > T + .002 'Erase the Yellow Arcs CIRCLE (x, y - 2), 21, 0, .000001, .8, .5 CIRCLE (x, y - 2), 21, 0, 2.2, 4, .5 CIRCLE (x, y - 2), 21, 0, 5.4, 6.2, .5 END SUB SUB DrawFuelStop LINE (595, 206)-(635, 240), 0, BF LINE (595, 206)-(635, 240), 3, B LOCATE 14, 76 COLOR 15 PRINT "Fuel"; LOCATE 15, 76 PRINT "Stop"; LINE (594, 205)-(636, 241), 14, B LINE (593, 204)-(637, 242), 13, B END SUB SUB DrawHomeBase LOCATE 12, 76 COLOR 15 PRINT " Pizza "; LOCATE 15, 76 PRINT " Botique"; LINE (7, 207)-(39, 239), 0, BF LINE (7, 207)-(39, 239), 3, B PAINT (23, 223), 2, 3 CIRCLE (23, 223), 15, 6 PAINT (23, 223), 4, 6 FOR cheese = 1 TO 60 cx = INT(20 * RND(1) + 1) + 13 cy = INT(20 * RND(1) + 1) + 212 PSET (cx, cy), 14 NEXT cheese END SUB SUB DrawMaze 'Galaxy 1 Skip1 = INT(8 * RND(1) + 1) DO Skip2 = INT(8 * RND(1) + 1) LOOP WHILE Skip1 = Skip2 DO Skip3 = INT(8 * RND(1) + 1) LOOP WHILE Skip3 = Skip1 OR Skip3 = Skip1 FOR I = 1 TO 8 READ a1, b1, c1, d1 IF Skip1 <> I AND Skip2 <> I AND Skip3 <> I THEN LINE (a1, b1)-(c1, d1), 12, BF END IF NEXT I RESTORE 'Galaxy 2 Skip1 = INT(8 * RND(1) + 1) DO Skip2 = INT(8 * RND(1) + 1) LOOP WHILE Skip1 = Skip2 DO Skip3 = INT(8 * RND(1) + 1) LOOP WHILE Skip3 = Skip1 OR Skip3 = Skip1 FOR I = 1 TO 8 READ a1, b1, c1, d1 a1 = a1 + 190: c1 = c1 + 190 IF Skip1 <> I AND Skip2 <> I AND Skip3 <> I THEN LINE (a1, b1)-(c1, d1), 12, BF END IF NEXT I RESTORE 'Galaxy 3 Skip1 = INT(8 * RND(1) + 1) DO Skip2 = INT(8 * RND(1) + 1) LOOP WHILE Skip1 = Skip2 DO Skip3 = INT(8 * RND(1) + 1) LOOP WHILE Skip3 = Skip1 OR Skip3 = Skip1 FOR I = 1 TO 8 READ a1, b1, c1, d1 a1 = a1 + 380: c1 = c1 + 380 IF Skip1 <> I AND Skip2 <> I AND Skip3 <> I THEN LINE (a1, b1)-(c1, d1), 12, BF END IF NEXT I RESTORE 'Galaxy 4 Skip1 = INT(8 * RND(1) + 1) DO Skip2 = INT(8 * RND(1) + 1) LOOP WHILE Skip1 = Skip2 DO Skip3 = INT(8 * RND(1) + 1) LOOP WHILE Skip3 = Skip1 OR Skip3 = Skip1 FOR I = 1 TO 8 READ a1, b1, c1, d1 b1 = b1 + 230: d1 = d1 + 230 IF Skip1 <> I AND Skip2 <> I AND Skip3 <> I THEN LINE (a1, b1)-(c1, d1), 12, BF END IF NEXT I RESTORE 'Galaxy 5 Skip1 = INT(8 * RND(1) + 1) DO Skip2 = INT(8 * RND(1) + 1) LOOP WHILE Skip1 = Skip2 DO Skip3 = INT(8 * RND(1) + 1) LOOP WHILE Skip3 = Skip1 OR Skip3 = Skip1 FOR I = 1 TO 8 READ a1, b1, c1, d1 a1 = a1 + 190: b1 = b1 + 230: c1 = c1 + 190: d1 = d1 + 230 IF Skip1 <> I AND Skip2 <> I AND Skip3 <> I THEN LINE (a1, b1)-(c1, d1), 12, BF END IF NEXT I RESTORE 'Galaxy 6 Skip1 = INT(8 * RND(1) + 1) DO Skip2 = INT(8 * RND(1) + 1) LOOP WHILE Skip1 = Skip2 DO Skip3 = INT(8 * RND(1) + 1) LOOP WHILE Skip3 = Skip1 OR Skip3 = Skip1 FOR I = 1 TO 8 READ a1, b1, c1, d1 a1 = a1 + 380: b1 = b1 + 230: c1 = c1 + 380: d1 = d1 + 230 IF Skip1 <> I AND Skip2 <> I AND Skip3 <> I THEN LINE (a1, b1)-(c1, d1), 12, BF END IF NEXT I RESTORE END SUB SUB DrawSaucer (x, y, PI) CIRCLE (x, y), 18, 1, , , 8 / 25 PAINT (x, y + 5), 2, 1 CIRCLE (x, y - 3), 18, 1, , , 8 / 25 PAINT (x, y), 0, 1 CIRCLE (x, y), 18, 0, PI / 9, PI / 1.125, 8 / 25 PAINT (x, y), 10, 1 CIRCLE (x, y - 3), 8, 1, -.00001, -3.2 CIRCLE (x, y - 3), 18, 0, 1.35, 1.75, 8 / 25 PAINT (x, y - 4), 11, 1 LINE (x - 4, y - 3)-(x + 4, y - 3), 11 LINE (x - 4, y - 2)-(x + 4, y - 2), 1 END SUB SUB DrawStars FOR B = 1 TO 8 FOR x = 1 TO 640 MagTemp = INT(RND * 3) + 1 IF MagTemp = 1 THEN Magnitude = 7 IF MagTemp = 2 THEN Magnitude = 8 IF MagTemp = 3 THEN Magnitude = 15 PSET (x, INT(RND * 480) + 1), Magnitude NEXT x NEXT B END SUB SUB DrawTargets CIRCLE (160, 120), 15, 14 CIRCLE (160, 120), 7, 14 PAINT (160, 110), 3, 14 PAINT (160, 120), 6, 14 CIRCLE (350, 120), 15, 14 CIRCLE (350, 120), 7, 14 PAINT (350, 110), 3, 14 PAINT (350, 120), 6, 14 CIRCLE (540, 120), 15, 14 CIRCLE (540, 120), 7, 14 PAINT (540, 110), 3, 14 PAINT (540, 120), 6, 14 'Lower Row CIRCLE (160, 350), 15, 14 CIRCLE (160, 350), 7, 14 PAINT (160, 340), 3, 14 PAINT (160, 350), 6, 14 CIRCLE (350, 350), 15, 14 CIRCLE (350, 350), 7, 14 PAINT (350, 340), 3, 14 PAINT (350, 350), 6, 14 CIRCLE (540, 350), 15, 14 CIRCLE (540, 350), 7, 14 PAINT (540, 340), 3, 14 PAINT (540, 350), 6, 14 END SUB SUB FuelUp (TurnNumber, Fuel, Cash, FuelUpWindow(), FuelingDone, FuelPrice) GET (190, 195)-(470, 260), FuelUpWindow LINE (190, 195)-(470, 260), 0, BF LINE (190, 195)-(470, 260), 14, B LINE (192, 197)-(468, 258), 14, B COLOR 14 LOCATE 14, 31 PRINT "F U E L S T A T I O N" GetAmount: COLOR 10 LOCATE 15, 30 PRINT USING "Fuel Units each are $$##.##"; FuelPrice; LOCATE 16, 34 INPUT "How Many"; Buy$ Buy = ABS(VAL(Buy$)) IF Buy * FuelPrice > Cash THEN COLOR 13 LOCATE 15, 30 PRINT "You don't have enough cash." LOCATE 16, 30 PRINT " No credit " BEEP tt = TIMER DO LOOP WHILE TIMER < tt + 2 LOCATE 15, 30 PRINT " " LOCATE 16, 30 PRINT " " GOTO GetAmount ELSE LOCATE 15, 30 PRINT " " LOCATE 16, 30 PRINT " " IF Buy > 0 THEN FOR c = 30 TO 55 SOUND 440, .1 LOCATE 15, c PRINT CHR$(219); tt = TIMER DO LOOP WHILE TIMER < tt + .1 NEXT c LOCATE 15, 30 PRINT "Fueling Operation Complete " LOCATE 16, 29 PRINT "Receipt will arrive by email " tt = TIMER DO LOOP WHILE TIMER < tt + 2 END IF Cash = Cash - (Buy * FuelPrice) Fuel = Fuel + Buy LINE (190, 195)-(470, 260), 0, BF PUT (190, 195), FuelUpWindow FuelingDone = 1 CALL DrawControlPanel(TurnNumber, Fuel, Cash, Shields, Speed, GameTimer) END IF END SUB SUB Instructions (InstructionWindow()) GET (70, 5)-(500, 105), InstructionWindow LINE (70, 5)-(580, 105), 0, BF LINE (70, 5)-(580, 105), 14, B LOCATE 2, 30 COLOR 14 PRINT "--> Instructions <--" COLOR 11 LOCATE 3, 15 PRINT "You will leave your PizzaShop and deliver 6 pizzas" LOCATE 4, 15 PRINT "to a random set of customers. The customers will be" LOCATE 5, 15 PRINT "highlighted as a magenta-colored circle. " LOCATE 6, 16 PRINT " " DO I$ = INKEY$ LOOP WHILE I$ = "" LINE (71, 6)-(579, 104), 0, BF LOCATE 2, 15 PRINT "To deliver the pizza, fly over the circle and the" LOCATE 3, 15 PRINT "pizza will automatically beam down. The next " LOCATE 4, 15 PRINT "customer will be indicated the same way. After" LOCATE 5, 15 PRINT "making all your deliveries, fly back to the shop." LOCATE 6, 16 PRINT " " DO I$ = INKEY$ LOOP WHILE I$ = "" LINE (71, 6)-(579, 104), 0, BF LOCATE 2, 15 PRINT "If you run low on fuel move to the Fuel Stop to" LOCATE 3, 15 PRINT "buy more. If you run out you lose. If you hit" LOCATE 4, 15 PRINT "an asteroid you lose. If shield level goes below" LOCATE 5, 15 PRINT "zero you lose." LOCATE 6, 16 PRINT " " DO I$ = INKEY$ LOOP WHILE I$ = "" LINE (71, 6)-(579, 104), 0, BF LOCATE 2, 15 PRINT "You earn money and a tip for every delivery. You" LOCATE 3, 15 PRINT "must pay for your fuel out of the money you earn." LOCATE 4, 15 PRINT "If you hit a wall or the edge of the screen you will" LOCATE 5, 15 PRINT "lose shield strength. You cannot buy more shields." LOCATE 6, 16 PRINT " " DO I$ = INKEY$ LOOP WHILE I$ = "" LINE (71, 6)-(579, 104), 0, BF LOCATE 2, 15 PRINT " Controls" LOCATE 3, 15 PRINT "Use the arrow keys to start moving." LOCATE 4, 15 PRINT "Space bar will stop you" LOCATE 5, 15 PRINT "Keys 1-5 change your speed." LOCATE 6, 16 PRINT " " DO I$ = INKEY$ LOOP WHILE I$ = "" LINE (70, 5)-(580, 105), 0, BF PUT (70, 5), InstructionWindow END SUB SUB Menu (Choice$) ' Do the menu StartMenu: LOCATE 22, 35 PRINT "Make a choice:" LOCATE 24, 35 PRINT "1. Play" LOCATE 25, 35 PRINT "2. Read Instructions" LOCATE 26, 35 PRINT "3. Quit" DO Choice$ = INKEY$ LOOP WHILE Choice$ = "" IF VAL(Choice$) < 1 OR VAL(Choice$) > 3 THEN GOTO StartMenu END SUB SUB Splash (Stars(), x, y, PI) 'GOTO Title ' Move to the right y = 230 FOR x = 30 TO 600 STEP 3 I$ = INKEY$ IF I$ = CHR$(27) THEN GOTO Skip GET (x - 22, y - 13)-(x + 22, y + 9), Stars CALL DrawSaucer(x, y, PI) T = TIMER DO LOOP WHILE TIMER < T + .03 IF x MOD 66 = 0 THEN CIRCLE (x, 260), 15, 6 PAINT (x, 260), 4, 6 FOR cheese = 1 TO 60 cx = INT(20 * RND(1) + 1) + x - 11 cy = INT(20 * RND(1) + 1) + y + 20 PSET (cx, cy), 14 NEXT cheese END IF LINE (x - 22, y - 13)-(x + 22, y + 9), 0, BF PUT (x - 22, y - 13), Stars NEXT x ' move up x = 600 FOR y = 230 TO 100 STEP -2 I$ = INKEY$ IF I$ = CHR$(27) THEN GOTO Skip GET (x - 22, y - 13)-(x + 22, y + 9), Stars CALL DrawSaucer(x, y, PI) T = TIMER DO LOOP WHILE TIMER < T + .03 LINE (x - 22, y - 13)-(x + 22, y + 9), 0, BF PUT (x - 22, y - 13), Stars NEXT y ' move to the left y = 100 FOR x = 600 TO 30 STEP -3 I$ = INKEY$ IF I$ = CHR$(27) THEN GOTO Skip GET (x - 22, y - 13)-(x + 22, y + 9), Stars CALL DrawSaucer(x, y, PI) T = TIMER DO LOOP WHILE TIMER < T + .03 IF x MOD 66 = 0 THEN CIRCLE (x, 130), 15, 6 PAINT (x, 130), 4, 6 FOR cheese = 1 TO 60 cx = INT(20 * RND(1) + 1) + x - 11 cy = INT(20 * RND(1) + 1) + y + 20 PSET (cx, cy), 14 NEXT cheese END IF LINE (x - 22, y - 13)-(x + 22, y + 9), 0, BF PUT (x - 22, y - 13), Stars NEXT x ' move down y = 100 FOR y = 100 TO 200 STEP 2 I$ = INKEY$ IF I$ = CHR$(27) THEN GOTO Skip GET (x - 22, y - 13)-(x + 22, y + 9), Stars CALL DrawSaucer(x, y, PI) T = TIMER DO LOOP WHILE TIMER < T + .03 LINE (x - 22, y - 13)-(x + 22, y + 9), 0, BF PUT (x - 22, y - 13), Stars NEXT y ' Move to the right y = 200 FOR x = 30 TO 75 STEP 2 I$ = INKEY$ IF I$ = CHR$(27) THEN GOTO Skip GET (x - 22, y - 13)-(x + 22, y + 9), Stars CALL DrawSaucer(x, y, PI) T = TIMER DO LOOP WHILE TIMER < T + .03 LINE (x - 22, y - 13)-(x + 22, y + 9), 0, BF PUT (x - 22, y - 13), Stars NEXT x CALL DrawSaucer(x, y, PI) Title: LOCATE 11, 18 COLOR 15 T$ = "T h e I n t e r g a l a c t i c P i z z a" FOR I = 1 TO LEN(T$) PRINT MID$(T$, I, 1); SOUND 300, .1 T = TIMER DO LOOP WHILE TIMER < T + .1 NEXT I LOCATE 13, 18 T$ = "D e l i v e r y S y s t e m T r a i n e r" FOR I = 1 TO LEN(T$) PRINT MID$(T$, I, 1); SOUND 300, .1 T = TIMER DO LOOP WHILE TIMER < T + .1 NEXT I LOCATE 15, 32 T$ = "V e r s i o n .08" FOR I = 1 TO LEN(T$) PRINT MID$(T$, I, 1); SOUND 300, .1 T = TIMER DO LOOP WHILE TIMER < T + .1 NEXT I Skip: END SUB SUB UpdateAsteroids (Asteroid1(), Asteroid2(), Asteroid3(), Asteroid4(), Asteroid5(), Ast1x, Ast1y, Ast2x, Ast2y, Ast3x, Ast3y, Ast4x, Ast4y, Ast5x, Ast5y, Ast1Timer) IF TIMER - Ast1Timer > .2 THEN LINE (Ast1x - 5, Ast1y - 5)-(Ast1x + 5, Ast1y + 5), 0, BF PUT (Ast1x - 5, Ast1y - 5), Asteroid1 Ast1y = Ast1y + 2 IF Ast1y > 440 THEN Ast1y = 10 GET (Ast1x - 5, Ast1y - 5)-(Ast1x + 5, Ast1y + 5), Asteroid1 CIRCLE (Ast1x, Ast1y), 4, 7 PAINT (Ast1x, Ast1y), 14, 7 LINE (Ast2x - 5, Ast2y - 5)-(Ast2x + 5, Ast2y + 5), 0, BF PUT (Ast2x - 5, Ast2y - 5), Asteroid2 Ast2y = Ast2y + 4 IF Ast2y > 440 THEN Ast2y = 10 GET (Ast2x - 5, Ast2y - 5)-(Ast2x + 5, Ast2y + 5), Asteroid2 CIRCLE (Ast2x, Ast2y), 4, 7 PAINT (Ast2x, Ast2y), 14, 7 LINE (Ast3x - 5, Ast3y - 5)-(Ast3x + 5, Ast3y + 5), 0, BF PUT (Ast3x - 5, Ast3y - 5), Asteroid3 Ast3y = Ast3y + 1 IF Ast3y > 440 THEN Ast3y = 10 GET (Ast3x - 5, Ast3y - 5)-(Ast3x + 5, Ast3y + 5), Asteroid3 CIRCLE (Ast3x, Ast3y), 4, 7 PAINT (Ast3x, Ast3y), 14, 7 LINE (Ast4x - 5, Ast4y - 5)-(Ast4x + 5, Ast4y + 5), 0, BF PUT (Ast4x - 5, Ast4y - 5), Asteroid4 Ast4y = Ast4y + 4 IF Ast4y > 440 THEN Ast4y = 10 GET (Ast4x - 5, Ast4y - 5)-(Ast4x + 5, Ast4y + 5), Asteroid4 CIRCLE (Ast4x, Ast4y), 4, 7 PAINT (Ast4x, Ast4y), 14, 7 LINE (Ast5x - 5, Ast5y - 5)-(Ast5x + 5, Ast5y + 5), 0, BF PUT (Ast5x - 5, Ast5y - 5), Asteroid5 Ast5x = Ast5x - 4 IF Ast5x < 20 THEN Ast5x = 620 GET (Ast5x - 5, Ast5y - 5)-(Ast5x + 5, Ast5y + 5), Asteroid5 CIRCLE (Ast5x, Ast5y), 4, 7 PAINT (Ast5x, Ast5y), 14, 7 Ast1Timer = TIMER END IF END SUB