1 ' Brickout.bas By: Wayne Davison 10 dim b%(5,20),topnam$(11),topscr%(11),topbal%(11),w%(11) 20 for i%=0 to 11:read w%(i%):next i%:on error goto 50 30 newscore%=0:open "I",#1,"brickout.scores" 40 for i%=1 to 11:input#1,topnam$(i%),topscr%(i%),topbal%(i%):next i%:close #1:goto 60 50 for i%=1 to 11:read topnam$(i%),topscr%(i%),topbal%(i%):next i%:resume 60 60 audio 15,1:wave 6,w%():on error goto 0 70 outline 0:drawmode 0:n%=11:ask window wid%,hi% 80 if wid%>320 then screen 0,4,0 90 ask rgb 0,rs%,gs%,bs%:rgb 0,0,0,0:ask rgb 1,rs1%,gs1%,bs1%:rgb 1,5,8,13 100 gosub 1000:topbal%(11)=0 110 scnclr 120 pena 2:draw(0,179 to 0,0 to 302,0 to 302,179) 130 xss%=1:xsf%=2:yss%=2:ysf%=4 140 ask mouse xo%,y%,b% 150 pena 2:box (xo%-15,180;xo%+15,185),1 160 gosub 600 170 score%=0:ball%=0:c%=rnd(-1) 200 ball%=ball%+1:miss%=0:bf%=0:yv%=yss%:xv%=-xss% 210 get a$:if a$<>"" then 210 220 ?at(12,13);"Score: ";score%*5:?at(5,15);"Serving Ball: ";ball%:gosub 300 230 ?at(5,18);"Click the mouse or .":?at(5,20);"(use to end the game)":?at(1,1); 240 gosub 300:get a$:if b%=0 and a$="" then 240 250 if a$=chr$(27) or a$="q" or a$="Q" then 700 260 pena 0:box (30,95;265,160),1:xp%=int(rnd*240)+20:yp%=61 270 drawmode 2:box(xp%-3,yp%-3;xp%+3,yp%+3),1:drawmode 0 280 gosub 300:gosub 400:if miss%<>1 then 280 else 200 300 ask mouse x%,y%,b%:d%=x%-xo%:if d%>0 then e%=15 else e%=-15 310 pena 2:box (xo%+d%+e%,180;xo%+e%,185),1:pena 0:box (xo%+d%-e%,180;xo%-e%,185),1:xo%=x%:return 400 drawmode 2:box(xp%-3,yp%-3;xp%+3,yp%+3),1 410 for i%=1 to 4 420 xp%=xp%+xv%:if xp%<3 or xp%>299 then xv%=-xv%:c%=sound(2+(xp%<3),1,2,60,7000):goto 420 430 yp%=yp%+yv%:if yp%<3 then yv%=-yv%:bf%=1:c%=sound(1,1,2,50,7000):c%=sound(2,1,2,50,7000):goto 430 440 if yp%>200 then miss%=1:goto 580 450 if bf%=0 or yp%<26 or yp%>66 then 520 460 c%=int((xp%-2)/15):r%=int((yp%-26)/8):if b%(r%,c%)=0 then 520 470 b%(r%,c%)=0:yv%=-yv%:bf%=0:if r%<2 then yv%=ysf%*sgn(yv%) 480 drawmode 0:pena 0:box(c%*15+2,r%*8+26;c%*15+15,r%*8+32),1 490 c%=sound(4,1,20,40,2000+r%*400):c%=sound(8,1,20,40,2000+r%*400) 500 score%=score%+(5-r%):br%=br%-1:if br%=0 then gosub 600 510 drawmode 2 520 if yp%<178 or yp%>186 or abs(xp%-x%)>16 or yv%<0 then 560 530 c%=sound(1,1,2,50,6000):c%=sound(2,1,2,50,6000) 540 if abs(xp%-x%)>8 then xv%=xsf% else xv%=xss% 550 xv%=sgn(xp%-x%+.5)*xv%:yv%=-yv%:bf%=1:goto 430 560 next i% 570 box(xp%-3,yp%-3;xp%+3,yp%+3),1 580 drawmode 0:return 600 br%=0:for r%=0 to 4:pena r%+5 610 for c%=0 to 19:b%(r%,c%)=1:br%=br%+1 612 pena r%+5 620 box(c%*15+2,r%*8+26;c%*15+15,r%*8+32),1 622 if c% mod 4 = 0 then gosub 300 630 next c%:next r% 640 return 700 ball%=ball%-1:score%=score%*5:n%=11:if ball%=0 then 760 else 730 710 n%=n%-1:if n%=10 then 730 720 topnam$(n%+1)=topnam$(n%):topscr%(n%+1)=topscr%(n%):topbal%(n%+1)=topbal%(n%) 730 if n%>1 then if score%/ball% > topscr%(n%-1)/topbal%(n%-1) then 710 740 if n%>10 then 760 else scnclr:?" "; 750 ?at(0,5);"You made the top 10!":?:input "What's your handle";topnam$(n%):newscore%=1 760 topscr%(n%)=score%:topbal%(n%)=ball% 770 goto 100 800 data 100,90,60,100,90,60,-100,-90,-60,-100,-90,-60 810 data "Gandalf", 5000,5 820 data "Aragorn", 4000,5 830 data "Bilbo", 3000,5 840 data "Frodo", 2000,5 850 data "Samwise", 1000,5 860 data "Legolas", 500,5 870 data "Thorin", 400,5 880 data "Smaug", 300,5 890 data "Shelob", 200,5 900 data "Sauron", 100,5 910 data "(Last game)", 0,0 1000 scnclr 1010 ?at(12,2);"B R I C K O U T" 1020 ?at(12,4);"By: Wayne Davison" 1030 ?at (2,7);"No Name Score Balls Average" 1040 ?" == =========== ===== ===== =======" 1050 for i%=1 to 11:if topbal%(i%)=0 then 1090 1060 if i%=n% then inv%=1 else inv%=0 1070 if i%<11 then ? using " ##";inverse(inv%);i%; else ? inverse(inv%);" "; 1080 ?using " \234567890\####### ### #######.##";inverse(inv%);topnam$(i%),topscr%(i%),topbal%(i%),topscr%(i%)/topbal%(i%) 1090 next i% 1100 ?at(1,21);"Press: to begin" 1110 ?at(11,22);"'I' for Instructions" 1120 ?at(5,23);"or to exit";:?at(1,1); 1150 ask mouse x%,y%,b%:if b%=0 then get a$:if a$="" then 1150 1160 if a$="i" or a$="I" then gosub 2000:goto 1000 1170 if a$=chr$(27) then 3000 1190 return 2000 scnclr 2010 ?:?" In Brick Out, you garner points for" 2020 ?" destroying a multi-hued brick wall" 2030 ?" using the ever-deadly bouncing ball." 2040 ?:?" You keep the ball in play and direct" 2050 ?" it using a mouse-controlled paddle." 2060 ?:?" The lowest row of bricks score 5 pts" 2070 ?" up to 25 points for the highest row." 2080 ?" The two highest rows of bricks will" 2090 ?" also cause the ball to speed up when" 2100 ?" it hits them. When the last brick" 2110 ?" is gone, your only reward is another" 2120 ?" rainbow wall, ready for destruction." 2130 ?:?" There is no limit to the number of" 2140 ?" balls you may use in each game, but" 2150 ?" the top-ten roster ranks your game" 2160 ?" on the average score per ball. The" 2170 ?" 'standard' game uses 5 balls." 2180 ?at(12,23);"";:?at(1,1); 2190 getkey a$ 2200 scnclr 2210 ?:?" Feel free to give this game to any" 2220 ?" and all who want it. Modify it as" 2230 ?" much as you want (See lines 4000-" 2240 ?" for some modification hints). The" 2250 ?" game does not make use of sprites" 2260 ?" or collision detection, since they" 2270 ?" are not yet available from ABasiC." 2280 ?" Their presence will really smooth" 2290 ?" the game play in the future." 2300 ?:?" In the mean time, Enjoy!" 2310 ?:?" This game is brought to you by:" 2320 ?:?" Wayne Davison" 2330 ?:?" (No known relation to Peter Davison" 2340 ?" of Doctor Who fame)." 2350 ?at(12,23);"";:?at(1,1); 2360 getkey a$ 2900 return 3000 rgb 0,rs%,gs%,bs%:rgb 1,rs1%,gs1%,bs1% 3010 if wid%>320 then screen 1,2,0 3020 scnclr:?" " 3100 if newscore%=0 then end 3110 on error goto 3140 3120 open "O",#1,"brickout.scores":topbal%(11)=0 3130 for i%=1 to 11:write#1,topnam$(i%),topscr%(i%),topbal%(i%):next i% 3140 close #1 3150 end 4000 ' Modification tips: 4010 ' 4020 ' * For a more challenging game, change the loop in line 410 4030 ' from 1-4 to 1-5, or fiddle with the slow/fast x/y values 4040 ' in line 130. 4050 ' * To make the game easier(?) by hitting more bricks per ball, 4060 ' add the line: 475 bf%=1 4070 ' * To change the paddle size, you'll need to change lines 4080 ' 150, 300, 520, & 540. 4090 ' * For a game variation, add: 475 yv%=-yv%:bf%=1 4100 ' to check it out, or remove yv%=-yv%:bf%=0 from line 470. 4110 ' * To silence the game, turn the volume down, or add the 4120 ' line: 65 audio 15,0 which (due to a bug in ABasiC) 4130 ' turns off all sounds until ABasiC is restarted. 4140 ' * To disable the saving of the top ten score to disk, add: 4150 ' 35 goto 50 & 3090 end as a quick fix that is 4160 ' easily undone. 4170 ' 4180 ' Above all, enjoy!