'===========================================================================
' Subject: SPACE INVADERS WITH MUSIC          Date: 05-03-96 (00:00)       
'  Author: Kenneth Green                      Code: QB, QBasic, PDS        
'  Origin: geocities.com/TimesSquare/2609   Packet: GAMES.ABC
'===========================================================================
DEF fnrand (n) = INT(RND(1) * n) + 1
v$(1) = "&hb0&h20&h23&h40&h43&h60&h63&h80&h83&hA0&hB0"
v$(2) = "&hb1&h21&h24&h41&h44&h61&h64&h81&h84&hA1&hB1"
v$(3) = "&hb2&h22&h25&h42&h45&h62&h65&h82&h85&hA2&hB2"
v$(4) = "&hb3&h28&h2b&h48&h4b&h68&h6b&h88&h8b&hA3&hB3"
v$(5) = "&hb7&h31&h51&h71&h91&ha7&h34&h54&h74&h94&hB7"
v$(6) = "&hb8&h32&h52&h72&h92&ha8&h35&h55&h75&h95&hb8"
S$(1) = "&h11&h0C&H03&H10&h00&hF8&hC2&h27&h70&h8E&h22"
S$(2) = "&h11&h0C&H03&H10&h00&hF8&hC2&h27&h70&hBA&h22"
S$(3) = "&h11&hc0&h00&h00&h00&h94&h33&h24&h00&hbb&h28"
S$(4) = "&h11&hf4&h11&h00&h00&hbf&hb0&h42&h79&h98&h3a"
S$(5) = "&h00&h00&h00&h00&h00&h00&h00&h00&h00&h00&h00"
S$(6) = "&h11&hf9&h10&h00&h00&hf1&hd2&h15&h47&h8a&hfb"
S$(7) = "&h11&hc0&h00&h00&h00&h94&h33&h24&h00&hbb&h23"
S$(8) = "&h11&hf4&h11&h00&h00&hbf&hb0&h42&h79&h98&h3b"
S$(9) = "&h00&h06&h40&hf3&h34&h21&hd1&h00&hd0&h7f&h2c"
S$(10) = "&h00&h02&h00&hf0&h47&ha0&h00&h00&h40&h78&h20"
10 CLS : n = 0: n2 = 0: n3 = 0: S = 0
20 SCREEN 13
40 DIM TK(100, 100)
45 LINE (120, 110)-(130, 120), , BF
60 GET (100, 108)-(176, 56), TK
90 DIM ALIEN(50, 50)
95 LINE (12, 5)-(20, 15), 10, BF: LINE (12, 10)-(7, 10), 10: LINE (7, 10)-(7, 5), 10
96 LINE (20, 10)-(25, 10), 10: LINE (25, 10)-(25, 5), 10
110 GET (0, 8)-(176, 56), ALIEN
122 DIM ALIEN2(50, 50)
123 LINE (12, 5)-(20, 15), 4, BF: LINE (12, 10)-(7, 10), 4: LINE (7, 10)-(7, 15), 4: LINE (20, 10)-(25, 10), 4: LINE (25, 10)-(25, 15), 4
124 GET (0, 8)-(176, 56), ALIEN2
125 CLS
130 PRINT "         SPACE      INVADERS!"
135 FOR z = 1 TO 5
137 na = 1: nb = 68
140 na2 = 200: nb2 = 74
148 start:
149 na = na + 1: IF na > 100 THEN GOTO t
150 na2 = na2 - 1: IF na2 < 100 THEN GOTO t
151 LINE (na, nb)-(na + 50, nb + 5), 4, BF
152 LINE (na2, nb2)-(na2 + 50, nb2 + 5), 1, BF
153 FOR TM = 1 TO 100: NEXT TM
155 LINE (na, nb)-(na + 50, nb + 5), 0, BF
156 LINE (na2, nb2)-(na2 + 50, nb2 + 5), 0, BF
157 GOTO start
158 t:
159 IF z = 1 THEN LOCATE 10, 14: COLOR 10: PRINT "GAME"
160 IF z = 2 THEN LOCATE 10, 14: COLOR 4: PRINT "CREATED"
161 IF z = 3 THEN LOCATE 10, 14: COLOR 10: PRINT "  BY   "
162 IF z = 4 THEN LOCATE 10, 14: COLOR 4: PRINT "KENNETH"
163 IF z = 5 THEN LOCATE 10, 14: COLOR 10: PRINT " GREEN "
164 NEXT z
165 FOR TM = 1 TO 6000: NEXT TM
166 LOCATE 10, 14: PRINT "      "
167 COLOR 30
168 LOCATE 13, 1
169 PRINT "USE THE ARROW KEYS TO MOVE THE TANK": PRINT "LEFT AND RIGHT AND PRESS F": PRINT "TO FIRE."
170 PRINT "TO QUIT EARLY, PRESS ESCAPE."
171 PRINT "YOU CAN SHOOT EVEN IF THE": PRINT "TANK DISAPPEARS WHEN THE INVADERS ARE": PRINT "TOO CLOSE TO YOU."
175 PRINT "DO NOT HOLD ANY BUTTONS DOWN": PRINT "OR THE COMPUTER WILL BEEP AT YOU."
180 INPUT "PRESS <ENTER> TO START."; ST$
185 d = .5
190 x = 100: y = 120: x2 = 12: y2 = 5: x5 = 80: y5 = 5: X4 = 140: Y4 = 5
195 CLS
196 IF x < 1 THEN x = 1
197 IF x > 230 THEN x = 230
200 LOCATE 1, 1: PRINT "SCORE "; S
205 LINE (x, y)-(x + 10, y + 10), , BF: LINE (x + 5, y)-(x + 5, y - 5)
210 IF n <> 1 THEN PUT (x2, y2), ALIEN, PSET
220 IF n2 <> 1 THEN PUT (x5, y5), ALIEN, PSET
230 IF n3 <> 1 THEN PUT (X4, Y4), ALIEN, PSET
300 A$ = INKEY$
310 IF A$ = CHR$(0) + CHR$(77) THEN x = x + 20
320 IF A$ = CHR$(0) + CHR$(75) THEN x = x - 20
330 IF A$ = "F" OR A$ = "f" THEN 500
335 IF A$ = CHR$(27) THEN END
340 y2 = y2 + d: y5 = y5 + d: Y4 = Y4 + d
350 IF y2 > 100 THEN 1000
361 GOSUB SOUN
262 IF n <> 1 THEN PUT (x2, y2), ALIEN2, PSET
263 IF n2 <> 1 THEN PUT (x5, y5), ALIEN2, PSET
264 IF n3 <> 1 THEN PUT (X4, Y4), ALIEN2, PSET
368 y2 = y2 + d: y5 = y5 + d: Y4 = Y4 + d
400 FOR TM = 1 TO 2000: NEXT TM
485 GOTO 195
500 LINE (x + 5, y + 10)-(x + 5, 1): GOSUB SOUN: LINE (x + 5, y + 10)-(x + 5, 1), 0
510 IF x / x2 > .01 AND x / x2 < 1.8 AND n <> 1 THEN S = S + 100: n = 1: GOTO 2000
520 IF x / x5 > .7 AND x / x5 < 1.3 AND n2 <> 1 THEN S = S + 100: n2 = 1: GOTO 2000
530 IF x / X4 > .7 AND x / X4 < 1.3 AND n3 <> 1 THEN S = S + 100: n3 = 1: GOTO 2000
590 GOTO 195
1000 GOTO 2060
2000 IF n = 1 AND n2 = 1 AND n3 = 1 THEN 2050
2040 GOTO 195
2050 d = d + .5: n = 0: n2 = 0: n3 = 0
2052 IF d > 4 THEN d = 4: GOTO 2057
2056 GOTO 190
2057 CLS : PRINT "   G O O D       J O B ! !"
2058 PLAY "G5>C2<C4>p8C4B3<F2>": LOCATE 4, 1: PRINT "SCORE "; S
2060 INPUT "Would you like to play again(Y/N)."; eg$
2070 CLOSE
2080 IF eg$ = "Y" OR eg$ = "y" THEN 10
2090 END
SOUN:
IF A$ = "f" OR A$ = "F" THEN snd = 3: voc = 1: FOR TM = 1 TO 400: NEXT TM: GOTO SRESET
bks = 1: bkn = bkn + 1: IF bkn > 2 THEN bkn = 1
snd = bkn: voc = 1
SRESET:
FOR in = 0 TO 50
OUT &H388, in: FOR i1 = 1 TO 6: p = INP(&H388): NEXT
OUT &H389, 0: FOR i1 = 1 TO 35: p = INP(&H388): NEXT
NEXT
FOR in = 1 TO 44 STEP 4: A$ = MID$(v$(voc), in, 4)
A = VAL(A$): b$ = MID$(S$(snd), in, 4)
b = VAL(b$)
OUT &H388, A: FOR i1 = 1 TO 6: p = INP(&H388): NEXT
OUT &H389, b: FOR i1 = 1 TO 35: p = INP(&H388): NEXT
NEXT
RETURN
