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