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 = 45 DIM BrX(Brix), BrY(Brix), BrC(Brix), BrM(Brix), BrE(Brix), BrAN(Brix), BrF(Brix), VY!(Brix), XV(Brix) Menu 0 RESTRT: CLS T = 0 T1 = 0: T2 = 0: T3 = 0: SCORE = 0 tb& = 0 Br = 0 XT = 1 Xx = 0 cx = 160 FOR N = 1 TO Brix BrX(N) = INT(RND * 35) * 10 BrF(N) = INT(RND * 200) BrY(N) = 5'INT(RND * 200) - 200 IF POINT(BrX(N), BrY(N)) <> 0 THEN BrY(N) = BrY(N) + 5: BrF(N) = BrF(N) - 5 BrC(N) = INT(RND * 3) + 1 XV(N) = RND * 3 - 1 VY!(N) = INT(RND * 1) + 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$ = INKEY$ inRegs.ax = &HC06 CALL INTERRUPT(&H21, inRegs, outRegs) FOR SLW = 1 TO T / 24 NEXT SLW FOR N = 1 TO Brix IF BrF(N) > 1 THEN BrF(N) = BrF(N) - 1 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& < 500 THEN BrE(N) = 0 VY!(N) = 0 XV(N) = 0 BrX(N) = INT(RND * 35) * 10 BrY(N) = 5 IF POINT(BrX(N), BrY(N)) <> 0 THEN BrY(N) = BrY(N) + 5 BrF(N) = INT(RND * 40) + 2 IF G2 >= 1 THEN BrC(N) = 2: G2 = G2 - 1: GOTO SKIPRANC: BrCr = INT(RND * 16) + 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 IF BrCr = 15 THEN BrC(N) = 6 IF BrCr = 16 THEN BrC(N) = 7 SKIPRANC: XV(N) = RND * 4 - 2 VY!(N) = INT(RND * 1) + 1 BrM(N) = 1 Br = Br + 1 tb& = tb& + 1 END IF END IF VY!(N) = VY!(N) + .03 IF XV(N) > 0 THEN XV(N) = XV(N) - .01 IF XV(N) < 0 THEN XV(N) = XV(N) + .01 IF BrM(N) = 0 THEN GOTO SKIPBRIX1: DrawBrick BrX(N), BrY(N), 0 'IF BrX(N) <= 5 OR BrX(N) >= 324 THEN ' VV = XV(N) ' ' IF VV < 0 AND VV > -100 THEN ' XV(N) = XV(N) + (VV * 2) ' ELSEIF VV > 0 AND VV < 100 THEN ' XV(N) = XV(N) - (VV * 2) ' END IF 'END IF IF XV(N) <> 0 AND BrF(N) = 1 THEN BrX(N) = BrX(N) + XV(N) IF BrC(N) = 4 AND BrF(N) = 1 THEN BrY(N) = BrY(N) + 3 + VY!(N): IF BrC(N) = 7 AND BrF(N) = 1 THEN BrY(N) = BrY(N) + 3 + VY!(N): IF BrC(N) = 1 AND BrF(N) = 1 THEN BrY(N) = BrY(N) + 2 + VY!(N): IF BrC(N) = 2 AND BrF(N) = 1 THEN BrY(N) = BrY(N) + 1 + VY!(N): IF BrC(N) = 3 AND BrF(N) = 1 THEN BrY(N) = BrY(N) + .5 + VY!(N): IF BrC(N) = 6 AND BrF(N) = 1 THEN BrY(N) = BrY(N) + 1 + VY!(N): '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) = 7 THEN RS = INT(RND * 4) + 1 FOR R = 1 TO Brix IF RS = 1 THEN BrC(R) = 6 IF RS = 2 THEN BrC(R) = 4 IF RS = 3 THEN XV(R) = 0 IF RS = 4 THEN XV(R) = RND * 8 - 4 'IF RS = 1 THEN BrC(R) = 6 NEXT R END IF 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 IF KEYIN$ = CHR$(0) + "K" AND cx > 5 THEN DrawBrick cx, 180, 9: cx = cx - 8 IF KEYIN$ = CHR$(0) + "M" AND cx < 290 THEN DrawBrick cx, 180, 9: cx = cx + 8 DrawBrick cx, 180, 5 'LOCATE 1, 28: PRINT "Score"; SCORE IF Br <= 5 AND tb& >= 499 THEN GOTO DONEGAME: IF Xx >= 1 AND XT >= 1 THEN LOCATE 3, 1: PRINT "x"; Xx IF XT = 0 THEN LOCATE 2, 1: PRINT " " IF KEYIN$ = "p" OR KEYIN$ = "P" THEN Pause 1 'LOCATE 1: PRINT tb& 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 SCORE < 0 THEN INCR$ = INCR$ + "Z" 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) 'Menu 1 WEND CLS : COLOR 14: PRINT "Thanks for playing BrickFall 2! Please play again.": 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 - 1, Y - 3)-(X + 10, 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, 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 IF C = 7 THEN LINE (X, Y + 1)-(X + 9, Y + 4), 24, BF LINE (X + 1, Y)-(X + 3, Y), 24, BF LINE (X + 6, Y)-(X + 8, Y), 24, BF PSET (X + 1, Y), 30: PSET (X + 6, Y), 30: PSET (X + 3, Y), 20: PSET (X + 8, Y), 20 LINE (X, Y + 4)-(X + 9, Y + 4), 20, BF LINE (X + 9, Y + 1)-(X + 9, Y + 4), 20, BF END IF IF C = 9 THEN LINE (X, Y + 1)-(X + 19, Y + 2), 0, BF LINE (X + 1, Y)-(X + 3, Y), 0, BF LINE (X + 6, Y)-(X + 8, Y), 0, BF LINE (X + 11, Y)-(X + 13, Y), 0, BF LINE (X + 16, Y)-(X + 18, Y), 0, 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 2." 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 DrawBrick 170, 105, 4: DrawBrick 160, 105, 4: DrawBrick 150, 105, 4: DrawBrick 140, 105, 4: DrawBrick 150, 100, 4: DrawBrick 160, 95, 4: DrawBrick 170, 90, 4: DrawBrick 160, 85, 4: DrawBrick 150, 85, 4: DrawBrick 140, 90, 4: 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 LOCATE 3 PRINT "Lenny 22050 N/A" 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