dos_compilers/Borland Turbo BASIC v11/BALL.BAS

122 lines
3.7 KiB
QBasic
Raw Normal View History

2024-07-02 00:32:03 +02:00
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
'<27> BALL.BAS <20>
'<27> VERSION 1.0 <20>
'<27> <20>
'<27> Turbo Basic <20>
'<27> (C) Copyright 1987 by Borland International <20>
'<27> <20>
'<27> System Requirements: <20>
'<27> - DOS Version 2.0 or later <20>
'<27> - 320K <20>
'<27> <20>
'<27> This program is a simple demonstration of the graphics capabilities <20>
'<27> of Turbo Basic. It displays a "bouncing ball" that uses random numbers <20>
'<27> to figure out which directions to bounce off to. <20>
'<27> <20>
'<27> In order to run this program do the following: <20>
'<27> 1. Load Turbo Basic by typing TB at the DOS prompt. <20>
'<27> 2. Load the file BALL.BAS from the Load option of the File <20>
'<27> pulldown menu. <20>
'<27> 3. Select Run from the Main menu <20>
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
' logic:
' draw the ball
' use GET to store pixels into an array
' set CurrentPosition = OldPosition = StartPoint
' DO
' Erase (PUT with XOR) the object at the OldPosition
' CurrentPosition = CurrentPosition + Increment
' Display (PUT) the object at the CurrentPosition
' DELAY a small amount of time
' OldPosition = CurrentPosition
' LOOP UNTIL any key is hit
' end of program
'
DEFINT A-Z
RANDOMIZE TIMER
'
' dimension the save buffer for the pixels
'
DIM GraphicsBuffer(1000)
SCREEN 1
'
' set screen min and max based on screen number
'
Max.X = 319 : Min.X = 0
Max.Y = 199 : Min.Y = 0
'
' set size of ball
'
SizeOfBall = 15
'
' set up the starting center position for the ball
'
Start.X = 15
Start.Y = 15
'
' build the ball on the screen
'
CIRCLE (Start.X,Start.Y),SizeOfBall,2
PAINT (Start.X,Start.Y),1,2
'
' store the pixels in a graphics save buffer
'
GET (Start.X-SizeOfBall,Start.Y-SizeOfBall)-(Start.X+SizeOfBall,Start.Y+SizeOfBall),GraphicsBuffer
'
' initialize the position of the ball
'
CurrentPosition.X = OldPosition.X = Start.X
CurrentPosition.Y = OldPosition.Y = Start.Y
'
' set current X direction to Right, Y direction to Down
'
Direction.X = 1
Direction.Y = 1
DO
'
' erase previous ball by doing a PUT at the old position
'
PUT (OldPosition.X,OldPosition.Y),GraphicsBuffer
'
' calculate new X position,
' if at right edge set direction to Left
' if at left edge set direction to right
' if ball hits an edge, make a sound
'
Increment.X = RND*8
IF CurrentPosition.X+Increment.X+30 > Max.X THEN Direction.X = -1 : sound 200+rnd*250,.5
IF CurrentPosition.X-Increment.X < Min.Y THEN Direction.X = 1 : sound 200+rnd*300,.5
CurrentPosition.X = CurrentPosition.X + (Increment.X*Direction.X)
'
' calculate new Y position,
' if at bottom edge set direction to the up
' if at top edge set direction to the down
' if ball hits an edge, make a sound
'
Increment.Y = RND*8
IF CurrentPosition.Y+Increment.Y+30 > Max.Y THEN Direction.Y = -1 : sound 200+rnd*275,.5
IF CurrentPosition.Y-Increment.Y < Min.Y THEN Direction.Y = 1 : sound 200+rnd*325,.5
CurrentPosition.Y = CurrentPosition.Y + (Increment.Y*Direction.Y)
'
' display the ball at the new position
'
PUT (CurrentPosition.X,CurrentPosition.Y),GraphicsBuffer
'
' wait some time for smoother animation
'
DELAY .03
'
' save current position so the ball can be erased before next move
'
OldPosition.X = CurrentPosition.X
OldPosition.Y = CurrentPosition.Y
'
' keep looping until any key is hit
'
LOOP UNTIL INSTAT
END