Galaxy Guard QuickBasic Game
' ***************************************
' * GALAXY GUARD, A LITTLE BIT SPACE *
' * INVADERS, A LITTLE BIT GALAGA. *
' * 100% CRANKED OUT BY *
' * BIL AND TOMMY HOOLIGAN 2019 *
' * WE ACCEPT NO RESPONSIBILITY FOR *
' * ANYTHING YOU DO WITH THIS CODE *
' * BUT WE SINCERELY HOPE YOU HAVE FUN *
' ***************************************
' INSTRUCTIONS
RANDOMIZE(TIMER)
SCREEN 8
' GOOD COLORS
2,3,7,9,10,11,14,15 with 1 for background
BACKGROUND = 1
COLOR 2, BACKGROUND
INPUT "PLEASE
ENTER YOUR INITIALS: ", NAME$
NAME$ = UCASE$(LEFT$(NAME$, 3))
CLS
PRINT " LEVEL 1
"
LOCATE 5, 10
PRINT "GALAXY
GUARD! TO YOUR POST!"
LOCATE 10, 10
PRINT "+===========================+"
LOCATE 11, 10
PRINT "|
INSTRUCTIONS: |"
LOCATE 12, 10
PRINT "|
PRESS 'A' TO MOVE LEFT |"
LOCATE 13, 10
PRINT "|
PRESS 'D' TO MOVE RIGHT |"
LOCATE 14, 10
PRINT "|
PRESS SPACE TO SHOOT |"
LOCATE 15, 10
PRINT "|
PRESS 'P' TO PAUSE |"
LOCATE 16, 10
PRINT "|
PRESS 'Q' TO QUIT |"
LOCATE 17, 10
PRINT "+===========================+"
scale$ = "CEDAGFAGBGGA"
PLAY "L16"
FOR i% = 0 TO 3
PLAY "O"
+ STR$(i%)
PLAY "X"
+ VARPTR$(scale$)
NEXT i%
'
INITIALIZE GAME
CLS
COUNTER = 0
LOCATE 1, 1
PRINT " LEVEL 1
"
DIM ALIEN$(4)
ALIEN$(0) = "
<*> "
ALIEN$(1) = " /0\
"
ALIEN$(2) = " -&-
"
ALIEN$(3) = " }@{
"
LEVEL = 1
DIM SPEED(4)
SPEED(0) = 1: SPEED(1) = 2: SPEED(2) = 3: SPEED(3) = 4
DIM ALIENROW(4)
ALIENROW(0) = 5: ALIENROW(1) = 6: ALIENROW(2) = 7: ALIENROW(3) = 8
DIM ALIENCOLM(4)
ALIENCOLM(0) = 40: ALIENCOLM(1) = 40: ALIENCOLM(2) = 40: ALIENCOLM(3) = 40
DIM ALIENCOLOR(4)
ALIENCOLOR(0) = 3: ALIENCOLOR(1) = 7: ALIENCOLOR(2) = 9: ALIENCOLOR(3) = 10
DIM ALIENDIR$(4)
ALIENDIR$(0) = "R": ALIENDIR$(1) = "R": ALIENDIR$(2) = "R": ALIENDIR$(3) = "R"
DIM ALIENSCORE(4)
ALIENSCORE(0) = 100: ALIENSCORE(1) = 75: ALIENSCORE(2) = 50: ALIENSCORE(3) = 25
DIM BOMBCOL(4)
BOMBCOL(0) = -1: BOMBCOL(1) = -1: BOMBCOL(2) = -1: BOMBCOL(3) = -1
DIM BOMBROW(4)
BOMBROW(0) = -1: BOMBROW(1) = -1: BOMBROW(2) = -1: BOMBROW(3) = -1
DIM BOMBFIRED$(4)
BOMBFIRED$(0) = "N": BOMBFIRED$(1) = "N": BOMBFIRED$(2) = "N": BOMBFIRED$(3) = "N"
DIM DEG(5)
DEG(0) = 0: DEG(1) = 3240: DEG(2) = 3600: DEG(3) = 1800: DEG(4) = 2160
POINTS = 70
DIM ALIENDEG(4)
ALIENDEG(0) = 0: ALIENDEG(1) = 0: ALIENDEG(2) = 0: ALIENDEG(3) = 0
DIM LASTCOL(4)
LASTCOL(0) = 5: LASTCOL(1) = 5: LASTCOL(2) = 5: LASTCOL(3) = 5
DIM LASTROW(4)
LASTROW(0) = 2: LASTROW(1) = 2: LASTROW(2) = 2: LASTROW(3) = 2
TEMPROW = 0
TEMPCOL = 0
BOMBRANDO = 2
BOMBSCOPE = 200
DIM PLAYERSCORE(12)
DIM PLAYERINITIAL$(12)
FOR X = 0 TO 11
PLAYERSCORE(X) = 0
PLAYERINITIAL$(X) = ""
NEXT X
' INITIALIZE
PLAYER
LIVESCOUNT = 3
GAMEOVER$ = "N"
PLAYERCOLM = 40
FIRING$ = "N"
SHOTROW = 22
SHOTCOL = 5
BOMB$ = CHR$(232)
SCORE = 0
Q$ = INKEY$
Player$ = CHR$(127)
' RUN
GAME
DO WHILE (Q$ <> "Q"
AND Q$ <> "q"
AND GAMEOVER$ = "N")
COLOR 2, BACKGROUND
LOCATE 23, 5
PRINT "---------------------------------------------------------------------"
LOCATE 23, 4 + PLAYERCOLM
COLOR 14, BACKGROUND
PRINT Player$
Q$ = INKEY$
'
HANDLE PAUSE
IF (Q$ = "P" OR Q$ = "p") THEN
COLOR 14, BACKGROUND
LOCATE 23, 5
CLS
INPUT "(GAME PAUSED) PRESS ENTER TO CONTINUE:";
PAUSES$
CLS
END IF
'
HANDLE PLAYER MOVEMENT
IF Q$ = "A" OR Q$ = "a" THEN PLAYERCOLM = PLAYERCOLM - 1: PLAY "L64N40"
IF Q$ = "D" OR Q$ = "d" THEN PLAYERCOLM = PLAYERCOLM + 1: PLAY "L64N40"
IF PLAYERCOLM = 0 THEN PLAYERCOLM = 1
IF PLAYERCOLM = 70 THEN PLAYERCOLM = 69
IF Q$ = " " THEN FIRING$ = "Y"
SHOTCOL = 4 + PLAYERCOLM
'
HANDLE SHOT FIRED
IF FIRING$ = "Y" THEN
PLAY "L64N" + STR$(SHOTROW + 24)
SHOTCOL = 4 + PLAYERCOLM
SHOTROW = SHOTROW - 1
LOCATE SHOTROW, SHOTCOL
COLOR 4, BACKGROUND
PRINT "|"
IF SHOTROW < 23 THEN LOCATE SHOTROW + 1, SHOTCOL - 1: PRINT "
"
IF SHOTROW = 1 THEN FIRING$ = "N"
IF FIRING$ = "N" THEN
LOCATE SHOTROW, SHOTCOL - 1
PRINT " "
SHOTROW = 22
END IF
END IF
'
HANDLE ALIEN MOVEMENT
COUNTER = COUNTER + 1
COUNTER = COUNTER MOD 24
FOR INDEX = 0 TO 3
DEGRAND = INT((RND * 5) + .5)
INCREMENT = 0
RESULT = COUNTER MOD SPEED (INDEX)
IF RESULT = 0 THEN INCREMENT = 1
IF ALIENDIR$(INDEX) = "R" THEN ALIENCOLM(INDEX) = ALIENCOLM(INDEX) + INCREMENT
IF ALIENDIR$(INDEX) = "L" THEN ALIENCOLM(INDEX) = ALIENCOLM(INDEX) - INCREMENT
IF ALIENDIR$( INDEX) = "R" AND ALIENCOLM(INDEX) = 70 THEN ALIENDIR$(INDEX) = "L": ALIENDEG(INDEX) = DEG(DEGRAND)
IF ALIENDIR$( INDEX) = "L" AND ALIENCOLM(INDEX) = 5 THEN ALIENDIR$(INDEX) = "R": ALIENDEG(INDEX) = DEG(DEGRAND)
' HANDLE ALIEN MOVEMENT OFFSET
' COMMENT OUT THIS SECTION IF YOU GET
EPILEPIC SEIZURES ****
'*
MAXMAG = INT(LEVEL / 5) '*
IF (MAXMAG > 4) THEN MAXMAG = 4 '*
DEGPERSTEP = ALIENDEG(INDEX) / POINTS '*
MAGDEGSTEP = 180 / POINTS '*
MAG = MAXMAG * SIN(MAGDEGSTEP * (ALIENCOLM(INDEX) - 5)) '*
DEGOFF = (ALIENCOLM(INDEX) - 5) * DEGPERSTEP '*
XOFFSET = MAG * SIN(DEGOFF) '*
YOFFSET = MAG * COS(DEGOFF) '*
'*
LOCATE LASTROW(INDEX), LASTCOL(INDEX)
'*
PRINT " "; '*
'*
' COMMENT OUT THIS SECTION IF YOU GET
EPILEPIC SEIZURES ****
LOCATE ALIENROW(INDEX) + INT(YOFFSET), ALIENCOLM(INDEX) + INT(XOFFSET)
COLOR ALIENCOLOR(INDEX), BACKGROUND
PRINT ALIEN$( INDEX);
LASTCOL(INDEX) = ALIENCOLM(INDEX) + INT(XOFFSET)
LASTROW(INDEX) = ALIENROW(INDEX) + INT(YOFFSET)
' HANDLE PLAYER SHOT KILLING ALIEN
IF SHOTROW = ALIENROW(INDEX) AND SHOTCOL > ALIENCOLM(INDEX) AND SHOTCOL < ALIENCOLM(INDEX) + 5 THEN
PLAY "L45N80N40N20N10N5N0"
IF (TEMPROW > 0) THEN LOCATE TEMPROW, TEMPCOL: PRINT "
"
TEMPROW = ALIENROW(INDEX)
TEMPCOL = ALIENCOLM(INDEX)
ALIENCOLM(INDEX) = 4
ALIENDIR$(INDEX) = "R"
ALIENROW(INDEX) = INDEX + 5 + (INT(RND * 3) * 4)
FIRING$ = "N"
LOCATE SHOTROW, SHOTCOL - 1
PRINT " "
SHOTROW = 22
LOCATE TEMPROW, TEMPCOL
COLOR 4, BACKGROUND
PRINT " " + STR$(ALIENSCORE(INDEX)) + " "
SCORE = SCORE + ALIENSCORE(INDEX) + ((LEVEL - 1) * 5)
END IF
' HANDLE ALIEN BOMB DROP
IF (INT(RND * BOMBSCOPE) = BOMBRANDO AND BOMBFIRED$(INDEX) = "N") THEN
BOMBFIRED$(INDEX) = "Y"
BOMBCOL(INDEX) = ALIENCOLM(INDEX) + 2
BOMBROW(INDEX) = ALIENROW(INDEX)
END IF
' HANDLE ALIEN BOMB MOVEMENT
IF (BOMBFIRED$(INDEX) = "Y") THEN
BOMBROW(INDEX) = BOMBROW(INDEX) + 1
LOCATE BOMBROW(INDEX), BOMBCOL(INDEX)
COLOR 4, BACKGROUND
PRINT BOMB$
LOCATE BOMBROW(INDEX) - 1, BOMBCOL(INDEX)
PRINT " "
PLAY "L64N" + STR$((24 - BOMBROW(INDEX)) + 48)
END IF
' HANDLE ALIEN BOMB DROP KILLING PLAYER OR DOING NOTHING
IF (BOMBFIRED$(INDEX) = "Y" AND BOMBROW(INDEX) = 23) THEN
IF (BOMBCOL(INDEX) > PLAYERCOLM + 2 AND BOMBCOL(INDEX) < PLAYERCOLM + 6) THEN
LIVESCOUNT = LIVESCOUNT - 1
IF (LIVESCOUNT = 0) THEN GAMEOVER$ = "Y"
LOCATE 23, PLAYERCOL + 3
COLOR 4, BACKGROUND
PRINT "***"
PLAY "L45N20N10N5N2N1N0L45N20N10N5N2N1N0L45N20N10N5N2N1N0L45N20N10N5N2N1N0"
PLAYERCOL = 40
BOMBFIRED$(INDEX) = "N"
ELSE
PLAY "L45N0N0N0N0N0N0N0"
BOMBFIRED$(INDEX) = "N"
LOCATE 23, BOMBCOL(INDEX)
PRINT " "
END IF
END IF
NEXT INDEX
'
HANDLE SCORE AND LIVES PRINTING
COLOR 14, BACKGROUND
LOCATE 1, 60: PRINT STR$(SCORE)
IF (LIVESCOUNT < 4) THEN
LOCATE 1, 70: PRINT STRING$(LIVESCOUNT, Player$) + "
"
END IF
IF (LIVESCOUNT >= 4) THEN
LOCATE 1, 70: PRINT STRING$(3, Player$) + STR$(LIVESCOUNT) + " "
END IF
'
HANDLE LEVELLING UP
IF GAMEOVER$ = "N" AND SCORE >= LEVEL * 1000 THEN
CLS
BOMBSCOPE = BOMBSCOPE - 10
IF BOMBSCOPE < BOMBRANDO THEN BOMBSCOPE = BOMBRANDO + 1
LEVEL = LEVEL + 1
IF (LEVEL MOD 5 = 0) THEN
LIVESCOUNT = LIVESCOUNT + 1
END IF
PRINT " LEVEL "; LEVEL
scale$ = "CEDAGFAGBGGA"
PLAY "L18"
FOR i% = 0 TO 3
PLAY "O" + STR$(i%)
PLAY "X" + VARPTR$(scale$)
NEXT i%
LOCATE 1, 1
PRINT " LEVEL "; LEVEL
END IF
IF (GAMEOVER$ = "Y") THEN
LOCATE 12, 34
COLOR 4, BACKGROUND
PRINT " GAME OVER "
scale$ = "ABCBAAACBAAABA"
PLAY "L12"
FOR i% = 0 TO 1
PLAY "O" + STR$(i%)
PLAY "X" + VARPTR$(scale$)
NEXT i%
CLS
END IF
'
DELAY
FOR X = 1 TO 500: NEXT X
LOOP
TYPE TestRecord
Player AS STRING * 3
SCORE AS DOUBLE
END TYPE
DIM MyClass AS TestRecord
OPEN "SCORES.DAT"
FOR RANDOM AS #1 LEN = LEN(MyClass)
FOR X = 0 TO 9
GET #1, X + 1, MyClass
PLAYERSCORE(X) = MyClass.SCORE
PLAYERINITIAL$(X) = MyClass.Player
NEXT X
PLAYERSCORE(10) = SCORE
PLAYERINITIAL$(10) = NAME$
MyClass.Player
= NAME$
MyClass.SCORE
= SCORE
PUT #1, 11, MyClass
CLOSE #1
DIM DONE AS INTEGER, A AS INTEGER, MAX AS INTEGER
MAX = UBOUND(PLAYERSCORE) - 1
DO
DONE = 1
FOR A = 1 TO MAX
IF PLAYERSCORE(A) > PLAYERSCORE(A - 1) THEN
DONE = 0
SWAP PLAYERSCORE(A), PLAYERSCORE(A - 1)
SWAP PLAYERINITIAL$(A), PLAYERINITIAL$(A - 1)
END IF
NEXT A
LOOP UNTIL DONE OR MAX < 1
KILL "SCORES.DAT"
OPEN "SCORES.DAT"
FOR RANDOM AS #1 LEN = LEN(MyClass)
FOR X = 0 TO 9
MyClass.Player = PLAYERINITIAL$(X)
MyClass.SCORE = PLAYERSCORE(X)
PUT #1, X + 1, MyClass
NEXT X
CLOSE #1
COLOR 14, BACKGROUND
LOCATE 4, 10
PRINT "
TOP 10 SCORES"
LOCATE 6, 10
PRINT "+===========================+"
FOR X = 0 TO 9
LOCATE X + 7, 10
PRINT "|
";
LOCATE X + 7, 15:
PRINT PLAYERINITIAL$(X);
LOCATE X + 7, 21
IF (PLAYERSCORE(X) > 0) THEN
PRINT STR$(PLAYERSCORE(X));
END IF
LOCATE X + 7, 38
PRINT "|"
NEXT X
LOCATE 17, 10
PRINT "+===========================+"
scale$ = "GEDDDFDCCCCECBAGA"
PLAY "L12"
FOR i% = 3 TO 2 STEP -1
PLAY "O"
+ STR$(i%)
PLAY "X"
+ VARPTR$(scale$)
NEXT i%
' INSTRUCTIONS
RANDOMIZE(TIMER)
SCREEN 8
' GOOD COLORS
2,3,7,9,10,11,14,15 with 1 for background
BACKGROUND = 1
COLOR 2, BACKGROUND
INPUT "PLEASE
ENTER YOUR INITIALS: ", NAME$
NAME$ = UCASE$(LEFT$(NAME$, 3))
CLS
PRINT " LEVEL 1
"
LOCATE 5, 10
PRINT "GALAXY
GUARD! TO YOUR POST!"
LOCATE 10, 10
PRINT "+===========================+"
LOCATE 11, 10
PRINT "| INSTRUCTIONS:
|"
LOCATE 12, 10
PRINT "| PRESS 'A' TO MOVE LEFT |"
LOCATE 13, 10
PRINT "| PRESS 'D' TO MOVE RIGHT |"
LOCATE 14, 10
PRINT "| PRESS SPACE TO SHOOT |"
LOCATE 15, 10
PRINT "| PRESS 'P' TO PAUSE |"
LOCATE 16, 10
PRINT "| PRESS 'Q' TO QUIT |"
LOCATE 17, 10
PRINT "+===========================+"
scale$ = "CEDAGFAGBGGA"
PLAY "L16"
FOR i% = 0 TO 3
PLAY "O"
+ STR$(i%)
PLAY "X"
+ VARPTR$(scale$)
NEXT i%
' INITIALIZE GAME
CLS
COUNTER = 0
LOCATE 1, 1
PRINT " LEVEL 1
"
DIM ALIEN$(4)
ALIEN$(0) = "
<*> "
ALIEN$(1) = " /0\
"
ALIEN$(2) = " -&-
"
ALIEN$(3) = "
}@{ "
LEVEL = 1
DIM SPEED(4)
SPEED(0) = 1: SPEED(1) = 2: SPEED(2) = 3: SPEED(3) = 4
DIM ALIENROW(4)
ALIENROW(0) = 5: ALIENROW(1) = 6: ALIENROW(2) = 7: ALIENROW(3) = 8
DIM ALIENCOLM(4)
ALIENCOLM(0) = 40: ALIENCOLM(1) = 40: ALIENCOLM(2) = 40: ALIENCOLM(3) = 40
DIM ALIENCOLOR(4)
ALIENCOLOR(0) = 3: ALIENCOLOR(1) = 7: ALIENCOLOR(2) = 9: ALIENCOLOR(3) = 10
DIM ALIENDIR$(4)
ALIENDIR$(0) = "R": ALIENDIR$(1) = "R": ALIENDIR$(2) = "R": ALIENDIR$(3) = "R"
DIM ALIENSCORE(4)
ALIENSCORE(0) = 100: ALIENSCORE(1) = 75: ALIENSCORE(2) = 50: ALIENSCORE(3) = 25
DIM BOMBCOL(4)
BOMBCOL(0) = -1: BOMBCOL(1) = -1: BOMBCOL(2) = -1: BOMBCOL(3) = -1
DIM BOMBROW(4)
BOMBROW(0) = -1: BOMBROW(1) = -1: BOMBROW(2) = -1: BOMBROW(3) = -1
DIM BOMBFIRED$(4)
BOMBFIRED$(0) = "N": BOMBFIRED$(1) = "N": BOMBFIRED$(2) = "N": BOMBFIRED$(3) = "N"
DIM DEG(5)
DEG(0) = 0: DEG(1) = 3240: DEG(2) = 3600: DEG(3) = 1800: DEG(4) = 2160
POINTS = 70
DIM ALIENDEG(4)
ALIENDEG(0) = 0: ALIENDEG(1) = 0: ALIENDEG(2) = 0: ALIENDEG(3) = 0
DIM LASTCOL(4)
LASTCOL(0) = 5: LASTCOL(1) = 5: LASTCOL(2) = 5: LASTCOL(3) = 5
DIM LASTROW(4)
LASTROW(0) = 2: LASTROW(1) = 2: LASTROW(2) = 2: LASTROW(3) = 2
TEMPROW = 0
TEMPCOL = 0
BOMBRANDO = 2
BOMBSCOPE = 200
DIM PLAYERSCORE(12)
DIM PLAYERINITIAL$(12)
FOR X = 0 TO 11
PLAYERSCORE(X) = 0
PLAYERINITIAL$(X) = ""
NEXT X
' INITIALIZE
PLAYER
LIVESCOUNT = 3
GAMEOVER$ = "N"
PLAYERCOLM = 40
FIRING$ = "N"
SHOTROW = 22
SHOTCOL = 5
BOMB$ = CHR$(232)
SCORE = 0
Q$ = INKEY$
Player$ = CHR$(127)
' RUN
GAME
DO WHILE (Q$ <> "Q"
AND Q$ <> "q"
AND GAMEOVER$ = "N")
COLOR 2, BACKGROUND
LOCATE 23, 5
PRINT "---------------------------------------------------------------------"
LOCATE 23, 4 + PLAYERCOLM
COLOR 14, BACKGROUND
PRINT Player$
Q$ = INKEY$
'
HANDLE PAUSE
IF (Q$ = "P" OR Q$ = "p") THEN
COLOR 14, BACKGROUND
LOCATE 23, 5
CLS
INPUT "(GAME PAUSED) PRESS ENTER TO CONTINUE:";
PAUSES$
CLS
END IF
'
HANDLE PLAYER MOVEMENT
IF Q$ = "A" OR Q$ = "a" THEN PLAYERCOLM = PLAYERCOLM - 1: PLAY "L64N40"
IF Q$ = "D" OR Q$ = "d" THEN PLAYERCOLM = PLAYERCOLM + 1: PLAY "L64N40"
IF PLAYERCOLM = 0 THEN PLAYERCOLM = 1
IF PLAYERCOLM = 70 THEN PLAYERCOLM = 69
IF Q$ = " " THEN FIRING$ = "Y"
SHOTCOL = 4 + PLAYERCOLM
'
HANDLE SHOT FIRED
IF FIRING$ = "Y" THEN
PLAY "L64N" + STR$(SHOTROW + 24)
SHOTCOL = 4 + PLAYERCOLM
SHOTROW = SHOTROW - 1
LOCATE SHOTROW, SHOTCOL
COLOR 4, BACKGROUND
PRINT "|"
IF SHOTROW < 23 THEN LOCATE SHOTROW + 1, SHOTCOL - 1: PRINT "
"
IF SHOTROW = 1 THEN FIRING$ = "N"
IF FIRING$ = "N" THEN
LOCATE SHOTROW, SHOTCOL - 1
PRINT " "
SHOTROW = 22
END IF
END IF
'
HANDLE ALIEN MOVEMENT
COUNTER = COUNTER + 1
COUNTER = COUNTER MOD 24
FOR INDEX = 0 TO 3
DEGRAND = INT((RND * 5) + .5)
INCREMENT = 0
RESULT = COUNTER MOD SPEED (INDEX)
IF RESULT = 0 THEN INCREMENT = 1
IF ALIENDIR$(INDEX) = "R" THEN ALIENCOLM(INDEX) = ALIENCOLM(INDEX) + INCREMENT
IF ALIENDIR$(INDEX) = "L" THEN ALIENCOLM(INDEX) = ALIENCOLM(INDEX) - INCREMENT
IF ALIENDIR$( INDEX) = "R" AND ALIENCOLM(INDEX) = 70 THEN ALIENDIR$(INDEX) = "L": ALIENDEG(INDEX) = DEG(DEGRAND)
IF ALIENDIR$( INDEX) = "L" AND ALIENCOLM(INDEX) = 5 THEN ALIENDIR$(INDEX) = "R": ALIENDEG(INDEX) = DEG(DEGRAND)
' HANDLE ALIEN MOVEMENT OFFSET
' COMMENT OUT THIS SECTION IF YOU GET
EPILEPIC SEIZURES ****
'*
MAXMAG = INT(LEVEL / 5) '*
IF (MAXMAG > 4) THEN MAXMAG = 4 '*
DEGPERSTEP = ALIENDEG(INDEX) / POINTS '*
MAGDEGSTEP = 180 / POINTS '*
MAG = MAXMAG * SIN(MAGDEGSTEP * (ALIENCOLM(INDEX) - 5)) '*
DEGOFF = (ALIENCOLM(INDEX) - 5) * DEGPERSTEP '*
XOFFSET = MAG * SIN(DEGOFF) '*
YOFFSET = MAG * COS(DEGOFF) '*
'*
LOCATE LASTROW(INDEX), LASTCOL(INDEX) '*
PRINT " "; '*
'*
' COMMENT OUT THIS SECTION IF YOU GET
EPILEPIC SEIZURES ****
LOCATE ALIENROW(INDEX) + INT(YOFFSET), ALIENCOLM(INDEX) + INT(XOFFSET)
COLOR ALIENCOLOR(INDEX), BACKGROUND
PRINT ALIEN$(
INDEX);
LASTCOL(INDEX) = ALIENCOLM(INDEX) + INT(XOFFSET)
LASTROW(INDEX) = ALIENROW(INDEX) + INT(YOFFSET)
' HANDLE PLAYER SHOT KILLING ALIEN
IF SHOTROW = ALIENROW(INDEX) AND SHOTCOL > ALIENCOLM(INDEX) AND SHOTCOL < ALIENCOLM(INDEX) + 5 THEN
PLAY "L45N80N40N20N10N5N0"
IF (TEMPROW > 0) THEN LOCATE TEMPROW, TEMPCOL: PRINT "
"
TEMPROW = ALIENROW(INDEX)
TEMPCOL = ALIENCOLM(INDEX)
ALIENCOLM(INDEX) = 4
ALIENDIR$(INDEX) = "R"
ALIENROW(INDEX) = INDEX + 5 + (INT(RND * 3) * 4)
FIRING$ = "N"
LOCATE SHOTROW, SHOTCOL - 1
PRINT " "
SHOTROW = 22
LOCATE TEMPROW, TEMPCOL
COLOR 4, BACKGROUND
PRINT " " + STR$(ALIENSCORE(INDEX)) + " "
SCORE = SCORE + ALIENSCORE(INDEX) + ((LEVEL - 1) * 5)
END IF
' HANDLE ALIEN BOMB DROP
IF (INT(RND
* BOMBSCOPE) = BOMBRANDO AND BOMBFIRED$(INDEX) = "N") THEN
BOMBFIRED$(INDEX) = "Y"
BOMBCOL(INDEX) = ALIENCOLM(INDEX) + 2
BOMBROW(INDEX) = ALIENROW(INDEX)
END IF
' HANDLE ALIEN BOMB MOVEMENT
IF (BOMBFIRED$(INDEX) = "Y") THEN
BOMBROW(INDEX) = BOMBROW(INDEX) + 1
LOCATE BOMBROW(INDEX), BOMBCOL(INDEX)
COLOR 4, BACKGROUND
PRINT BOMB$
LOCATE BOMBROW(INDEX) - 1, BOMBCOL(INDEX)
PRINT " "
PLAY "L64N" + STR$((24 - BOMBROW(INDEX)) + 48)
END IF
' HANDLE ALIEN BOMB DROP KILLING
PLAYER OR DOING NOTHING
IF (BOMBFIRED$(INDEX) = "Y" AND BOMBROW(INDEX) = 23) THEN
IF (BOMBCOL(INDEX) > PLAYERCOLM + 2 AND BOMBCOL(INDEX) < PLAYERCOLM + 6) THEN
LIVESCOUNT = LIVESCOUNT - 1
IF (LIVESCOUNT = 0) THEN GAMEOVER$ = "Y"
LOCATE 23, PLAYERCOL + 3
COLOR 4, BACKGROUND
PRINT "***"
PLAY "L45N20N10N5N2N1N0L45N20N10N5N2N1N0L45N20N10N5N2N1N0L45N20N10N5N2N1N0"
PLAYERCOL = 40
BOMBFIRED$(INDEX) = "N"
ELSE
PLAY "L45N0N0N0N0N0N0N0"
BOMBFIRED$(INDEX) = "N"
LOCATE 23, BOMBCOL(INDEX)
PRINT " "
END IF
END IF
NEXT INDEX
'
HANDLE SCORE AND LIVES PRINTING
COLOR 14, BACKGROUND
LOCATE 1, 60: PRINT STR$(SCORE)
IF (LIVESCOUNT < 4) THEN
LOCATE 1, 70: PRINT STRING$(LIVESCOUNT, Player$) + "
"
END IF
IF (LIVESCOUNT >= 4) THEN
LOCATE 1, 70: PRINT STRING$(3, Player$) + STR$(LIVESCOUNT) + " "
END IF
'
HANDLE LEVELLING UP
IF GAMEOVER$ = "N" AND SCORE >= LEVEL * 1000 THEN
CLS
BOMBSCOPE = BOMBSCOPE - 10
IF BOMBSCOPE < BOMBRANDO THEN BOMBSCOPE = BOMBRANDO + 1
LEVEL = LEVEL + 1
IF (LEVEL MOD 5 = 0) THEN
LIVESCOUNT = LIVESCOUNT + 1
END IF
PRINT " LEVEL "; LEVEL
scale$ = "CEDAGFAGBGGA"
PLAY "L18"
FOR i% = 0 TO 3
PLAY "O" + STR$(i%)
PLAY "X" + VARPTR$(scale$)
NEXT i%
LOCATE 1, 1
PRINT " LEVEL "; LEVEL
END IF
IF (GAMEOVER$ = "Y") THEN
LOCATE 12, 34
COLOR 4, BACKGROUND
PRINT " GAME OVER "
scale$ = "ABCBAAACBAAABA"
PLAY "L12"
FOR i% = 0 TO 1
PLAY "O" + STR$(i%)
PLAY "X" + VARPTR$(scale$)
NEXT i%
CLS
END IF
'
DELAY
FOR X = 1 TO 500: NEXT X
LOOP
TYPE TestRecord
Player AS STRING * 3
SCORE AS DOUBLE
END TYPE
DIM MyClass AS TestRecord
OPEN "SCORES.DAT"
FOR RANDOM AS #1 LEN = LEN(MyClass)
FOR X = 0 TO 9
GET #1, X + 1, MyClass
PLAYERSCORE(X) = MyClass.SCORE
PLAYERINITIAL$(X) = MyClass.Player
NEXT X
PLAYERSCORE(10) = SCORE
PLAYERINITIAL$(10) = NAME$
MyClass.Player
= NAME$
MyClass.SCORE
= SCORE
PUT #1, 11, MyClass
CLOSE #1
DIM DONE AS INTEGER, A AS INTEGER, MAX AS INTEGER
MAX = UBOUND(PLAYERSCORE) - 1
DO
DONE = 1
FOR A = 1 TO MAX
IF PLAYERSCORE(A) > PLAYERSCORE(A - 1) THEN
DONE = 0
SWAP PLAYERSCORE(A), PLAYERSCORE(A - 1)
SWAP PLAYERINITIAL$(A), PLAYERINITIAL$(A - 1)
END IF
NEXT A
LOOP UNTIL DONE OR MAX < 1
KILL "SCORES.DAT"
OPEN "SCORES.DAT"
FOR RANDOM AS #1 LEN = LEN(MyClass)
FOR X = 0 TO 9
MyClass.Player = PLAYERINITIAL$(X)
MyClass.SCORE = PLAYERSCORE(X)
PUT #1, X + 1, MyClass
NEXT X
CLOSE #1
COLOR 14, BACKGROUND
LOCATE 4, 10
PRINT "
TOP 10 SCORES"
LOCATE 6, 10
PRINT "+===========================+"
FOR X = 0 TO 9
LOCATE X + 7, 10
PRINT "|
";
LOCATE X + 7, 15:
PRINT PLAYERINITIAL$(X);
LOCATE X + 7, 21
IF (PLAYERSCORE(X) > 0) THEN
PRINT STR$(PLAYERSCORE(X));
END IF
LOCATE X + 7, 38
PRINT "|"
NEXT X
LOCATE 17, 10
PRINT "+===========================+"
scale$ = "GEDDDFDCCCCECBAGA"
PLAY "L12"
FOR i% = 3 TO 2 STEP -1
PLAY "O"
+ STR$(i%)
PLAY "X"
+ VARPTR$(scale$)
NEXT i%
Comments
Post a Comment