The top paddle is controlled by the A and D keys.
The bottom paddle is controlled by the left/right arrow keys.
Code: Select all
'
' Use keys A and D for top paddle and left/right arrow keys for bottom paddle
const SCRW = 640
const SCRH = 480
screenres SCRW,SCRH,32
color rgb(0,0,0),rgb(255,255,255):cls
dim shared as integer gameOver
dim shared as integer SCORE1,SCORE2
type RECTANGLE
as integer x
as integer y
as integer w
as integer h
as integer dx
as integer dy
end type
dim shared as RECTANGLE ball
ball.x = SCRW\2
ball.y = 80
ball.w = 10
ball.h = 10
ball.dx = 2
ball.dy = 2
dim shared as RECTANGLE pad1,pad2
pad1.w = 125
pad1.h = 10
pad1.x = SCRW\2 - pad1.w\2
pad1.y = SCRH-pad1.h*2
pad2.w = 125
pad2.h = 10
pad2.x = SCRW\2 - pad2.w\2
pad2.y = pad2.h
sub moveBall()
ball.x = ball.x + ball.dx
ball.y = ball.y + ball.dy
'check for collision with paddle 1
if (ball.x+ball.w) >= pad1.x and ball.x < (pad1.x+pad1.w) and (ball.y+ball.h) >= pad1.y then
ball.y = pad1.y - ball.h 'pull out of paddle
ball.dy = -ball.dy 'assume center hit
ball.dx = 0
'any other area of paddle hit?
if (ball.x+ball.w) - pad1.x <= 25 then
ball.dx = -2 'shoot left shallow
elseif (ball.x+ball.w\2)-pad1.x > 25 and (ball.x+ball.w\2)-pad1.x <= 50 then
ball.dx = -1 'shoot left
elseif (ball.x+ball.w\2)-pad1.x >= 75 and (ball.x+ball.w\2)-pad1.x <= 100 then
ball.dx = 1 'shoot right shallow
elseif (ball.x+ball.w\2)-pad1.x > 100 then
ball.dx = 2 'shoot right
end if
end if
'check for collision with paddle 2
if (ball.x+ball.w) >= pad2.x and ball.x < (pad2.x+pad2.w) and (ball.y) <= pad2.y then
ball.y = pad2.y + pad2.h 'pull out of paddle
ball.dy = -ball.dy 'assume center hit
ball.dx = 0
'any other area of paddle hit?
if (ball.x+ball.w) - pad2.x <= 25 then
ball.dx = -2 'shoot left shallow
elseif (ball.x+ball.w\2)-pad2.x > 25 and (ball.x+ball.w\2)-pad2.x <= 50 then
ball.dx = -1 'shoot left
elseif (ball.x+ball.w\2)-pad2.x >= 75 and (ball.x+ball.w\2)-pad2.x <= 100 then
ball.dx = 1 'shoot right shallow
elseif (ball.x+ball.w\2)-pad2.x > 100 then
ball.dx = 2 'shoot right
end if
end if
'check for boundary collision
if ball.x <0 then
ball.x = 0
ball.dx = - ball.dx
end if
if ball.y < 0 then
ball.y = 0
ball.dy = -ball.dy
SCORE1 = SCORE1 + 1
end if
if ball.x + ball.w >= SCRW then
ball.x = SCRW-ball.w-1
ball.dx = -ball.dx
end if
if ball.y + ball.h >= SCRH then
SCORE2 = SCORE2 + 1
ball.y = SCRH-ball.h-1
ball.dy = -ball.dy
end if
end sub
sub movePaddles()
pad1.x = pad1.x + pad1.dx
if pad1.x < 0 then pad1.x = 0
if pad1.x > SCRW - pad1.w - 1 then
pad1.x = SCRW - pad1.w - 1
end if
pad2.x = pad2.x + pad2.dx
if pad2.x < 0 then pad2.x = 0
if pad2.x > SCRW - pad2.w - 1 then
pad2.x = SCRW - pad2.w - 1
end if
end sub
sub drawBall()
line (ball.x,ball.y)-(ball.x+ball.w,ball.y+ball.h),rgb(0,0,0),bf
end sub
sub drawPaddles()
line (pad1.x,pad1.y)-(pad1.x+pad1.w,pad1.y+pad1.h),rgb(0,0,255),bf
line (pad1.x,pad1.y)-(pad1.x + 25,pad1.y+pad1.h),rgb(150,150,255),bf
line (pad1.x+25,pad1.y)-(pad1.x+50,pad1.y+pad1.h),rgb(50,50,255),bf
line (pad1.x+75,pad1.y)-(pad1.x+100,pad1.y+pad1.h),rgb(50,50,255),bf
line (pad1.x+100,pad1.y)-(pad1.x+pad1.w,pad1.y+pad1.h),rgb(150,150,255),bf
line (pad2.x,pad2.y)-(pad2.x+pad2.w,pad2.y+pad2.h),rgb(255,0,0),bf
line (pad2.x,pad2.y)-(pad2.x + 25,pad2.y+pad2.h),rgb(255,100,100),bf
line (pad2.x+25,pad2.y)-(pad2.x+50,pad2.y+pad2.h),rgb(255,50,50),bf
line (pad2.x+75,pad2.y)-(pad2.x+100,pad2.y+pad2.h),rgb(255,50,50),bf
line (pad2.x+100,pad2.y)-(pad2.x+pad2.w,pad2.y+pad2.h),rgb(255,100,100),bf
end sub
sub userInput()
pad1.dx = 0
pad2.dx = 0
if multikey(&H4D) then pad1.dx = 4
if multikey(&H4B) then pad1.dx = -4
if multikey(&H20) then pad2.dx = 4 ' D key
if multikey(&H1E) then pad2.dx = -4 ' A key
end sub
sub drawScreen()
screenlock
cls
line (0,0)-(SCRW-1,SCRH-1),rgb(0,0,0),b 'border display area
locate 2,2
print "SCORE 1 =";SCORE1
print
print " SCORE 2 =";SCORE2
drawBall()
drawPaddles()
screenunlock
end sub
do
userInput()
movePaddles()
moveBall()
drawScreen()
sleep 2
loop until gameOver = 1 or multikey(&H01)