home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Best of Select: Games 9
/
CD_1.iso
/
dosgames
/
breakout
/
breakout.bas
next >
Wrap
BASIC Source File
|
1995-07-10
|
7KB
|
332 lines
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