home *** CD-ROM | disk | FTP | other *** search
- DECLARE SUB Pause ()
- DECLARE SUB DrawBrickBox (XStart!, YStart!, SizeX!, SizeY!, CStart!, BrickBuild!)
- '$INCLUDE: 'BAS-ETC.BI'
- VBegin:
- CONST BrickX = 15
- CONST BrickY = 3
-
- CONST PaddleX = 30
- CONST PaddleY = 1
- CONST PaddleYH = 170
-
- CONST BallX = 2
- CONST BallY = 2
-
- CONST MinX = 0
- CONST MinY = 0
- CONST MaxX = 320
- CONST MaxY = 200
-
- CONST PI = 3.141592
- CONST deg2rad = PI / 180
-
- REDIM SHARED TempGet(9000)
- REDIM SHARED Paddle(100)
- REDIM SHARED Ball(100)
- REDIM SHARED Bricks(15, 30)
- REDIM SHARED HSN(100) AS STRING
- REDIM SHARED HS(100)
- DIM SHARED TotalBricks
-
- BSYStart = -14
- NextLev = -1
- Score = 0
- KEY 15, CHR$(&H0) + CHR$(&H1)
- KEY(15) ON
- ON KEY(15) GOSUB EndGame
- NumOff
- GOTO Start
-
- '*********************************
- '* Begin Procedures *
- '*********************************
-
- DrawPaddle: '** (DPX,DPY,DPC) **
- LINE (OldMX, DPY)-(OldMX + PaddleX, DPY + PaddleY), 0, BF
- PUT (DPX, DPY), Paddle, PSET
- RETURN
-
- InitScreen:
- CLS
- SCREEN 13
- RETURN
-
- GetPaddle:
- LINE (1, 1)-(1 + PaddleX, 1 + PaddleY), 0, BF
- LINE (1, 1)-(1 + PaddleX, 1 + PaddleY), 15, BF
- GET (1, 1)-(1 + PaddleX, 1 + PaddleY), Paddle
- RETURN
-
- GetBall:
- LINE (1, 1)-(1 + BallX, 1 + BallY), 0, BF
- LINE (1, 1)-(1 + BallX, 1 + BallY), 15, BF
- GET (1, 1)-(1 + BallX, 1 + BallY), Ball
- RETURN
-
-
- MoveBall:
- IF SBallX < 7 THEN
- BallAngle = BallAngle - 90
- CAng = 1
- END IF
- IF SBallX > 310 THEN
- BallAngle = BallAngle + 90
- CAng = 1
- END IF
- IF SBallY < 7 THEN
- BallAngle = BallAngle - 90
- CAng = 1
- END IF
- IF CAng = 1 THEN
- COSA = COS(BallAngle * deg2rad)
- SINA = SIN(BallAngle * deg2rad)
- SOUND 600, .1
- CAng = 0
- END IF
- IF SBallY > 175 THEN GOTO Miss
- IF SBallY > PaddleYH AND SBallX > DPX AND SBallX < DPX + PaddleX THEN
- IF SBallX < PaddleX1 + (PaddleX2 - PaddleX1) THEN
- TDist1 = SBallX - DPX
- TDist2 = 15 - TDist1
- BallAngle = 270 - TDist2 * PaddleSen
- ELSE
- TDist1 = PaddleX2 - SBallX
- TDist2 = -1 * (15 - TDist1)
- BallAngle = 270 + TDist2 * PaddleSen
- END IF
- COSA = COS(BallAngle * deg2rad)
- SINA = SIN(BallAngle * deg2rad)
- SOUND 1000, .1
- SBallY = PaddleYH - 1
- END IF
-
- IF SBallY <= (((BSYSize + 1) * 7) + BSYStart) AND SBallX <= 300 AND SBallX >= 19 THEN
- BX = INT(SBallX / 19)
- BY = INT((SBallY - (NextLev * 7)) / 7)
- IF Bricks(BX, BY) = 1 THEN
- BLeft = BLeft + 1
- IF BLeft = TotalBricks THEN GOTO Start2
- Bricks(BX, BY) = 0
- LINE (BX * 19, ((BY * 7) + (NextLev * 7)))-((BX * 19) + BrickX, (((BY * 7) + (NextLev * 7)) + BrickY)), 0, BF
- GOSUB DrawBall
- BallAngle = BallAngle - 90
- COSA = COS(BallAngle * deg2rad): SINA = SIN(BallAngle * deg2rad)
- SOUND 1000, .1
- Score = Score + (((6 - BY) + 1) * (16 + NextLev))
- GOSUB DrawScoreTxt
- END IF
- END IF
- SBallX = SBallX + (COSA / (5 - BallSpeed))
- SBallY = SBallY + (SINA / (5 - BallSpeed))
- RETURN
-
- DrawBall:
- PUT (SBallX, SBallY), Ball, XOR
- FOR P = 1 TO 70: NEXT
- PUT (SBallX, SBallY), Ball, XOR
- RETURN
-
- DrawScoreTxt:
- COLOR 9
- LOCATE 23, 2: PRINT "Score:"; Score
- RETURN
-
- DrawBallsTxt:
- COLOR 9
- LOCATE 23, 15: PRINT "Balls:"; Balls
- RETURN
-
- Miss:
- Balls = Balls - 1
- IF Balls = -1 THEN GOTO EndGame
- GOSUB DrawScoreTxt
- GOSUB DrawBallsTxt
- Pause
- SBallX = 160
- SBallY = (BSYSize * 7) + 15
- BallAngle = INT(RND * 180)
- COSA = COS(BallAngle * deg2rad)
- SINA = SIN(BallAngle * deg2rad)
- RETURN
-
- MLeft:
- DPX = DPX - PadAdd
- RETURN
-
- MRight:
- DPX = DPX + PadAdd
- RETURN
-
-
- '*******************************
- '* Begin Main *
- '*******************************
- Start:
- RANDOMIZE TIMER
- CLOSE
- 'OPEN "HScore.dat" FOR INPUT AS #1
- GOSUB InitScreen
- GOSUB IntroScreen
- GOSUB GetOptions
- CLS
- GOSUB GetPaddle
- GOSUB GetBall
- Start2:
- CLS
- NextLev = NextLev + 1
- COLOR 9
- LOCATE 23, 25: PRINT "Level:"; NextLev + 1
- COLOR 15
- Balls = 4
- BSXSize = 15
- BSYSize = 4
- BSXStart = 19
- BSYStart = BSYStart + 21
- BSColor = INT(RND * 82) + 18
- DPX = 160 - (PaddleX / 2)
- DPY = PaddleYH
- SBallX = 160
- SBallY = (BSYStart + (BSYSize * 7)) + 15
- CALL DrawBrickBox(BSXStart, BSYStart, BSXSize, BSYSize, BSColor, 1)
- GOSUB DrawScoreTxt
- GOSUB DrawBallsTxt
- LINE (7, 2)-(310, 190), 25, B
- LINE (6, 1)-(311, 191), 27, B
- LINE (6, 174)-(310, 174), 25
- LINE (6, 175)-(310, 175), 27
- BallAngle = INT(RND * 180)
- COSA = COS(BallAngle * deg2rad)
- SINA = SIN(BallAngle * deg2rad)
- CALL MouseWalls(1, 200, 8, 558, 1)
- CALL MouseMove(2 * (160 - (PaddleX / 2)), 100, 1)
- DO
- OldMX = DPX
- CALL MouseLoc(DPX, MY, 1)
- DPX = DPX / 2
- GOSUB MoveBall
- IF OldMX <> DPX THEN
- PaddleX1 = DPX
- PaddleX2 = DPX + PaddleX
- GOSUB DrawPaddle
- END IF
- GOSUB DrawBall
- LOOP
-
-
- EndGame:
- 'GOSUB DispHScore
- CLS
- LOCATE 1, 1: INPUT "Play Again"; PA$
- PA$ = UCASE$(PA$)
- IF PA$ = "Y" THEN GOTO VBegin ELSE END
-
-
- DispHScore:
- CLS
- Att = 31
- y = -3
- DO UNTIL Att = 60
- Att = Att + 1
- y = y + 8
- LINE (1, y)-(320, y + 8), Att, BF
- LOOP
- INPUT #1, NOHS
- Num = 0
- y = 3
- x = 5
- DO UNTIL Num = NOHS
- Num = Num + 1
- y = y + 2
- INPUT #1, HSN$(Num)
- INPUT #1, HS(Num)
- LOCATE y, x: PRINT HSN$(Num)
- nlength = LEN(HSN$(Num))
- LOCATE y, 20: PRINT HS(Num)
- LOOP
- Pause
- RETURN
-
-
- IntroScreen:
- SCREEN 13
- CLS
- SXTemp = 0
- SYTemp = 0
- XTemp = 0
- TotalBricks = 0
- SXTemp = -19
- SYTemp = -7
- SXAdd = BrickX + 4
- SYAdd = BrickY + 4
- DO UNTIL XTemp = 17
- SXTemp = SXTemp + SXAdd
- XTemp = XTemp + 1
- YTemp = 0
- SYTemp = 0
- DO UNTIL YTemp = 28
- YTemp = YTemp + 1
- SYTemp = SYTemp + SYAdd
- LINE (SXTemp, SYTemp)-(SXTemp + BrickX, SYTemp + BrickY), 31 + YTemp, BF
- LOOP
- LOOP
- COLOR 15
- LOCATE 10, 12: PRINT "B R E A K O U T"
- LOCATE 12, 18: PRINT "By"
- LOCATE 13, 12: PRINT "Adam Landefeld"
- CALL Pause
- RETURN
-
-
-
- GetOptions:
- CLS
- SCREEN 13
- CALL DrawBrickBox(10, 10, 15, 15, 15, 0)
- GET (10, 10)-(10 + (15 * 19), 10 + (15 * 7)), TempGet
-
- RedoSpeed:
- PUT (10, 10), TempGet, PSET
- LOCATE 8, 7: INPUT "Speed (0-5)"; BallSpeed
- BallSpeed = BallSpeed + 2
- IF BallSpeed < 3 OR BallSpeed > 7 THEN GOTO RedoSpeed
-
- RedoPad:
- PUT (10, 10), TempGet, PSET
- LOCATE 8, 7: INPUT "Paddle Sens. (0-5)"; PaddleSen
- PaddleSen = PaddleSen + 2
- IF PaddleSen < 2 OR PaddleSen > 7 THEN GOTO RedoPad
- CLS
- RETURN
-
- REM $DYNAMIC
- SUB DrawBrickBox (XStart, YStart, SizeX, SizeY, CStart, BrickBuild)
- TotalBricks = 0
- SXTemp = 0
- SYTemp = 0
- XTemp = 0
- SXTemp = XStart - 19
- SYTemp = YStart - 7
- SXAdd = BrickX + 4
- SYAdd = BrickY + 4
- DO UNTIL XTemp = SizeX
- SXTemp = SXTemp + SXAdd
- XTemp = XTemp + 1
- YTemp = 0
- SYTemp = YStart - 7
- DO UNTIL YTemp = SizeY
- YTemp = YTemp + 1
- SYTemp = SYTemp + SYAdd
- LINE (SXTemp, SYTemp)-(SXTemp + BrickX, SYTemp + BrickY), CStart + YTemp, BF
- IF BrickBuild = 1 THEN Bricks(XTemp, YTemp) = 1: TotalBricks = TotalBricks + 1
- LOOP
- LOOP
-
- END SUB
-
- REM $STATIC
- SUB Pause
- DO UNTIL INKEY$ <> ""
- LOOP
- END SUB
-
-