'=========================================================================== ' Subject: SPACE MAN FRED Date: 08-21-96 (14:55) ' Author: Ben Kington Code: QB, QBasic, PDS ' Origin: comp.lang.basic.misc Packet: GAMES.ABC '=========================================================================== 'Space Man Fred v 1.1 'by Ben Kington shphlth = 60 agn: skipinto: RANDOMIZE TIMER 'notes to my self: 'K=Left 'M=Right 'P=Down 'H = Up cokcol = 1 SCREEN 13 a = 160 'Define some variables mis = 3 en = 5 enm = 1 enspd = 1 timens = INT(TIMER + 120 - enspd) enaway = 6 encol = 1 avt = 165 env = 10 shphlth = 60 starx1 = INT(RND * 319) + 1 'Make ten stars stary1 = INT(RND * 199) + 1 starx2 = INT(RND * 319) + 1 stary2 = INT(RND * 199) + 1 starx3 = INT(RND * 319) + 1 stary3 = INT(RND * 199) + 1 starx4 = INT(RND * 319) + 1 stary4 = INT(RND * 199) + 1 starx5 = INT(RND * 319) + 1 stary5 = INT(RND * 199) + 1 starx6 = INT(RND * 199) + 1 stary6 = INT(RND * 319) + 1 starx7 = INT(RND * 199) + 1 stary7 = INT(RND * 319) + 1 starx8 = INT(RND * 199) + 1 stary8 = INT(RND * 319) + 1 starx9 = INT(RND * 199) + 1 stary9 = INT(RND * 319) + 1 starx10 = INT(RND * 199) + 1 stary10 = INT(RND * 319) + 1 PSET (starx1, stary1), 15 PSET (starx2, stary1), 15 PSET (starx3, stary3), 15 PSET (starx4, stary4), 15 PSET (starx5, stary5), 15 PSET (stary6, starx6), 15 PSET (stary7, starx7), 15 PSET (stary8, starx8), 15 PSET (stary9, starx9), 15 PSET (stary10, starx10), 15 planx = INT(RND * 290) + 30 plany = INT(RND * 170) + 30 pc = 1 rc = 4 DO COLOR 0 LINE (planx - 30, plany - 30)-(planx + 30, plany + 30), , BF COLOR 15 CIRCLE (planx, plany), 20, pc PAINT (planx, plany - 15), pc PAINT (planx, plany + 15), pc CIRCLE (planx, plany), 30, rc, , , .1 LINE (planx - 17, plany - 3)-(planx + 17, plany - 3), pc LINE (planx - 20, plany - 2)-(planx + 20, plany - 2), pc plany = plany + 1 IF plany > 450 THEN planx = INT(RND * 290) + 30 plany = 0 pc = INT(RND * 15) + 1 rc = INT(RND * 15) + 1 IF rc = pc THEN rc = INT(RND * 15) + 1 COLOR 0 LINE (planx - 25, plany - 25)-(planx + 25, plany + 25), , BF COLOR 15 END IF PSET (starx1, stary1), 0 PSET (starx2, stary1), 0 PSET (starx1, stary1), 0 PSET (starx3, stary3), 0 PSET (starx4, stary4), 0 PSET (starx5, stary5), 0 PSET (stary6, starx6), 0 PSET (stary7, starx7), 0 PSET (stary8, starx8), 0 PSET (stary9, starx9), 0 PSET (stary10, starx10), 0 stary1 = stary1 + 1 stary2 = stary2 + 2 stary3 = stary3 + 1 stary4 = stary4 + 1 stary5 = stary5 + 2 starx6 = starx6 + 1 starx7 = starx7 + 1 starx8 = starx8 + 2 starx9 = starx9 + 1 starx10 = starx10 + 2 IF stary1 > 200 THEN stary1 = 0 starx1 = INT(RND * 320) + 1 END IF IF stary2 > 200 THEN stary2 = 0 starx2 = INT(RND * 320) + 1 END IF IF stary3 > 200 THEN stary3 = 0 starx3 = INT(RND * 320) + 1 END IF IF stary4 > 200 THEN stary4 = 0 starx4 = INT(RND * 320) + 1 END IF IF stary5 > 200 THEN stary5 = 0 starx5 = INT(RND * 320) + 1 END IF IF starx6 > 200 THEN starx6 = 0 stary6 = INT(RND * 320) + 1 END IF IF starx7 > 200 THEN starx7 = 0 stary7 = INT(RND * 320) + 1 END IF IF starx8 > 200 THEN starx8 = 0 stary8 = INT(RND * 320) + 1 END IF IF starx9 > 200 THEN starx9 = 0 stary9 = INT(RND * 320) + 1 END IF IF starx10 > 200 THEN starx10 = 0 stary10 = INT(RND * 320) + 1 END IF PSET (starx2, stary1), 15 PSET (starx3, stary3), 15 PSET (starx4, stary4), 15 PSET (starx5, stary5), 15 PSET (stary6, starx6), 15 PSET (stary7, starx7), 15 PSET (stary8, starx8), 15 PSET (stary9, starx9), 15 PSET (stary10, starx10), 15 COLOR 15 LINE (4, 185)-(66, 190), , B COLOR 1 LINE (5, 186)-(5 + shphlth, 189), , BF timen = INT(timens - TIMER) COLOR 15 LOCATE 1, 1 PRINT "Score: "; scr; " Timer:"; timen; " Missles:"; mis en1 = en - 5 en2 = en + 5 COLOR 0 LINE (en1 - 1, env - 1)-(en2 + 1, env + 11), , BF COLOR encol LINE (en1, env)-(en2, env) 'DRAW THE ENEMY LINE (en1, env)-(en1, env + 5) LINE (en2, env)-(en2, env + 5) LINE (en2, env + 5)-(en1, env + 5) LINE (en, env + 5)-(en, env + 10) PAINT (en, env + 1) CHUNK$ = UCASE$(INKEY$) b1 = a + 10 b2 = a - 10 c = b1 - 2 d = b2 + 2 avb = avt + 15 abh = avb - 2 SELECT CASE CHUNK$ CASE CHR$(0) + "M" IF b1 <> 320 THEN a = a + 10 'SOUND 60, 1 CASE CHR$(0) + "K" IF b2 <> 1 THEN a = a - 10 'SOUND 60, 1 CASE CHR$(0) + "P" IF avt <> 190 THEN avt = avt + 5 CASE CHR$(0) + "H" IF avt <> 10 THEN avt = avt - 5 CASE CHR$(32) SOUND 1000, 1 'LINE (a, avt)-(a, env), 4 COLOR 15 LINE (a, avt)-(b1, avb) 'Draw the ship LINE (a, avt)-(b2, avb) LINE (c, abh)-(d, abh) CIRCLE (a, avt + 5), 2, cokcol PAINT (a, avt + 5), cokcol shot = avt DO COLOR 15 LINE (a, avt)-(b1, avb) 'Draw the ship LINE (a, avt)-(b2, avb) LINE (c, abh)-(d, abh) CIRCLE (a, avt + 5), 2, cokcol PAINT (a, avt + 5), cokcol CIRCLE (a, shot + 5), 2, 0 CIRCLE (a, shot + 5), 1, 0 PSET (a, shot + 5), 0 PSET (a, shot), 4 CIRCLE (a, shot), 1, 44 CIRCLE (a, shot), 2, 111 'PLAY "p64" fdel = TIMER del = TIMER + .004 DO: LOOP WHILE del > TIMER shot = shot - 5 LOOP WHILE shot > env CIRCLE (a, shot + 5), 2, 0 CIRCLE (a, shot + 5), 1, 0 PSET (a, shot + 5), 0 IF a > en1 - 3 AND a < en2 + 3 THEN ens = 2 CASE CHR$(48) IF mis > 0 AND avt > env THEN LINE (a, avt)-(en, env), 2 SOUND 1000, 1 goo = INT(TIMER) gooer = goo + 1 DO LOOP WHILE gooer <> INT(TIMER) mis = mis - 1 ens = 2 LINE (a, avt)-(en, env), 0 END IF END SELECT COLOR 0 LINE (b1 + 15, avt - 16)-(b2 - 15, avb + 16), , BF COLOR 15 LINE (a, avt)-(b1, avb) 'Draw the ship LINE (a, avt)-(b2, avb) LINE (c, abh)-(d, abh) CIRCLE (a, avt + 5), 2, cokcol PAINT (a, avt + 5), cokcol en1 = en - 5 en2 = en + 5 COLOR encol LINE (en1, env)-(en2, env) 'DRAW THE ENEMY LINE (en1, env)-(en1, env + 5) LINE (en2, env)-(en2, env + 5) LINE (en2, env + 5)-(en1, env + 5) LINE (en, env + 5)-(en, env + 10) PAINT (en, env + 1) emover = INT(RND * 100) + 1 'move the enemy ' ^^^ This number determines how often the enemy 'changes directions. IF emover = 1 AND emove <> 2 THEN emove = 2 IF emover = 2 AND emove <> 1 THEN emove = 1 IF emover = 3 AND emovev <> 1 THEN emovev = 1 IF emover = 4 AND emovev <> 2 THEN emovev = 2 IF en = 5 THEN emove = 1 IF en > 315 THEN emove = 2 IF env = 2 THEN emovev = 1 IF env = 179 OR env > 179 THEN emovev = 2 IF emove = 1 THEN en = en + 1 IF emove = 2 THEN en = en - 1 IF emovev = 1 THEN env = env + 1 IF emovev = 2 THEN env = env - 1 IF en < b1 AND en > b2 AND env + 30 > avt AND env < avt THEN LINE (en, env + 10)-(en, avt + 10), 14 shipst = 2 PLAY "<< gob gob = TIMER LOOP COLOR 0 LINE (en1 - 1, env - 1)-(en2 + 1, env + 11), , BF COLOR 15 en = 5 env = 10 END IF IF shipst = 2 THEN shphlth = shphlth - 10 COLOR 0 LINE (b1 + 15, avt - 16)-(b2 - 15, avb + 16), , BF LINE (4, 185)-(66, 190), , BF COLOR 15 shipst = 1 END IF IF ens = 2 THEN 'Kill the enemy 'FOR exspld = 1 TO 10 'CIRCLE (en, env), exspld, 8 SOUND 100, 2 SOUND 130, 2 SOUND 90, 2 'NEXT exspld COLOR 0 LINE (en1 - 1, env - 1)-(en2 + 1, env + 11), , BF FOR firex = 1 TO 200 x = INT(RND * 15) + 1 xb = INT(RND * 15) + 1 yb = INT(RND * 15) + 1 y = INT(RND * 15) + 1 c = INT(RND * 10) + 1 IF c = 1 THEN f = 40 IF c = 2 THEN f = 116 IF c = 3 THEN f = 111 IF c = 4 THEN f = 44 IF c = 5 THEN f = 43 IF c = 6 THEN f = 42 IF c = 7 THEN f = 41 IF c = 8 THEN f = 184 IF c = 9 THEN f = 188 IF c = 10 THEN f = 184 x1 = en + x - xb y1 = env + y - yb PSET (x1, y1), f NEXT firex CLS COLOR 0 LINE (en1 - 55, env - 55)-(en2 + 55, env + 51), , BF COLOR 15 tbon = tbon + timen IF enkill = 5 THEN enspd = enspd + 5: enkill = 0 enkill = enkill + 1 timens = INT(TIMER + 65 - enspd) scr = scr + 100 * enspd en = INT(RND * 315) + 5 ens = 1 encol = encol + 1 IF encol = 15 THEN encol = 1 COLOR 0 LINE (en1 - 15, env - 15)-(en2 + 15, env + 21), , BF COLOR 15 timeen = timen / 8 IF shphlth + timeen < 60 OR shphlth + timeen = 60 THEN shphlth = shphlth + timeen COLOR 15 COLOR 15 END IF LOOP WHILE INKEY$ <> CHR$(27) AND enspd < 115 AND timen > 0 AND shphlth > 0 COLOR encol COLOR 15 PRINT "Score:"; scr PRINT "Time bonus:"; tbon PRINT "Final Score:"; scr + tbon IF timen < 0 OR timen = 0 THEN COLOR 14 'kill the earth LINE (en, env + 16)-(1, 200) LINE (en, env + 16)-(320, 200) PAINT (en, env + 17) LINE (b2, avt + 30)-(b1, avt - 30), , BF gmovr: LOCATE 13, 15 COLOR 4 PRINT "Game Over!" SOUND 100, 2 SOUND 200, 2 SOUND 100, 2 shphlth = 1 END IF IF shphlth < 0 OR shphlth = 0 THEN FOR slip = 1 TO 30 CIRCLE (a, avt + 5), slip, 8 SOUND 100 + slip, 1 NEXT slip GOSUB gmovr END IF IF enspd = 115 THEN COLOR 15 PRINT "Thank you for saving the earth, here is a medal for your bravery:" LINE (140, 50)-(180, 50), 4 LINE (140, 50)-(140, 90), 4 LINE (180, 50)-(180, 90), 4 LINE (180, 90)-(160, 110), 4 LINE (140, 90)-(160, 110), 4 PAINT (160, 105), 4 CIRCLE (160, 140), 30, 44 PAINT (160, 140), 44 END IF INPUT "Would you like to play again?", agn$ IF agn$ = "y" OR agn$ = "Y" THEN GOSUB agn SYSTEM SUB earth COLOR 14 LINE (en, 21)-(1, 200) LINE (en, 21)-(320, 200) PAINT (en, 32) LINE (a, 165)-(b1, 180) 'kill the ship LINE (a, 165)-(b2, 180) LINE (c, 178)-(d, 178) LOCATE 13, 15 COLOR 4 PRINT "Game Over!" END SUB