DECLARE SUB Pause (A!) DECLARE SUB Credits () DECLARE SUB Help () DECLARE SUB kbRepeat (rate%, delay%) DECLARE SUB ScoreBoard () DECLARE SUB Menu (A) DECLARE SUB DrawBrick (X!, Y!, C!) DECLARE SUB Explode (X!, Y!, F!, T!) DECLARE SUB DRAWL (X!, Y!, C!) ' $INCLUDE: 'C:\QBASIC\QB.BI' DIM SHARED inRegs AS RegType, outRegs AS RegType, PR(800) COMMON SHARED UNAME$ RANDOMIZE TIMER SCREEN 13 kbRepeat 0, 0 BRIX = 20 DIM BrX(BRIX), BrY(BRIX), BrC(BRIX), BrM(BRIX), BrE(BRIX), BrAN(BRIX) Menu 0 RESTRT: CLS T = 0 T1 = 0: T2 = 0: T3 = 0: SCORE = 0 tb& = 0 Br = 0 XT = 1 cx = 160 FOR N = 1 TO BRIX BrX(N) = INT(RND * 35) * 10 BrY(N) = INT(RND * 200) - 200 BrC(N) = INT(RND * 3) + 1 BrM(N) = 1 Br = Br + 1 tb& = tb& + 1 NEXT N CLS COLOR 15 LOCATE 12, 16: PRINT "LOADING..." TIMER ON ON TIMER(1) GOSUB 1 DO T1 = T1 + 1 LOOP 1 TIMER OFF TIMER ON ON TIMER(1) GOSUB 2 DO T2 = T2 + 1 LOOP 2 TIMER OFF TIMER ON ON TIMER(1) GOSUB 3 DO T3 = T3 + 1 LOOP 3 TIMER OFF T = (T1 + T2 + T3) / 3 CLS DO KEYIN$ = "" KEYIN$ = INKEY$ inRegs.ax = &HC06 CALL INTERRUPT(&H21, inRegs, outRegs) FOR SLW = 1 TO T / 24 NEXT SLW FOR N = 1 TO BRIX IF BrE(N) >= 1 THEN Explode BrX(N) + 4, BrY(N) - 2, BrE(N), 0 BrE(N) = BrE(N) + 1 IF BrE(N) >= 6 AND tb& < 300 THEN BrE(N) = 0 BrX(N) = INT(RND * 35) * 10 BrY(N) = -10 IF G2 >= 1 THEN BrC(N) = 2: G2 = G2 - 1: GOTO SKIPRANC: BrCr = INT(RND * 14) + 1 IF BrCr = 1 THEN BrC(N) = 1 IF BrCr = 2 THEN BrC(N) = 1 IF BrCr = 3 THEN BrC(N) = 2 IF BrCr = 4 THEN BrC(N) = 2 IF BrCr = 5 THEN BrC(N) = 3 IF BrCr = 6 THEN BrC(N) = 3 IF BrCr = 7 THEN BrC(N) = 3 IF BrCr = 8 THEN BrC(N) = 4 IF BrCr = 9 THEN BrC(N) = 1 IF BrCr = 10 THEN BrC(N) = 2 IF BrCr = 11 THEN BrC(N) = 3 IF BrCr = 12 THEN BrC(N) = 6 IF BrCr = 13 THEN BrC(N) = 6 IF BrCr = 14 THEN BrC(N) = 6 SKIPRANC: BrM(N) = 1 Br = Br + 1 tb& = tb& + 1 END IF END IF IF BrM(N) = 0 THEN GOTO SKIPBRIX1: DrawBrick BrX(N), BrY(N), 0 IF BrC(N) = 4 THEN BrY(N) = BrY(N) + 4 IF BrC(N) = 1 THEN BrY(N) = BrY(N) + 3 IF BrC(N) = 2 THEN BrY(N) = BrY(N) + 2 IF BrC(N) = 3 THEN BrY(N) = BrY(N) + 1 IF BrC(N) = 6 THEN BrY(N) = BrY(N) + 2 'IF POINT(BrX(N) + 5, BrY(N) + 2) = 25 OR POINT(BrX(N) + 5, BrY(N) + 3) = 25 OR POINT(BrX(N) + 1, BrY(N) + 3) = 25 OR POINT(BrX(N) + 9, BrY(N) + 3) = 25 THEN IF BrX(N) >= (cx - 10) AND BrX(N) <= (cx + 19) AND BrY(N) >= 174 AND BrY(N) <= 185 THEN IF XT > 0 THEN XT = XT - 1 IF XT = 0 THEN Xx = 1 IF BrC(N) = 1 THEN BrM(N) = 0: BRXO = BRXO - 1: SCORE = SCORE + (200 * Xx): DrawBrick BrX(N), BrY(N), 0: BrE(N) = 1: Br = Br - 1 IF BrC(N) = 2 THEN BrM(N) = 0: BRXO = BRXO - 1: SCORE = SCORE + (75 * Xx): DrawBrick BrX(N), BrY(N), 0: BrE(N) = 1: Br = Br - 1 IF BrC(N) = 3 THEN BrM(N) = 0: BRXO = BRXO - 1: SCORE = SCORE + (25 * Xx): DrawBrick BrX(N), BrY(N), 0: BrE(N) = 1: Br = Br - 1 IF BrC(N) = 6 THEN BrM(N) = 0: BRXO = BRXO - 1: SCORE = SCORE - (100 * Xx): DrawBrick BrX(N), BrY(N), 0: BrE(N) = 1: Br = Br - 1 IF BrC(N) = 4 THEN IF Xx = 0 THEN Xx = 1 XT = 5: Xx = Xx + 1 Br = Br - 1 END IF BrM(N) = 0: DrawBrick BrX(N), BrY(N), 0: BrE(N) = 1 END IF DrawBrick BrX(N), BrY(N), BrC(N) IF BrY(N) >= 210 THEN BrM(N) = 0: BRXO = BRXO - 1: DrawBrick BrX(N), BrY(N), 0: SCORE = SCORE - 10: BrE(N) = 1: Br = Br - 1 GOTO SKIPSKIPBRIX: SKIPBRIX1: DrawBrick 1, 1, 0 DrawBrick 1, 1, 0 SKIPSKIPBRIX: LINE (0, 0)-(320, 0), 0 NEXT N LINE (0, 0)-(320, 0), 0 DrawBrick cx, 180, 5 IF KEYIN$ = CHR$(0) + "K" AND cx > 5 THEN cx = cx - 6 IF KEYIN$ = CHR$(0) + "M" AND cx < 290 THEN cx = cx + 6 LOCATE 1, 28: PRINT "Score"; SCORE IF Br = 0 AND tb& >= 299 THEN GOTO DONEGAME: IF Xx >= 1 AND XT >= 1 THEN LOCATE 2, 1: PRINT "x"; Xx IF XT = 0 THEN LOCATE 2, 1: PRINT " " IF KEYIN$ = "p" OR KEYIN$ = "P" THEN Pause 1 LOOP UNTIL KEYIN$ = "q" OR KEYIN$ = "Q" DONEGAME: CLS SHIFT = INT(RND * 10) INCR$ = INCR$ + CHR$(SHIFT + 65) FOR I = 2 TO LEN(STR$(SCORE)) num = ASC(MID$(STR$(SCORE), I, 1)) INCR$ = INCR$ + CHR$(num + 17 + SHIFT) NEXT I IF UNAME$ = "" THEN UNAME$ = "PLAYER 1" OPEN "BFSCORE.TXT" FOR APPEND AS #1 PRINT #1, UNAME$, SCORE, INCR$ CLOSE LOCATE 12, 12: PRINT "Your Score is"; SCORE LOCATE 15, 12: PRINT "Your Score Code is " LOCATE 17, 19: PRINT INCR$ LOCATE 23, 11: PRINT " - Press ENTER - " WHILE INKEY$ <> CHR$(13) WEND CLS : COLOR 15: PRINT "Thanks for playing BrickFall!": PRINT : PRINT "-Lenny": END SUB Credits CLS COLOR 15 PRINT "Credits: (iB3K usernames)" PRINT : PRINT : PRINT PRINT "Game designer/Lead programmer Lenny" PRINT : PRINT PRINT "Secondary programmer Castellan" PRINT : PRINT PRINT "Marketing distrubitor/Compiler Hawk" LOCATE 23, 10: PRINT " - Press ENTER - " WHILE INKEY$ <> CHR$(13) WEND Menu 1 END SUB SUB DrawBrick (X, Y, C) IF C = 0 THEN : LINE (X, Y - 3)-(X + 9, Y + 4), 0, BF IF C = 1 THEN LINE (X, Y + 1)-(X + 9, Y + 4), 112, BF LINE (X + 1, Y)-(X + 3, Y), 112, BF LINE (X + 6, Y)-(X + 8, Y), 112, BF PSET (X + 1, Y), 40: PSET (X + 6, Y), 40: PSET (X + 3, Y), 184: PSET (X + 8, Y), 184 LINE (X, Y + 4)-(X + 9, Y + 4), 184, BF LINE (X + 9, Y + 1)-(X + 9, Y + 4), 184, BF END IF IF C = 2 THEN LINE (X, Y + 1)-(X + 9, Y + 4), 120, BF LINE (X + 1, Y)-(X + 3, Y), 120, BF LINE (X + 6, Y)-(X + 8, Y), 120, BF PSET (X + 1, Y), 48: PSET (X + 6, Y), 48: PSET (X + 3, Y), 192: PSET (X + 8, Y), 192 LINE (X, Y + 4)-(X + 9, Y + 4), 192, BF LINE (X + 9, Y + 1)-(X + 9, Y + 4), 192, BF END IF IF C = 3 THEN LINE (X, Y + 1)-(X + 9, Y + 4), 104, BF LINE (X + 1, Y)-(X + 3, Y), 104, BF LINE (X + 6, Y)-(X + 8, Y), 104, BF PSET (X + 1, Y), 55: PSET (X + 6, Y), 55: PSET (X + 3, Y), 176: PSET (X + 8, Y), 176 LINE (X, Y + 4)-(X + 9, Y + 4), 176, BF LINE (X + 9, Y + 1)-(X + 9, Y + 4), 176, BF END IF IF C = 4 THEN LINE (X, Y + 1)-(X + 9, Y + 4), 114, BF LINE (X + 1, Y)-(X + 3, Y), 114, BF LINE (X + 6, Y)-(X + 8, Y), 114, BF PSET (X + 1, Y), 44: PSET (X + 6, Y), 44: PSET (X + 3, Y), 186: PSET (X + 8, Y), 186 LINE (X, Y + 4)-(X + 9, Y + 4), 186, BF LINE (X + 9, Y + 1)-(X + 9, Y + 4), 186, BF END IF IF C = 5 THEN LINE (X - 6, Y)-(X + 19 + 6, Y + 2), 0, BF LINE (X, Y + 1)-(X + 19, Y + 2), 25, BF LINE (X + 1, Y)-(X + 3, Y), 25, BF LINE (X + 6, Y)-(X + 8, Y), 25, BF LINE (X + 11, Y)-(X + 13, Y), 25, BF LINE (X + 16, Y)-(X + 18, Y), 25, BF END IF IF C = 6 THEN LINE (X, Y + 1)-(X + 9, Y + 4), 18, BF LINE (X + 1, Y)-(X + 3, Y), 18, BF LINE (X + 6, Y)-(X + 8, Y), 18, BF PSET (X + 1, Y), 20: PSET (X + 6, Y), 20: PSET (X + 3, Y), 17: PSET (X + 8, Y), 17 LINE (X, Y + 4)-(X + 9, Y + 4), 17, BF LINE (X + 9, Y + 1)-(X + 9, Y + 4), 17, BF END IF END SUB SUB Explode (X, Y, F, T) LINE (X - 5, Y - 3 - 5)-(X + 9 + 5, Y + 4 + 5), 0, BF IF F = 1 THEN CIRCLE (X, Y), 1, 44 IF F = 2 THEN CIRCLE (X, Y), 1, 0: CIRCLE (X, Y), 3, 115 IF F = 3 THEN CIRCLE (X, Y), 3, 0: CIRCLE (X, Y), 5, 187 IF F = 4 THEN CIRCLE (X, Y), 5, 0: CIRCLE (X, Y), 9, 17 IF F = 5 THEN CIRCLE (X, Y), 9, 0 END SUB SUB Help CLS COLOR 15 PRINT "How to Play;" PRINT "The object of the game is to collect as" PRINT "many falling bricks as possible." PRINT "To collect a falling brick, you must" PRINT "move your paddle (using the arrow keys)" PRINT "directly beneath the brick." PRINT "Different colored bricks give different" PRINT "Amounts of score, ie. 20 75 200 -100" PRINT "There is only one" PRINT "special gold brick" PRINT "that will multiply the score of the" PRINT "other bricks you collect." PRINT "Watch out for the black bricks, they" PRINT "will decrease your score by 100." PRINT "You may press `P' to pause or `Q' to" PRINT "quit to menu anytime during the game." DrawBrick 180, 70, 3 DrawBrick 212, 70, 2 DrawBrick 246, 70, 1 DrawBrick 246, 42, 5 DrawBrick 286, 70, 6 LOCATE 23, 10: PRINT " - Press ENTER - " WHILE INKEY$ <> CHR$(13) WEND Menu 1 END SUB SUB kbRepeat (rate%, delay%) inRegs.ax = &H305 IF delay% >= 0 AND delay% <= 2 THEN inRegs.bx = (delay% * &H100) ELSE inRegs.bx = &H300 END IF IF rate% >= 0 AND rate <= &H1F THEN inRegs.bx = inRegs.bx + rate% ELSE inRegs.bx = inRegs.bx + &HC END IF CALL INTERRUPT(&H16, inRegs, outRegs) END SUB SUB Menu (A) CLS LOCATE 1: PRINT "Version .97" DrawBrick 60, 80, 1: DrawBrick 50, 80, 1: DrawBrick 50, 75, 1: DrawBrick 50, 70, 1: DrawBrick 50, 65, 1: DrawBrick 50, 60, 1: DrawBrick 60, 70, 1: DrawBrick 60, 60, 1: DrawBrick 70, 65, 1: DrawBrick 70, 75, 1: DrawBrick 80, 80, 2: DrawBrick 80, 75, 2: DrawBrick 80, 70, 2 DrawBrick 80, 65, 2: DrawBrick 90, 65, 2: : DrawBrick 80, 60, 2: DrawBrick 100, 80, 3: DrawBrick 100, 75, 3: DrawBrick 100, 70, 3 DrawBrick 100, 60, 3: DrawBrick 110, 75, 1: DrawBrick 110, 70, 1: DrawBrick 120, 60, 1 DrawBrick 120, 80, 1: DrawBrick 110, 65, 1: DrawBrick 130, 80, 2: DrawBrick 130, 75, 2: DrawBrick 130, 70, 2 DrawBrick 130, 65, 2: DrawBrick 130, 60, 2: DrawBrick 140, 70, 2: DrawBrick 150, 65, 2: DrawBrick 150, 75, 2: DrawBrick 150, 80, 2 DrawBrick 150, 60, 2: DrawBrick 260, 80, 1: DrawBrick 250, 80, 1 DrawBrick 250, 70, 1: DrawBrick 250, 65, 1: DrawBrick 250, 60, 1: DrawBrick 250, 75, 1 DrawBrick 230, 80, 3: DrawBrick 230, 75, 3: DrawBrick 230, 70, 3: DrawBrick 230, 65, 3: DrawBrick 230, 60, 3: DrawBrick 240, 80, 3 DrawBrick 220, 80, 2: DrawBrick 220, 75, 2: DrawBrick 220, 70, 2: DrawBrick 220, 65, 2: DrawBrick 210, 60, 2: DrawBrick 200, 75, 2 DrawBrick 200, 70, 2: DrawBrick 200, 65, 2: DrawBrick 200, 80, 2: DrawBrick 180, 70, 1: DrawBrick 190, 60, 1: DrawBrick 180, 60, 1 DrawBrick 170, 80, 1: DrawBrick 170, 75, 1: DrawBrick 170, 70, 1: DrawBrick 170, 65, 1: DrawBrick 170, 60, 1: DrawBrick 210, 70, 2 IF A = 1 THEN GOTO SKIPANYKEY: LOCATE 23, 10: PRINT " - Press ENTER - " DO KEYIN$ = INKEY$ LOOP UNTIL KEYIN$ = CHR$(13) LOCATE 23, 11: PRINT " " LOCATE 23, 11: INPUT "Username: ", UNAME$: SKIPANYKEY: LOCATE 23, 11: PRINT " " S = 1 DO KEYIN$ = INKEY$ IF S = 1 THEN : LOCATE 15, 11: COLOR 31: PRINT " - Play - ": LOCATE 17, 11: COLOR 18: PRINT " Help ": LOCATE 19, 11: COLOR 18: PRINT " Credits ": LOCATE 21, 11: COLOR 18: PRINT " Exit ": LOCATE 23 _ , 11: COLOR 18: PRINT " Scoreboards " IF S = 2 THEN : LOCATE 15, 11: COLOR 18: PRINT " Play ": LOCATE 17, 11: COLOR 31: PRINT " - Help - ": LOCATE 19, 11: COLOR 18: PRINT " Credits ": LOCATE 21, 11: COLOR 18: PRINT " Exit ": LOCATE 23 _ , 11: COLOR 18: PRINT " Scoreboards " IF S = 3 THEN : LOCATE 15, 11: COLOR 18: PRINT " Play ": LOCATE 17, 11: COLOR 18: PRINT " Help ": LOCATE 19, 11: COLOR 31: PRINT " - Credits - ": LOCATE 21, 11: COLOR 18: PRINT " Exit ": LOCATE 23 _ , 11: COLOR 18: PRINT " Scoreboards " IF S = 4 THEN : LOCATE 15, 11: COLOR 18: PRINT " Play ": LOCATE 17, 11: COLOR 18: PRINT " Help ": LOCATE 19, 11: COLOR 18: PRINT " Credits ": LOCATE 21, 11: COLOR 31: PRINT " - Exit - ": LOCATE 23 _ , 11: COLOR 18: PRINT " Scoreboards " IF S = 5 THEN : LOCATE 15, 11: COLOR 18: PRINT " Play ": LOCATE 17, 11: COLOR 18: PRINT " Help ": LOCATE 19, 11: COLOR 18: PRINT " Credits ": LOCATE 21, 11: COLOR 18: PRINT " Exit ": LOCATE 23 _ , 11: COLOR 31: PRINT " - Scoreboards - " IF KEYIN$ = CHR$(0) + "H" THEN S = S - 1 IF KEYIN$ = CHR$(0) + "P" THEN S = S + 1 IF KEYIN$ = CHR$(13) AND S = 1 THEN GOTO PLAYT IF KEYIN$ = CHR$(13) AND S = 2 THEN Help: IF KEYIN$ = CHR$(13) AND S = 3 THEN Credits: IF KEYIN$ = CHR$(13) AND S = 5 THEN ScoreBoard: IF KEYIN$ = CHR$(13) AND S = 4 THEN CLS : COLOR 15: PRINT "Thanks for playing BrickFall!": PRINT : PRINT "-Lenny": END IF S = 6 THEN S = 1 IF S = 0 THEN S = 5 LOOP PLAYT: END SUB SUB Pause (A) IF A = 1 THEN GET (110, 80)-(220, 100), PR LOCATE 12, 16: PRINT "GAME PAUSED" DO KEYIN$ = INKEY$ LOOP UNTIL KEYIN$ <> "" PUT (110, 80), PR, PSET END IF END SUB SUB ScoreBoard CLS PRINT "Lenny 19745 ------ " OPEN "BFSCORE.TXT" FOR INPUT AS #1 DO UNTIL EOF(1) INPUT #1, OLSCORE$ PRINT OLSCORE$ LOOP CLOSESCORE: CLOSE LOCATE 1 PRINT "NAME: SCORE: SCORE CODE:" PRINT LOCATE 23, 10: PRINT " - Press ENTER - " WHILE INKEY$ <> CHR$(13) WEND Menu 1 END SUB