///////////////////////////////////////////////////////////////////// // // // COPY THIS ENTIRE SOURCE LISTING AND SAVE IT AS A FILE NAMED // // "kit" (OR "kit.txt") IN YOUR PROJECT'S "Library" FOLDER // // // ///////////////////////////////////////////////////////////////////// Task moveball (Float x, Float y, Int vector) Common Float oldx, oldy Common Int oldvect=0 Common Float dx=0.0, dy=-1.0 Common Int size=4 xoff=(xpixels()-640)/2 yoff=(ypixels()-480)/2 a=Getpixel(xoff+x-size,yoff+y-size) b=Getpixel(xoff+x+size,yoff+y-size) c=Getpixel(xoff+x-size,yoff+y+size) d=Getpixel(xoff+x+size,yoff+y+size) If (a And b) vector=absdy(vector) If (c And d) vector=negdy(absdy(vector)) If (a And c) vector=absdx(vector) If (b And d) vector=negdx(absdx(vector)) If (a And !b And !c And !d) vector=absdx(vector) vector=absdy(vector) Endif If (!a And b And !c And !d) vector=negdx(absdx(vector)) vector=absdy(vector) Endif If (!a And !b And c And !d) vector=absdx(vector) vector=negdy(absdy(vector)) Endif If (!a And !b And !c And d) vector=negdx(absdx(vector)) vector=negdy(absdy(vector)) Endif If (a And !b And !c And d) Or (!a And b And c And !d) \ Set vector=vector-32768 If vector!=oldvect ang=3.14159265*(16384-vector)/32768.0 dx=Cos(ang); dy=-Sin(ang) oldvect=vector Endif oldx=x; oldy=y x=x+dx; y=y+dy Linecolor(0); Fillcolor(15) Filledrectangle(xoff+x-size+1,yoff+y-size+1,xoff+x+size-1,yoff+y+size-1) //------------------------------------------------------------------- Int negdx (Int vector) Return -vector Int negdy (Int vector) Return -vector-32768 Int absdx (Int vector) Return Iabs (vector) Int absdy (Int vector) If vector>-16384 And vector<16384 Return -vector-32768 Else Return vector //------------------------------------------------------------------- Task zap tile (Int num, Int pdl, Int wall, Int other) Common Int oldvect=0, pdlflg=0 Common Float oldx, oldy Common Int size num=0; xpdl=0; wall=0; something=0 If oldy-size<=20 Set wall=wall+1 If oldx+size>=620 Set wall=wall+2 If oldy+size>=460 Set wall=wall+4 If oldx-size<=20 Set wall=wall+8 guts (oldx-size, oldy-size, num, xpdl, something) @ guts (oldx+size, oldy-size, num, xpdl, something) @ guts (oldx-size, oldy+size, num, xpdl, something) @ guts (oldx+size, oldy+size, num, xpdl, something) @ If something And !num And !xpdl And !wall Set other=1 Else other=0 pdl=0; If pdlflg And xpdl Return If !xpdl And !pdlflg Return pdl=xpdl; If xpdl And !pdlflg Set pdlflg=1 Else pdlflg=0 Task guts (Int x, Int y, Int num, Int pdl, Int other) * xoff=(xpixels()-640)/2 yoff=(ypixels()-480)/2 z=Getpixel(xoff+x, yoff+y) If z Set other=1 If z And x>19 And x<620 And y>19 And y<460 If z=8 Set pdl=1 Else zz=Getpixel(xoff+40*((x-20)/40)+30, yoff+20*(y/20)+10) If zz!=0 And zz!=7 And zz!=8 And zz!=15 tile ((x+20)/40, y/20, -1) @ num=num+1 Endif Endelse Endif //------------------------------------------------------------------- Task english (Int vector) english (10,12000,vector) @ Task english (Int curve, Int max, Int vector) Common Int xpaddle, ypaddle, length Common Float oldx, oldy Common Int size If Iabs(vector)<16384 dv=Float(500*curve)*(oldx-xpaddle)/length vector=vector+dv If Iabs(vector)>max Set vector=max*Sign(vector) Endif Else dv=Float(500*curve)*(oldx-xpaddle)/length vector=vector-dv If Iabs(vector)<32768-max Set vector=(32768-max)*Sign(vector) Endelse //------------------------------------------------------------------- Task paddle (Int x, Int y, Int len) Common Int xpaddle, ypaddle, length xoff=(xpixels()-640)/2 yoff=(ypixels()-480)/2 xul=x-len; yul=y-2 xlr=x+len; ylr=y+2 If xul<20 xlr=xlr+(20-xul) xul=20 Endif If xlr>619 xul=xul-(xlr-619) xlr=619 Endif Linecolor(8); Fill color (7) Filledrectangle(xoff+xul,yoff+yul,xoff+xlr,yoff+ylr) Solidcolor(0) If xul>20 Call Solidrectangle(xoff+20,yoff+yul,xoff+xul-1,yoff+ylr) If xlr<619 Call Solidrectangle(xoff+xlr+1,yoff+yul,xoff+619,yoff+ylr) xpaddle=(xul+xlr)/2; ypaddle=y; length=len //------------------------------------------------------------------- Task tile(Int x, Int y, Int color) xoff=(xpixels()-640)/2 yoff=(ypixels()-480)/2 If color<0 Solidcolor(0) Solidrectangle(xoff+40*x-20,yoff+20*y,xoff+40*x+19,yoff+20*y+19) Return Endif If color<9 Or color>14 Return Do k=0,1 Linecolor(15) Line(xoff+40*x+k-20,yoff+20*y+k,xoff+40*x+k-20,yoff+20*y+18-k) Line(xoff+40*x+k-20,yoff+20*y+k,xoff+40*x+18-k,yoff+20*y+k) Linecolor(color-8) Line(xoff+40*x+19-k,yoff+20*y+k,xoff+40*x+19-k,yoff+20*y+19-k) Line(xoff+40*x+k-20,yoff+20*y+19-k,xoff+40*x+19-k,yoff+20*y+19-k) Loop Solidcolor(color) Solidrectangle(xoff+40*x-18,yoff+20*y+2,xoff+40*x+17,yoff+20*y+17) Return //------------------------------------------------------------------- Task border xul=1; yul=1; xlr=30; ylr=22; shade=1; hollow=0 frame(20*xul, 20*yul, 20*xlr+19, 20*ylr+19, shade, hollow) @ Task frame (Int xul, Int yul, Int xlr, Int ylr, Int shade, Int hollow) * Int gray[]={0,8,7,15} If shade<0 Or shade>1 Return xoff=(xpixels()-640)/2 yoff=(ypixels()-480)/2 Linecolor(gray[1+shade]) Do k=yul-20,ylr+20 Line(xoff+xul-20,yoff+k,xoff+xul-1,yoff+k) If (kylr) Line(xoff+xul,yoff+k,xoff+xlr,yoff+k) Line(xoff+xlr+1,yoff+k,xoff+xlr+20,yoff+k) Loop Linecolor(gray[2+shade]) Line(xoff+xul-5,yoff+ylr+5,xoff+xlr+5,yoff+ylr+5) Line(xoff+xlr+5,yoff+ylr+5,xoff+xlr+5,yoff+yul-5) Do k=0,5 Line(xoff+xul-20+k,yoff+yul-20+k,xoff+xlr+20-k,yoff+yul-20+k) Line(xoff+xul-20+k,yoff+yul-20+k,xoff+xul-20+k,yoff+ylr+20-k) Loop Linecolor(gray[0+shade]) Line(xoff+xul-5,yoff+yul-5,xoff+xlr+5,yoff+yul-5) Line(xoff+xul-5,yoff+ylr+5,xoff+xul-5,yoff+yul-5) Do k=0,5 Line(xoff+xul-20+k,yoff+ylr+20-k,xoff+xlr+20-k,yoff+ylr+20-k) Line(xoff+xlr+20-k,yoff+yul-20+k,xoff+xlr+20-k,yoff+ylr+20-k) Loop If hollow Return Solidcolor(0) Solidrectangle(xoff+xul,yoff+yul,xoff+xlr,yoff+ylr) ///////////////////////////////////////////////////////////////////// Task square(Int x, Int y, Int color) xoff=(xpixels()-640)/2 yoff=(ypixels()-480)/2 If color<0 Solidcolor(0) Solidrectangle(xoff+20*x,yoff+20*y,xoff+20*x+19,yoff+20*y+19) Return Endif Do k=0,1 Linecolor(15) Line(xoff+20*x+k,yoff+20*y+k,xoff+20*x+k,yoff+20*y+18-k) Line(xoff+20*x+k,yoff+20*y+k,xoff+20*x+18-k,yoff+20*y+k) If color=8 Call Linecolor(8) Else Call Linecolor(color-8) Line(xoff+20*x+19-k,yoff+20*y+k,xoff+20*x+19-k,yoff+20*y+19-k) Line(xoff+20*x+k,yoff+20*y+19-k,xoff+20*x+19-k,yoff+20*y+19-k) Loop If color=8 Call Solidcolor(7) Else Call Solidcolor(color) Solidrectangle(xoff+20*x+2,yoff+20*y+2,xoff+20*x+17,yoff+20*y+17) Return //------------------------------------------------------------------- Task zap square (Int num) Common Int oldvect=0, pdlflg=0 Common Float oldx, oldy Common Int size=4 num=0; xpdl=0; something=0 gutsx (oldx-size, oldy-size, num) @ gutsx (oldx+size, oldy-size, num) @ gutsx (oldx-size, oldy+size, num) @ gutsx (oldx+size, oldy+size, num) @ Task gutsx (Int x, Int y, Int num) * xoff=(xpixels()-640)/2 yoff=(ypixels()-480)/2 z=Getpixel(x, y) If z And x>19 And x<620 And y>19 And y<460 zz=Getpixel(xoff+20*(x/20)+10, yoff+20*(y/20)+10) If zz!=0 And zz!=7 And zz!=8 And zz!=15 square (x/20, y/20, -1) @ num=num+1 Endif Endif //------------------------------------------------------------------- Task booboo Common Int id=0 id = open mci ("\\simple\\sounds\\loser.wav") start mci (id) wait mci done (id) close mci (id) id=0 Task bugle Common Int id id = open mci ("\\simple\\sounds\\bugle.mid") start mci (id) wait mci done (id) close mci (id) id=0 Task pop Common Int popid=0 If (!popid) popid = open mci ("\\simple\\sounds\\pop.wav") start mci (popid, 0) //------------------------------------------------------------------- Int myquit() Common Int id xoff=(xpixels()-640)/2 yoff=(ypixels()-480)/2 If (id) close mci (id) If (popid) close mci (popid) cls; border @ fore color (7) back color (0) tabxy (32+xoff/8, 15+yoff/15) Display "Thanks for playing!", tabxy (32+xoff/8, 17+yoff/15) Display " Goodbye... ", wait (25); Goodbye //-------------------------------------------------------------------