Samples Gallery & Reference > Games
Tech Invaders 2 by SierraKen
(1/1)
Qwerkey:
Tech Invaders 2
Author: @SierraKen
Source: qb64.org Forum
URL: https://www.qb64.org/forum/index.php?topic=1537.msg107553#msg107553
Version: July 27, 2019
Tags: [Shooter], [Graphics], [Audio]
Description:
This game is a challenge where you try to shoot the enemies. It's also hard to keep away from them firing as well. After working on it for many hours non-stop, I made probably my best game I ever made: so have fun with the game.
Controls:
* Arrow keys: Movement
* Space Bar: Fire
Source Code:
--- Code: QB64: --- 'Tech Invaders 2 'Game made on July 27, 2019 'By Ken G. 'Freeware '--------------------------------------------------------------------------------------------------------------------------------------- 'Directions: 'Move your shooter with the left and right arrow keys and press the space bar to fire at the enemies above. 'The up and down arrow keys make your shooter stop moving. 'Esc key ends at anytime. 'After a couple of rounds, there is the Boss to destroy, which has a health bar that shrinks when you hit him. '--------------------------------------------------------------------------------------------------------------------------------------- 'I have put some descriptions in the code below to make it easier to learn from. ' _SCREENMOVE _MIDDLE begin: DIM NAME$(50), nm$(50), score(50), sccc(50) _TITLE "Tech Invaders 2" CLS SCREEN _NEWIMAGE(800, 600, 32) PRINT: PRINT: PRINT FOR tt = 79 TO 34 STEP -1 LOCATE 3, tt + 1: PRINT " " LOCATE 3, tt: PRINT "T" _DELAY .03 NEXT tt FOR ee = 79 TO 36 STEP -1 LOCATE 3, ee + 1: PRINT " " LOCATE 3, ee: PRINT "E" _DELAY .03 NEXT ee FOR cc = 79 TO 38 STEP -1 LOCATE 3, cc + 1: PRINT " " LOCATE 3, cc: PRINT "C" _DELAY .03 NEXT cc FOR hh = 79 TO 40 STEP -1 LOCATE 3, hh + 1: PRINT " " LOCATE 3, hh: PRINT "H" _DELAY .03 NEXT hh FOR II = 79 TO 47 STEP -1 LOCATE 3, II + 1: PRINT " " LOCATE 3, II: PRINT "I" _DELAY .03 NEXT II FOR NN = 79 TO 49 STEP -1 LOCATE 3, NN + 1: PRINT " " LOCATE 3, NN: PRINT "N" _DELAY .03 NEXT NN FOR VV = 79 TO 51 STEP -1 LOCATE 3, VV + 1: PRINT " " LOCATE 3, VV: PRINT "V" _DELAY .03 NEXT VV FOR AA = 79 TO 53 STEP -1 LOCATE 3, AA + 1: PRINT " " LOCATE 3, AA: PRINT "A" _DELAY .03 NEXT AA FOR DD = 79 TO 55 STEP -1 LOCATE 3, DD + 1: PRINT " " LOCATE 3, DD: PRINT "D" _DELAY .03 NEXT DD FOR EE2 = 79 TO 57 STEP -1 LOCATE 3, EE2 + 1: PRINT " " LOCATE 3, EE2: PRINT "E" _DELAY .03 NEXT EE2 FOR RR = 79 TO 59 STEP -1 LOCATE 3, RR + 1: PRINT " " LOCATE 3, RR: PRINT "R" _DELAY .03 NEXT RR FOR ss = 79 TO 61 STEP -1 LOCATE 3, ss + 1: PRINT " " LOCATE 3, ss: PRINT "S" _DELAY .03 NEXT ss DD = 0 PRINT: PRINT: PRINT PRINT " T W O" PRINT: PRINT: PRINT PRINT " by Ken G." PRINT: PRINT: PRINT PRINT " Use left and right arrow keys to move back and forth." PRINT " Use up or down arrow keys to stop moving." PRINT " Use space bar to fire." PRINT " Esc to end anytime." PRINT: PRINT: PRINT INPUT " Press Enter to start.", start$ CLS e1 = 0 E2 = 0 e3 = 0 lives = 5 points = 0 ushoot = 0 shooting = 0 level = 1 level2 = 1 start = 0 s = 0 xt = 400 yt = 560 B = 0 boss = 0 'Draw your shooter. FOR sz = .25 TO 10 STEP .25 CIRCLE (xt + 10, yt), sz, _RGB32(139, 249, 255) NEXT sz LINE (xt + 8, yt - 7)-(xt + 12, yt - 15), _RGB(139, 249, 255), BF OPENINGSOUND 'This is the start of the main loop. go: 'Choose a random place for the enemy. IF e1 = 0 AND E2 = 0 AND e3 = 0 THEN RANDOMIZE TIMER xx = INT(RND * 200) + 100 RANDOMIZE TIMER yy = INT(RND * 100) + 40 RANDOMIZE TIMER xx2 = INT(RND * 200) + 200 RANDOMIZE TIMER yy2 = INT(RND * 100) + 40 RANDOMIZE TIMER xx3 = INT(RND * 200) + 250 RANDOMIZE TIMER yy3 = INT(RND * 100) + 40 END IF 'Each level has its own loop so it can set a different equation and speed of the enemy. IF level = 1 THEN c1 = 128: c2 = 127: c3 = 255 one: 'sec is not time, it's related to the coordinate of the enemy and speed it goes related to the loop speed. sec = sec + .02 s = (60 - sec) * 6 + 180 x = INT(SIN(s / 180 * 3.141592) * 180) + 325 y = INT(COS(s / 180 * 3.141592) * 180) + 225 x3 = INT(SIN(s / 180 * 3.141592) * 180) + 325 y3 = INT(COS(s / 180 * 3.141592) * 180) + 225 x4 = INT(SIN(s / 180 * 3.141592) * 180) + 325 y4 = INT(COS(s / 180 * 3.141592) * 180) + 225 'GOSUB to drawing draws the enemy robot. IF e1 <> 1 THEN GOSUB drawing: IF E2 <> 1 THEN GOSUB drawing3: IF e3 <> 1 THEN GOSUB drawing4: _DELAY .006 GOSUB ERASE: IF sec > 180 THEN sec = 0 GOTO onedone: END IF 'GOSUB's go to keyboard control and enemy shooting. GOSUB keyboard: GOSUB shoot: GOSUB youshoot2: GOTO one: onedone: END IF 'This level uses the spiral equation so it's a bit different than the others. IF level = 2 THEN c1 = 127: c2 = 216: c3 = 127 xx = 400: yy = 300 xx2 = 100: yy2 = 300 xx3 = 600: yy3 = 300 FOR D = 160 TO 0 STEP -.125 _LIMIT 1000 s = s + .2 x = COS(s * 3.141592 / 180) * D y = SIN(s * 3.151492 / 180) * D x3 = COS(s * 3.141592 / 180) * D y3 = SIN(s * 3.151492 / 180) * D x4 = COS(s * 3.141592 / 180) * D y4 = SIN(s * 3.151492 / 180) * D IF e1 <> 1 THEN GOSUB drawing: IF E2 <> 1 THEN GOSUB drawing3: IF e3 <> 1 THEN GOSUB drawing4: _DELAY .006 GOSUB ERASE: GOSUB keyboard: GOSUB shoot: GOSUB youshoot2: NEXT D FOR D = 0 TO 160 STEP .125 _LIMIT 1000 s = s - .2 x = COS(s * 3.141592 / 180) * D y = SIN(s * 3.151492 / 180) * D x3 = COS(s * 3.141592 / 180) * D y3 = SIN(s * 3.151492 / 180) * D x4 = COS(s * 3.141592 / 180) * D y4 = SIN(s * 3.151492 / 180) * D IF e1 <> 1 THEN GOSUB drawing: IF E2 <> 1 THEN GOSUB drawing3: IF e3 <> 1 THEN GOSUB drawing4: _DELAY .006 GOSUB ERASE: GOSUB keyboard: GOSUB shoot: GOSUB youshoot2: NEXT D END IF IF level = 3 THEN c1 = 255: c2 = 0: c3 = 0 three: sec = sec + .02 s = (60 - sec) * 6 + 180 x = INT(SIN(s / 90 * 3.141592) * 180) + 325 y = INT(COS(s / 180 * 3.141592) * 180) + 225 x3 = INT(SIN(s / 90 * 3.141592) * 180) + 325 y3 = INT(COS(s / 180 * 3.141592) * 180) + 225 x4 = INT(SIN(s / 90 * 3.141592) * 180) + 325 y4 = INT(COS(s / 180 * 3.141592) * 180) + 225 IF e1 <> 1 THEN GOSUB drawing: IF E2 <> 1 THEN GOSUB drawing3: IF e3 <> 1 THEN GOSUB drawing4: _DELAY .006 GOSUB ERASE: IF sec > 60 THEN sec = 0 GOTO threedone: END IF GOSUB keyboard: GOSUB shoot: GOSUB youshoot2: GOTO three: threedone: END IF IF level = 4 THEN c1 = 255: c2 = 255: c3 = 127 four: sec = sec + .02 s = (60 - sec) * 6 + 180 x = INT(SIN(s / 180 * 3.141592) * 180) + 325 y = INT(COS(s / 90 * 3.141592) * 180) + 225 x3 = INT(SIN(s / 180 * 3.141592) * 180) + 325 y3 = INT(COS(s / 90 * 3.141592) * 180) + 225 x4 = INT(SIN(s / 180 * 3.141592) * 180) + 325 y4 = INT(COS(s / 90 * 3.141592) * 180) + 225 IF e1 <> 1 THEN GOSUB drawing: IF E2 <> 1 THEN GOSUB drawing3: IF e3 <> 1 THEN GOSUB drawing4: _DELAY .006 GOSUB ERASE: IF sec > 60 THEN sec = 0 GOTO fourdone: END IF GOSUB keyboard: GOSUB shoot: GOSUB youshoot2: GOTO four: fourdone: END IF IF level = 5 THEN c1 = 133: c2 = 28: c3 = 255 five: sec = sec + .02 s = (60 - sec) * 6 + 180 x = INT(SIN(s / 135 * 3.141592) * 180) + 325 y = INT(COS(s / 33.75 * 3.141592) * 180) + 225 x3 = INT(SIN(s / 135 * 3.141592) * 180) + 325 y3 = INT(COS(s / 33.75 * 3.141592) * 180) + 225 x4 = INT(SIN(s / 135 * 3.141592) * 180) + 325 y4 = INT(COS(s / 33.75 * 3.141592) * 180) + 225 IF e1 <> 1 THEN GOSUB drawing: IF E2 <> 1 THEN GOSUB drawing3: IF e3 <> 1 THEN GOSUB drawing4: _DELAY .006 GOSUB ERASE: IF sec > 60 THEN sec = 0 GOTO fivedone: END IF GOSUB keyboard: GOSUB shoot: GOSUB youshoot2: GOTO five: fivedone: END IF IF level = 6 THEN e1 = 0: E2 = 1: e3 = 1 boss = 1 c1 = 255: c2 = 0: c3 = 0 six: sec = sec + .02 s = (60 - sec) * 6 + 180 x = INT(SIN(s / 45 * 3.141592) * 180) + 325 y = INT(COS(s / 360 * 3.141592) * 180) + 225 GOSUB drawing2: IF sec > 120 THEN sec = 0 GOTO sixdone: END IF GOSUB keyboard: GOSUB shoot: GOSUB youshoot2: GOTO six: sixdone: END IF IF level = 7 THEN level = 1 GOTO go: 'GOTO goes back to the start of the main loop. 'Draws the enemy tank and erases it for animation. drawing: x2 = x + xx: y2 = y + yy FOR t = 15 TO 20 STEP .25 CIRCLE (x2, y2), t, _RGB32(0, 255, 255) NEXT t FOR t = .25 TO 15 STEP .25 CIRCLE (x2, y2), t, _RGB32(c1, c2, c3) NEXT t FOR t = .25 TO 3 STEP .25 CIRCLE (x2 - 10, y2 - 5), t, _RGB32(0, 255, 255) CIRCLE (x2 + 10, y2 - 5), t, _RGB32(0, 255, 255) CIRCLE (x2, y2 + 10), t, _RGB32(0, 255, 255) NEXT t RETURN drawing3: x5 = x3 + xx2: y5 = y3 + yy2 FOR t = 15 TO 20 STEP .25 CIRCLE (x5, y5), t, _RGB32(0, 255, 255) NEXT t FOR t = .25 TO 15 STEP .25 CIRCLE (x5, y5), t, _RGB32(c1, c2, c3) NEXT t FOR t = .25 TO 3 STEP .25 CIRCLE (x5 - 10, y5 - 5), t, _RGB32(0, 255, 255) CIRCLE (x5 + 10, y5 - 5), t, _RGB32(0, 255, 255) CIRCLE (x5, y5 + 10), t, _RGB32(0, 255, 255) NEXT t RETURN drawing4: x6 = x4 + xx3: y6 = y4 + yy3 FOR t = 15 TO 20 STEP .25 CIRCLE (x6, y6), t, _RGB32(0, 255, 255) NEXT t FOR t = .25 TO 15 STEP .25 CIRCLE (x6, y6), t, _RGB32(c1, c2, c3) NEXT t FOR t = .25 TO 3 STEP .25 CIRCLE (x6 - 10, y6 - 5), t, _RGB32(0, 255, 255) CIRCLE (x6 + 10, y6 - 5), t, _RGB32(0, 255, 255) CIRCLE (x6, y6 + 10), t, _RGB32(0, 255, 255) NEXT t RETURN ERASE: IF e1 = 0 THEN FOR t = .25 TO 20 STEP .25 CIRCLE (x2, y2), t, _RGB32(0, 0, 0) NEXT t END IF IF E2 = 0 THEN FOR t = .25 TO 20 STEP .25 CIRCLE (x5, y5), t, _RGB32(0, 0, 0) NEXT t END IF IF e3 = 0 THEN FOR t = .25 TO 20 STEP .25 CIRCLE (x6, y6), t, _RGB32(0, 0, 0) NEXT t END IF RETURN 'Draws the Boss Robot. drawing2: x2 = x + xx: y2 = y + yy LINE (x2 - 10, y2 - 10)-(x2 + 10, y2 + 10), _RGB32(0, 255, 0), BF LINE (x2 - 2, y2 + 10)-(x2 + 2, y2 + 15), _RGB32(0, 255, 0), BF LINE (x2 - 10, y2 + 15)-(x2 + 10, y2 + 25), _RGB32(0, 255, 0), BF FOR sz = .25 TO 3 STEP .25 CIRCLE (x2 - 5, y2 - 5), sz, _RGB32(0, 0, 0) CIRCLE (x2 + 5, y2 - 5), sz, _RGB32(0, 0, 0) NEXT sz LINE (x2 - 5, y2 + 4)-(x2 + 5, y2 + 8), _RGB32(0, 0, 0), BF _DELAY .004 LINE (x2 - 10, y2 - 10)-(x2 + 10, y2 + 10), _RGB32(0, 0, 0), BF LINE (x2 - 2, y2 + 10)-(x2 + 2, y2 + 15), _RGB32(0, 0, 0), BF LINE (x2 - 10, y2 + 15)-(x2 + 10, y2 + 25), _RGB32(0, 0, 0), BF RETURN 'Keyboard control for your movement and shooting. keyboard: _LIMIT 1000 a$ = INKEY$ IF a$ = CHR$(27) THEN END IF a$ = CHR$(0) + CHR$(77) THEN r = 1: l = 0 IF r = 1 THEN FOR sz = .25 TO 10 STEP .25 CIRCLE (xt + 10, yt), sz, _RGB32(0, 0, 0) NEXT sz LINE (xt + 8, yt - 7)-(xt + 12, yt - 15), _RGB(0, 0, 0), BF xt = xt + 1 IF xt > 780 THEN xt = 780 FOR sz = .25 TO 10 STEP .25 CIRCLE (xt + 10, yt), sz, _RGB32(139, 249, 255) NEXT sz LINE (xt + 8, yt - 7)-(xt + 12, yt - 15), _RGB(139, 249, 255), BF END IF IF a$ = CHR$(0) + CHR$(75) THEN l = 1: r = 0 IF l = 1 THEN FOR sz = .25 TO 10 STEP .25 CIRCLE (xt + 10, yt), sz, _RGB32(0, 0, 0) NEXT sz LINE (xt + 8, yt - 7)-(xt + 12, yt - 15), _RGB(0, 0, 0), BF xt = xt - 1 IF xt < 0 THEN xt = 0 FOR sz = .25 TO 10 STEP .25 CIRCLE (xt + 10, yt), sz, _RGB32(139, 249, 255) NEXT sz LINE (xt + 8, yt - 7)-(xt + 12, yt - 15), _RGB(139, 249, 255), BF END IF IF a$ = CHR$(0) + CHR$(72) OR a$ = CHR$(0) + CHR$(80) THEN r = 0: l = 0 END IF IF a$ = " " THEN GOSUB youshoot: RETURN 'The start of your shot. youshoot: _LIMIT 1000 'sx2 and sy2 are your shot coordinates. IF ushoot = 0 THEN sx2 = xt + 10 sy2 = yt - 20 ushoot = 1 SOUND 400, .5 END IF RETURN 'The drawing and movement of your shot and if it reaches the enemy. youshoot2: _LIMIT 1000 IF ushoot = 1 THEN FOR sz = .25 TO 5 STEP .25 CIRCLE (sx2, sy2), sz, _RGB32(0, 0, 0) NEXT sz sy2 = sy2 - 3 IF sy2 < 0 THEN ushoot = 0: RETURN FOR szz = .25 TO 5 STEP .25 CIRCLE (sx2, sy2), szz, _RGB32(255, 0, 0) NEXT szz IF sx2 > x2 - 21 AND sx2 < x2 + 41 AND sy2 > y2 - 11 AND sy2 < y2 + 21 AND e1 = 0 AND boss = 0 THEN ENEMYEXPLOSION sx2, sy2, x2, y2, sx, sy FOR sz = .25 TO 5 STEP .25 CIRCLE (sx2, sy2), sz, _RGB32(0, 0, 0) NEXT sz GOSUB redrawshooter: points = points + 100 e1 = 1 IF e1 = 1 AND E2 = 1 AND e3 = 1 THEN level = level + 1 level2 = level2 + 1 e1 = 0: E2 = 0: e3 = 0 END IF lives$ = STR$(lives) points$ = STR$(points) level$ = STR$(level2) _TITLE "Tech Invaders 2 Lives: " + lives$ + " Level: " + level$ + " Score: " + points$ ushoot = 0 GOTO go: END IF IF sx2 > x5 - 21 AND sx2 < x5 + 41 AND sy2 > y5 - 11 AND sy2 < y5 + 21 AND E2 = 0 AND boss = 0 THEN ENEMYEXPLOSION2 sx2, sy2, x5, y5, sx3, sy3 FOR sz = .25 TO 5 STEP .25 CIRCLE (sx2, sy2), sz, _RGB32(0, 0, 0) NEXT sz GOSUB redrawshooter: points = points + 100 E2 = 1 IF e1 = 1 AND E2 = 1 AND e3 = 1 THEN level = level + 1 level2 = level2 + 1 e1 = 0: E2 = 0: e3 = 0 END IF lives$ = STR$(lives) points$ = STR$(points) level$ = STR$(level2) _TITLE "Tech Invaders 2 Lives: " + lives$ + " Level: " + level$ + " Score: " + points$ ushoot = 0 GOTO go: END IF IF sx2 > x6 - 21 AND sx2 < x6 + 41 AND sy2 > y6 - 11 AND sy2 < y6 + 21 AND e3 = 0 AND boss = 0 THEN ENEMYEXPLOSION3 sx2, sy2, x6, y6, sx4, sy4 FOR sz = .25 TO 5 STEP .25 CIRCLE (sx2, sy2), sz, _RGB32(0, 0, 0) NEXT sz GOSUB redrawshooter: points = points + 100 e3 = 1 IF e1 = 1 AND E2 = 1 AND e3 = 1 THEN level = level + 1 level2 = level2 + 1 e1 = 0: E2 = 0: e3 = 0 END IF lives$ = STR$(lives) points$ = STR$(points) level$ = STR$(level2) _TITLE "Tech Invaders 2 Lives: " + lives$ + " Level: " + level$ + " Score: " + points$ ushoot = 0 GOTO go: END IF 'To see if you hit the Boss. IF sx2 > x2 - 21 AND sx2 < x2 + 41 AND sy2 > y2 - 11 AND sy2 < y2 + 21 AND e1 = 0 AND boss = 1 THEN B = B + 1 BB = 10 - B LOCATE 3, 3: PRINT "BOSS ROBOT:" IF bx = 0 THEN GOTO bxx: LINE (150, 30)-(bx + 150, 50), _RGB32(0, 0, 0), BF bxx: bx = BB * 10 IF bx < 0 THEN GOTO bxx2: LINE (150, 30)-(bx + 150, 50), _RGB32(227, 0, 0), BF bxx2: SOUND 100, 1 points = points + 100 lives$ = STR$(lives) points$ = STR$(points) level$ = STR$(level2) _TITLE "Tech Invaders 2 Lives: " + lives$ + " Level: " + level$ + " Score: " + points$ FOR sz = .25 TO 5 STEP .25 CIRCLE (sx2, sy2), sz, _RGB32(0, 0, 0) NEXT sz IF B > 10 THEN ENEMYEXPLOSION sx2, sy2, x2, y2, sx, sy IF B < 11 THEN ushoot = 0: RETURN LINE (0, 0)-(800, 200), _RGB32(0, 0, 0), BF GOSUB redrawshooter: bx = 0 BB = 0 B = 0 boss = 0 points = points + 1000 level = level + 1 level2 = level2 + 1 e1 = 0: E2 = 0: e3 = 0 lives$ = STR$(lives) points$ = STR$(points) level$ = STR$(level2) _TITLE "Tech Invaders 2 Lives: " + lives$ + " Level: " + level$ + " Score: " + points$ ushoot = 0 GOTO go: END IF END IF RETURN redrawshooter: FOR sz = .25 TO 10 STEP .25 CIRCLE (xt + 10, yt), sz, _RGB32(139, 249, 255) NEXT sz LINE (xt + 8, yt - 7)-(xt + 12, yt - 15), _RGB(139, 249, 255), BF RETURN 'The enemy's shot and if it reaches you. shoot: _LIMIT 1000 IF shooting = 0 AND e1 = 0 THEN GOSUB checktoshoot: RANDOMIZE TIMER sh = INT(RND * 10000) + 1 IF sh < shh THEN GOTO nexone: 'sx and sy are the first enemy shot coordinates. sx = x2 + 10 sy = y2 + 10 shooting = 1 SOUND 300, .5 END IF nexone: IF shooting2 = 0 AND E2 = 0 THEN GOSUB checktoshoot: RANDOMIZE TIMER sh2 = INT(RND * 10000) + 1 IF sh2 < shh THEN GOTO nexone2: 'sx3 and sy3 are the second enemy shot coordinates. sx3 = x5 + 10 sy3 = y5 + 10 shooting2 = 1 SOUND 300, .5 END IF nexone2: IF shooting3 = 0 AND e3 = 0 THEN GOSUB checktoshoot: RANDOMIZE TIMER sh3 = INT(RND * 10000) + 1 IF sh3 < shh THEN GOTO nexone3: 'sx4 and sy4 are the third enemy shot coordinates. sx4 = x6 + 10 sy4 = y6 + 10 shooting3 = 1 SOUND 300, .5 END IF nexone3: 'To see if first enemy hit you. IF shooting = 1 AND e1 = 0 THEN FOR sz2 = .25 TO 5 STEP .25 CIRCLE (sx, sy), sz2, _RGB32(0, 0, 0) NEXT sz2 sy = sy + 3 IF sy > 620 THEN shooting = 0: GOTO nex4: FOR szz2 = .25 TO 5 STEP .25 CIRCLE (sx, sy), szz2, _RGB32(255, 0, 0) NEXT szz2 IF sx > xt - 1 AND sx < xt + 21 AND sy > yt - 1 AND sy < yt + 21 THEN FOR sz3 = .25 TO 5 STEP .25 CIRCLE (sx, sy), sz3, _RGB32(0, 0, 0) NEXT sz3 shooting = 0 GOSUB explosion: END IF END IF nex4: 'To see if second enemy hit you. IF shooting2 = 1 AND E2 = 0 THEN FOR sz2 = .25 TO 5 STEP .25 CIRCLE (sx3, sy3), sz2, _RGB32(0, 0, 0) NEXT sz2 sy3 = sy3 + 3 IF sy3 > 620 THEN shooting2 = 0: GOTO nexx: FOR szz2 = .25 TO 5 STEP .25 CIRCLE (sx3, sy3), szz2, _RGB32(255, 0, 0) NEXT szz2 IF sx3 > xt - 1 AND sx3 < xt + 21 AND sy3 > yt - 1 AND sy3 < yt + 21 THEN FOR sz3 = .25 TO 5 STEP .25 CIRCLE (sx3, sy3), sz3, _RGB32(0, 0, 0) NEXT sz3 shooting2 = 0 GOSUB explosion: END IF END IF nexx: 'To see if third enemy hit you. IF shooting3 = 1 AND e3 = 0 THEN FOR sz2 = .25 TO 5 STEP .25 CIRCLE (sx4, sy4), sz2, _RGB32(0, 0, 0) NEXT sz2 sy4 = sy4 + 3 IF sy4 > 620 THEN shooting3 = 0: RETURN FOR szz2 = .25 TO 5 STEP .25 CIRCLE (sx4, sy4), szz2, _RGB32(255, 0, 0) NEXT szz2 IF sx4 > xt - 1 AND sx4 < xt + 21 AND sy4 > yt - 1 AND sy4 < yt + 21 THEN FOR sz3 = .25 TO 5 STEP .25 CIRCLE (sx4, sy4), sz3, _RGB32(0, 0, 0) NEXT sz3 shooting3 = 0 GOSUB explosion: END IF END IF RETURN explosion: FOR sz = .25 TO 10 STEP .25 CIRCLE (xt + 10, yt), sz, _RGB32(0, 0, 0) NEXT sz LINE (xt + 8, yt - 7)-(xt + 12, yt - 15), _RGB(0, 0, 0), BF SOUND 400, .5 SOUND 300, .5 SOUND 200, .5 SOUND 100, .5 RANDOMIZE TIMER dxx = (RND * 6) + -3 RANDOMIZE TIMER dyy = (RND * 6) + -3 RANDOMIZE TIMER dxx2 = (RND * 6) + -3 RANDOMIZE TIMER dyy2 = (RND * 6) + -3 RANDOMIZE TIMER dxx3 = (RND * 6) + -3 RANDOMIZE TIMER dyy3 = (RND * 6) + -3 RANDOMIZE TIMER dxx4 = (RND * 6) + -3 RANDOMIZE TIMER dyy4 = (RND * 6) + -3 RANDOMIZE TIMER dxx5 = (RND * 6) + -3 RANDOMIZE TIMER dyy5 = (RND * 6) + -3 RANDOMIZE TIMER dxx6 = (RND * 6) + -3 RANDOMIZE TIMER dyy6 = (RND * 6) + -3 yourexplosion: DD = DD + 1 dxx = dxx + dxx / 4 dxx2 = dxx2 + dxx2 / 4 dxx3 = dxx3 + dxx3 / 4 dxx4 = dxx4 + dxx4 / 4 dxx5 = dxx5 + dxx5 / 4 dxx6 = dxx6 + dxx6 / 4 dyy = dyy + dyy / 4 dyy2 = dyy2 + dyy2 / 4 dyy3 = dyy3 + dyy3 / 4 dyy4 = dyy4 + dyy4 / 4 dyy5 = dyy5 + dyy5 / 4 dyy6 = dyy6 + dyy6 / 4 LINE (xt + dxx, yt + dyy)-(xt + dxx + 2, yt + dyy + 2), _RGB32(255, 0, 0), BF LINE (xt + dxx2, yt + dyy2)-(xt + dxx2 + 2, yt + dyy2 + 2), _RGB32(0, 255, 0), BF LINE (xt + dxx3, yt + dyy3)-(xt + dxx3 + 2, yt + dyy3 + 2), _RGB32(255, 0, 0), BF LINE (xt + dxx4, yt + dyy4)-(xt + dxx4 + 2, yt + dyy4 + 2), _RGB32(0, 255, 0), BF LINE (xt + dxx5, yt + dyy5)-(xt + dxx5 + 2, yt + dyy5 + 2), _RGB32(255, 0, 0), BF LINE (xt + dxx6, yt + dyy6)-(xt + dxx6 + 2, yt + dyy6 + 2), _RGB32(0, 255, 0), BF _DELAY .02 LINE (xt + dxx, yt + dyy)-(xt + dxx + 2, yt + dyy + 2), _RGB32(0, 0, 0), BF LINE (xt + dxx2, yt + dyy2)-(xt + dxx2 + 2, yt + dyy2 + 2), _RGB32(0, 0, 0), BF LINE (xt + dxx3, yt + dyy3)-(xt + dxx3 + 2, yt + dyy3 + 2), _RGB32(0, 0, 0), BF LINE (xt + dxx4, yt + dyy4)-(xt + dxx4 + 2, yt + dyy4 + 2), _RGB32(0, 0, 0), BF LINE (xt + dxx5, yt + dyy5)-(xt + dxx5 + 2, yt + dyy5 + 2), _RGB32(0, 0, 0), BF LINE (xt + dxx6, yt + dyy6)-(xt + dxx6 + 2, yt + dyy6 + 2), _RGB32(0, 0, 0), BF IF DD > 20 THEN GOTO back2: GOTO yourexplosion: back2: DD = 0 lives = lives - 1 lives$ = STR$(lives) points$ = STR$(points) level$ = STR$(level2) _TITLE "Tech Invaders 2 Lives: " + lives$ + " Level: " + level$ + " Score: " + points$ LINE (xt - 22, yt - 42)-(xt + 42, yt + 42), _RGB32(0, 0, 0), BF GOSUB redrawshooter: IF lives = 0 THEN LOCATE 20, 40: PRINT "G A M E O V E R" LOCATE 22, 40: PRINT "Score: "; points LOCATE 23, 40: PRINT "Level: "; level2 LOCATE 25, 40: INPUT "Press Enter to go to Top Ten Scores.", tt$ 'Top Ten Scores scc = points IF _FILEEXISTS("toptentech.txt") THEN ELSE OPEN "toptentech.txt" FOR OUTPUT AS #1 RESTORE originaltopten DO READ toptenname$, toptenscore! IF toptenname$ = "EOF" THEN EXIT DO PRINT #1, toptenname$ PRINT #1, toptenscore! LOOP CLOSE #1 END IF OPEN "toptentech.txt" FOR INPUT AS #1 FOR n = 1 TO 10 INPUT #1, NAME$(n) INPUT #1, score(n) IF scc > score(n) AND sct = 0 THEN NN = n PRINT "You have made the Top Ten!" typename: INPUT "Type your name here (25 letters and spaces maximum.):", nm$(NN) IF LEN(nm$(NN)) > 25 THEN PRINT "Name too long, try again." GOTO typename: END IF sccc(NN) = scc sct = 1 END IF IF n = 10 AND sct = 0 THEN CLOSE #1: GOTO nex7: NEXT n CLOSE #1 nex5: CLOSE #1 OPEN "toptentech.txt" FOR OUTPUT AS #1 FOR n = 1 TO NN IF n <> NN THEN PRINT #1, NAME$(n): PRINT #1, score(n) IF n = NN THEN PRINT #1, nm$(n) PRINT #1, sccc(n) END IF NEXT n nex6: FOR n = NN TO 10 PRINT #1, NAME$(n): PRINT #1, score(n) NEXT n CLOSE #1 nex7: CLS PRINT: PRINT: PRINT PRINT " T O P T E N " PRINT: PRINT: PRINT OPEN "toptentech.txt" FOR INPUT AS #1 FOR n = 1 TO 10 IF EOF(1) THEN GOTO nex8: INPUT #1, NAME$(n) INPUT #1, score(n) PRINT " "; n; ". "; NAME$(n); score(n) NEXT n nex8: CLOSE #1 FOR n = 1 TO 10 nm$(n) = "" score(n) = 0 NAME$(n) = "" sccc(n) = 0 NEXT n NN = 0 n = 0 sct = 0 scc = 0 LOCATE 23, 1 INPUT "Would you like to play again? (Yes/No)", ag$ IF ag$ = "y" OR ag$ = "Y" OR ag$ = "YES" OR ag$ = "yes" OR ag$ = "Yes" OR ag$ = "yES" OR ag$ = "yeS" OR ag$ = "YEs" THEN GOTO begin: END END IF OPENINGSOUND RETURN checktoshoot: IF level2 = 1 THEN shh = 9950 IF level2 = 2 THEN shh = 9945 IF level2 = 3 THEN shh = 9940 IF level2 = 4 THEN shh = 9935 IF level2 = 5 THEN shh = 9930 IF level2 = 6 THEN shh = 9925 IF level2 > 6 THEN shh = 9920 RETURN originaltopten: DATA Space Ace,7000 DATA Suzy Swift,6000 DATA Speedy Spencer,5000 DATA Super Sam,4000 DATA Battery Bob,3000 DATA Karen Kryptonite,2750 DATA Quick Ken,2500 DATA Tiger Tessa,2250 DATA Arcade Joe,2000 DATA How DO U PLAY,1750 DATA EOF,0 SUB OPENINGSOUND snd = 300 snd2 = 800 FOR t = 1 TO 50 IF snd > 800 THEN snd = 300 IF snd2 < 300 THEN snd2 = 800 snd = snd + 10 SOUND snd, .25 NEXT t END SUB SUB ENEMYEXPLOSION (sx2, sy2, x2, y2, sx, sy) FOR sz4 = .25 TO 5 STEP .25 CIRCLE (sx2, sy2), sz4, _RGB32(0, 0, 0) NEXT sz4 SOUND 400, .5 SOUND 300, .5 SOUND 200, .5 SOUND 100, .5 RANDOMIZE TIMER dxx = (RND * 6) + -3 RANDOMIZE TIMER dyy = (RND * 6) + -3 RANDOMIZE TIMER dxx2 = (RND * 6) + -3 RANDOMIZE TIMER dyy2 = (RND * 6) + -3 RANDOMIZE TIMER dxx3 = (RND * 6) + -3 RANDOMIZE TIMER dyy3 = (RND * 6) + -3 RANDOMIZE TIMER dxx4 = (RND * 6) + -3 RANDOMIZE TIMER dyy4 = (RND * 6) + -3 RANDOMIZE TIMER dxx5 = (RND * 6) + -3 RANDOMIZE TIMER dyy5 = (RND * 6) + -3 RANDOMIZE TIMER dxx6 = (RND * 6) + -3 RANDOMIZE TIMER dyy6 = (RND * 6) + -3 explosion1: dd = dd + 1 dxx = dxx + dxx / 4 dxx2 = dxx2 + dxx2 / 4 dxx3 = dxx3 + dxx3 / 4 dxx4 = dxx4 + dxx4 / 4 dxx5 = dxx5 + dxx5 / 4 dxx6 = dxx6 + dxx6 / 4 dyy = dyy + dyy / 4 dyy2 = dyy2 + dyy2 / 4 dyy3 = dyy3 + dyy3 / 4 dyy4 = dyy4 + dyy4 / 4 dyy5 = dyy5 + dyy5 / 4 dyy6 = dyy6 + dyy6 / 4 LINE (x2 + dxx, y2 + dyy)-(x2 + dxx + 2, y2 + dyy + 2), _RGB32(255, 0, 0), BF LINE (x2 + dxx2, y2 + dyy2)-(x2 + dxx2 + 2, y2 + dyy2 + 2), _RGB32(0, 255, 0), BF LINE (x2 + dxx3, y2 + dyy3)-(x2 + dxx3 + 2, y2 + dyy3 + 2), _RGB32(255, 0, 0), BF LINE (x2 + dxx4, y2 + dyy4)-(x2 + dxx4 + 2, y2 + dyy4 + 2), _RGB32(0, 255, 0), BF LINE (x2 + dxx5, y2 + dyy5)-(x2 + dxx5 + 2, y2 + dyy5 + 2), _RGB32(255, 0, 0), BF LINE (x2 + dxx6, y2 + dyy6)-(x2 + dxx6 + 2, y2 + dyy6 + 2), _RGB32(0, 255, 0), BF _DELAY .02 LINE (x2 + dxx, y2 + dyy)-(x2 + dxx + 2, y2 + dyy + 2), _RGB32(0, 0, 0), BF LINE (x2 + dxx2, y2 + dyy2)-(x2 + dxx2 + 2, y2 + dyy2 + 2), _RGB32(0, 0, 0), BF LINE (x2 + dxx3, y2 + dyy3)-(x2 + dxx3 + 2, y2 + dyy3 + 2), _RGB32(0, 0, 0), BF LINE (x2 + dxx4, y2 + dyy4)-(x2 + dxx4 + 2, y2 + dyy4 + 2), _RGB32(0, 0, 0), BF LINE (x2 + dxx5, y2 + dyy5)-(x2 + dxx5 + 2, y2 + dyy5 + 2), _RGB32(0, 0, 0), BF LINE (x2 + dxx6, y2 + dyy6)-(x2 + dxx6 + 2, y2 + dyy6 + 2), _RGB32(0, 0, 0), BF IF dd > 20 THEN GOTO goingback GOTO explosion1: goingback: dd = 0 LINE (x2 - 21, y2 - 21)-(x2 + 41, y2 + 41), _RGB32(0, 0, 0), BF FOR sz4 = .25 TO 5 STEP .25 CIRCLE (sx2, sy2), sz4, _RGB32(0, 0, 0) NEXT sz4 FOR sz4 = .25 TO 5 STEP .25 CIRCLE (sx, sy), sz4, _RGB32(0, 0, 0) NEXT sz4 END SUB SUB ENEMYEXPLOSION2 (sx2, sy2, x5, y5, sx3, sy3) FOR sz5 = .25 TO 5 STEP .25 CIRCLE (sx2, sy2), sz5, _RGB32(0, 0, 0) NEXT sz5 SOUND 400, .5 SOUND 300, .5 SOUND 200, .5 SOUND 100, .5 RANDOMIZE TIMER dxx = (RND * 6) + -3 RANDOMIZE TIMER dyy = (RND * 6) + -3 RANDOMIZE TIMER dxx2 = (RND * 6) + -3 RANDOMIZE TIMER dyy2 = (RND * 6) + -3 RANDOMIZE TIMER dxx3 = (RND * 6) + -3 RANDOMIZE TIMER dyy3 = (RND * 6) + -3 RANDOMIZE TIMER dxx4 = (RND * 6) + -3 RANDOMIZE TIMER dyy4 = (RND * 6) + -3 RANDOMIZE TIMER dxx5 = (RND * 6) + -3 RANDOMIZE TIMER dyy5 = (RND * 6) + -3 RANDOMIZE TIMER dxx6 = (RND * 6) + -3 RANDOMIZE TIMER dyy6 = (RND * 6) + -3 explosion2: dd = dd + 1 dxx = dxx + dxx / 4 dxx2 = dxx2 + dxx2 / 4 dxx3 = dxx3 + dxx3 / 4 dxx4 = dxx4 + dxx4 / 4 dxx5 = dxx5 + dxx5 / 4 dxx6 = dxx6 + dxx6 / 4 dyy = dyy + dyy / 4 dyy2 = dyy2 + dyy2 / 4 dyy3 = dyy3 + dyy3 / 4 dyy4 = dyy4 + dyy4 / 4 dyy5 = dyy5 + dyy5 / 4 dyy6 = dyy6 + dyy6 / 4 LINE (x5 + dxx, y5 + dyy)-(x5 + dxx + 2, y5 + dyy + 2), _RGB32(255, 0, 0), BF LINE (x5 + dxx2, y5 + dyy2)-(x5 + dxx2 + 2, y5 + dyy2 + 2), _RGB32(0, 255, 0), BF LINE (x5 + dxx3, y5 + dyy3)-(x5 + dxx3 + 2, y5 + dyy3 + 2), _RGB32(255, 0, 0), BF LINE (x5 + dxx4, y5 + dyy4)-(x5 + dxx4 + 2, y5 + dyy4 + 2), _RGB32(0, 255, 0), BF LINE (x5 + dxx5, y5 + dyy5)-(x5 + dxx5 + 2, y5 + dyy5 + 2), _RGB32(255, 0, 0), BF LINE (x5 + dxx6, y5 + dyy6)-(x5 + dxx6 + 2, y5 + dyy6 + 2), _RGB32(0, 255, 0), BF _DELAY .02 LINE (x5 + dxx, y5 + dyy)-(x5 + dxx + 2, y5 + dyy + 2), _RGB32(0, 0, 0), BF LINE (x5 + dxx2, y5 + dyy2)-(x5 + dxx2 + 2, y5 + dyy2 + 2), _RGB32(0, 0, 0), BF LINE (x5 + dxx3, y5 + dyy3)-(x5 + dxx3 + 2, y5 + dyy3 + 2), _RGB32(0, 0, 0), BF LINE (x5 + dxx4, y5 + dyy4)-(x5 + dxx4 + 2, y5 + dyy4 + 2), _RGB32(0, 0, 0), BF LINE (x5 + dxx5, y5 + dyy5)-(x5 + dxx5 + 2, y5 + dyy5 + 2), _RGB32(0, 0, 0), BF LINE (x5 + dxx6, y5 + dyy6)-(x5 + dxx6 + 2, y5 + dyy6 + 2), _RGB32(0, 0, 0), BF IF dd > 20 THEN GOTO goingback2: GOTO explosion2: goingback2: dd = 0 LINE (x5 - 21, y5 - 21)-(x5 + 41, y5 + 41), _RGB32(0, 0, 0), BF FOR sz5 = .25 TO 5 STEP .25 CIRCLE (sx2, sy2), sz5, _RGB32(0, 0, 0) NEXT sz5 FOR sz5 = .25 TO 5 STEP .25 CIRCLE (sx3, sy3), sz5, _RGB32(0, 0, 0) NEXT sz5 END SUB SUB ENEMYEXPLOSION3 (sx2, sy2, x6, y6, sx4, sy4) FOR sz6 = .25 TO 5 STEP .25 CIRCLE (sx2, sy2), sz6, _RGB32(0, 0, 0) NEXT sz6 SOUND 400, .5 SOUND 300, .5 SOUND 200, .5 SOUND 100, .5 RANDOMIZE TIMER dxx = (RND * 6) + -3 RANDOMIZE TIMER dyy = (RND * 6) + -3 RANDOMIZE TIMER dxx2 = (RND * 6) + -3 RANDOMIZE TIMER dyy2 = (RND * 6) + -3 RANDOMIZE TIMER dxx3 = (RND * 6) + -3 RANDOMIZE TIMER dyy3 = (RND * 6) + -3 RANDOMIZE TIMER dxx4 = (RND * 6) + -3 RANDOMIZE TIMER dyy4 = (RND * 6) + -3 RANDOMIZE TIMER dxx5 = (RND * 6) + -3 RANDOMIZE TIMER dyy5 = (RND * 6) + -3 RANDOMIZE TIMER dxx6 = (RND * 6) + -3 RANDOMIZE TIMER dyy6 = (RND * 6) + -3 explosion3: dd = dd + 1 dxx = dxx + dxx / 4 dxx2 = dxx2 + dxx2 / 4 dxx3 = dxx3 + dxx3 / 4 dxx4 = dxx4 + dxx4 / 4 dxx5 = dxx5 + dxx5 / 4 dxx6 = dxx6 + dxx6 / 4 dyy = dyy + dyy / 4 dyy2 = dyy2 + dyy2 / 4 dyy3 = dyy3 + dyy3 / 4 dyy4 = dyy4 + dyy4 / 4 dyy5 = dyy5 + dyy5 / 4 dyy6 = dyy6 + dyy6 / 4 LINE (x6 + dxx, y6 + dyy)-(x6 + dxx + 2, y6 + dyy + 2), _RGB32(255, 0, 0), BF LINE (x6 + dxx2, y6 + dyy2)-(x6 + dxx2 + 2, y6 + dyy2 + 2), _RGB32(0, 255, 0), BF LINE (x6 + dxx3, y6 + dyy3)-(x6 + dxx3 + 2, y6 + dyy3 + 2), _RGB32(255, 0, 0), BF LINE (x6 + dxx4, y6 + dyy4)-(x6 + dxx4 + 2, y6 + dyy4 + 2), _RGB32(0, 255, 0), BF LINE (x6 + dxx5, y6 + dyy5)-(x6 + dxx5 + 2, y6 + dyy5 + 2), _RGB32(255, 0, 0), BF LINE (x6 + dxx6, y6 + dyy6)-(x6 + dxx6 + 2, y6 + dyy6 + 2), _RGB32(0, 255, 0), BF _DELAY .02 LINE (x6 + dxx, y6 + dyy)-(x6 + dxx + 2, y6 + dyy + 2), _RGB32(0, 0, 0), BF LINE (x6 + dxx2, y6 + dyy2)-(x6 + dxx2 + 2, y6 + dyy2 + 2), _RGB32(0, 0, 0), BF LINE (x6 + dxx3, y6 + dyy3)-(x6 + dxx3 + 2, y6 + dyy3 + 2), _RGB32(0, 0, 0), BF LINE (x6 + dxx4, y6 + dyy4)-(x6 + dxx4 + 2, y6 + dyy4 + 2), _RGB32(0, 0, 0), BF LINE (x6 + dxx5, y6 + dyy5)-(x6 + dxx5 + 2, y6 + dyy5 + 2), _RGB32(0, 0, 0), BF LINE (x6 + dxx6, y6 + dyy6)-(x6 + dxx6 + 2, y6 + dyy6 + 2), _RGB32(0, 0, 0), BF IF dd > 20 THEN GOTO goingback3: GOTO explosion3: goingback3: dd = 0 LINE (x6 - 21, y6 - 21)-(x6 + 41, y6 + 41), _RGB32(0, 0, 0), BF FOR sz5 = .25 TO 5 STEP .25 CIRCLE (sx2, sy2), sz5, _RGB32(0, 0, 0) NEXT sz5 FOR sz5 = .25 TO 5 STEP .25 CIRCLE (sx4, sy4), sz5, _RGB32(0, 0, 0) NEXT sz5 END SUB
Navigation
[0] Message Index
Go to full version