'=========================================================================== ' Subject: SPACE INVADERS Date: 03-12-96 (19:38) ' Author: Alan Bruzzi Code: QB, QBasic, PDS ' Origin: FidoNet QUIK_BAS Echo Packet: GAMES.ABC '=========================================================================== 1 DIM A$(10, 5), FLAG(10, 5), PS(40), PT(40) RANDOMIZE 10 SCREEN 13: CLS DX = 1: DY = 1: DDX = 1: X3 = 20: X1 = 20: Y1 = 23: SC = 0: C = 0 JK = 0: SHIPS = 3: COLOR 1: I1 = X1: JJ = 0 COLOR 15: LOCATE 24, 1: FOR T = 1 TO 40: PRINT "-"; : NEXT 5 COLOR 3: LOCATE 17, 5: PRINT "ллл" LOCATE 18, 4: PRINT "лл"; : PRINT "1"; : PRINT "лл" LOCATE 19, 4: PRINT "лл лл" LOCATE 17, 20: PRINT "ллл" LOCATE 18, 19: PRINT "лл"; : PRINT "2"; : PRINT "лл" LOCATE 19, 19: PRINT "лл лл" LOCATE 17, 34: PRINT "ллл" LOCATE 18, 33: PRINT "лл"; : PRINT "3"; : PRINT "лл" LOCATE 19, 33: PRINT "лл лл" FOR Y = 1 TO 5: FOR X = 1 TO 10: A$(X, Y) = CHR$(234): FLAG(X, Y) = 0: NEXT: NEXT FOR J = 2 TO 10 STEP 2: FOR K = 2 TO 20 STEP 2: PS(K) = K: PT(J) = J: NEXT: NEXT MISY = PT(10) 15 X = 1: Y = 1: FOR J = 2 TO 10 STEP 2: FOR K = 2 TO 20 STEP 2 IF FLAG(X, Y) = 0 THEN LOCATE PT(J), PS(K): COLOR INT(RND(1) * 15) + 1: PRINT A$(X, Y) X = X + 1: IF X > 10 THEN X = 1 NEXT: Y = Y + 1: IF PT(J) = 22 OR SHIPS <= 0 THEN LOCATE 10, 17: PRINT "GAME OVER": FOR O = 1 TO 100000: NEXT: GOTO 1 NEXT FOR M = 1 TO 5000: NEXT GOSUB 50: GOSUB 300 LOCATE 1, 1: COLOR 15: PRINT "SCORE ="; SC: LOCATE 1, 30: PRINT "SHIPS ="; SHIPS GOSUB 100 IF Y1 <= 2 THEN JJ = 0: LOCATE Y1, X1: PRINT CHR$(32): Y1 = 23 IF JJ = 0 THEN Y1 = 23 IF JJ = 1 THEN I1 = I1: LOCATE Y1, I1: COLOR 15: PRINT CHR$(254): FOR L = 1 TO 500: NEXT: GOSUB 200: LOCATE Y1, I1: PRINT CHR$(32) Y1 = Y1 - 1 FOR J = 2 TO 10 STEP 2: FOR K = 2 TO 20 STEP 2 LOCATE PT(J), PS(K): PRINT " " NEXT: NEXT FOR M = 1 TO 5000: NEXT GOSUB 50 GOSUB 300 FOR X = 2 TO 20 STEP 2 PS(X) = PS(X) + DDX: IF PS(X) > 38 THEN DDX = -DDX: FOR Y = 2 TO 20 STEP 2: PT(Y) = PT(Y) + 1: NEXT IF PS(X) = 0 THEN PS(X) = PS(X) + 2: DDX = -DDX: FOR Y = 2 TO 20 STEP 2: PT(Y) = PT(Y) + 1: NEXT NEXT GOTO 15 50 LOCATE 23, X1: COLOR 14: PRINT CHR$(127) RETURN 100 A$ = INKEY$: IF A$ = "" THEN RETURN IF A$ = "," THEN LOCATE 23, X1: PRINT " ": X1 = X1 - 1: A$ = "" IF A$ = "." THEN LOCATE 23, X1: PRINT " ": X1 = X1 + 1: A$ = "" IF A$ = " " THEN JJ = 1: I1 = X1 IF A$ = CHR$(27) THEN END IF X1 = 0 THEN X1 = X1 + 1 IF X1 = 39 THEN X1 = X1 - 1 RETURN 200 FOR J1 = 2 TO 10 STEP 2: FOR J2 = 2 TO 20 IF FLAG(J2 / 2, J1 / 2) = 0 AND I1 = PS(J2) AND Y1 = PT(J1) THEN A$(J2 / 2, J1 / 2) = " ": FLAG(J2 / 2, J1 / 2) = 1: BEEP: JJ = 0: Y1 = 23: SC = SC + 10 NEXT: NEXT RETURN 300 IF JK = 0 THEN GOSUB 400: MISY = PT(10) + 1: JK = 1: MM = PS(M) LOCATE MISY, MM: COLOR 15: PRINT CHR$(254): FOR L = 1 TO 2000: NEXT: LOCATE MISY, MM: PRINT CHR$(32) MISY = MISY + 1: IF MISY = 23 THEN JK = 0 L = SCREEN(MISY, MM): IF L = 127 THEN SHIPS = SHIPS - 1: BEEP: FOR T = 1 TO 1000: NEXT RETURN 400 M = INT(RND(1) * 20) + 2: N = M MOD 2 IF N = 1 THEN 400 RETURN