setscreen ("graphics:vga;offscreenonly")
var chars : array char of boolean
var maxscore, ballcol, timer, ballsize, speed, ballx, bally, lpadx, lpady, rpadx, rpady, dx, dy, lscore, rscore : int
timer := 1
ballsize := 5
speed := 2
lscore := 0
rscore := 0
ballx := maxx div 2
bally := maxy div 2
lpadx := 10
lpady := maxy div 2
rpadx := maxx - 10
rpady := maxy div 2
ballcol := 7
colorback (green)
cls
randint (dx, -2, 2)
randint (dy, -2, 2)
loop
randint (dx, -2, 2)
randint (dy, -2, 2)
exit when dx ~= 0 and dy ~= 0
end loop
put "Enter the number of points you would like to play until."
get maxscore
cls
loop
timer += 1
%Right Paddle Controls
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) and rpady + 20 < maxy then
rpady += 5
end if
if chars (KEY_DOWN_ARROW) and rpady - 20 > 0 then
rpady -= 5
end if
%Left Paddle Controls
if chars ('a') and lpady + 20 < maxy then
lpady += 5
end if
if chars ('z') and lpady - 20 > 0 then
lpady -= 5
end if
if ballx + dx < 10 or ballx + dx > maxx - 10 - ballsize then
dx := -dx
end if
if bally + dy < 10 or bally + dy > maxy - 10 - ballsize then
dy := -dy
end if
ballx += dx * speed
bally += dy * speed
%Right Paddle Collisions
if bally >= rpady - 20 and bally <= rpady + 20 then
if ballx > maxx - 15 - (dx * speed) then
ballcol := 1
if bally > rpady and timer mod 3 = 0 then
dy += 1
else
dy -= 1
end if
end if
else
if ballx >= maxx - 15 - (dx * speed) then
ballsize := 5
lscore += 1
ballx := maxx div 2
bally := maxy div 2
loop
randint (dx, -2, 2)
randint (dy, -2, 2)
exit when dx ~= 0 and dy ~= 0
end loop
ballcol := 7
locatexy (maxx div 2, maxy div 2)
put "Red point"
delay (1000)
cls
if dx = 0 then
dx := 1
end if
end if
end if
%Left Paddle Collisions
if bally >= lpady - 20 and bally <= lpady + 20 then
if ballx < (15 + (dx * speed)) then
ballcol := 4
if bally > lpady and timer mod 3 = 0 then
dy += 1
else
dy -= 1
end if
end if
else
if ballx <= 0 + 15 + (dx * speed) then
ballsize := 5
rscore += 1
ballx := maxx div 2
bally := maxy div 2
loop
randint (dx, -2, 2)
randint (dy, -2, 2)
exit when dx ~= 0 and dy ~= 0
end loop
ballcol := 7
locatexy (maxx div 2, maxy div 2)
put "Blue point"
delay (1000)
cls
if dx = 0 then
dx := 1
end if
end if
end if
%Keep the ball moving relatively horizontal
if dy > 3 then
dy -= 1
elsif dy < -3 then
dy += 1
end if
%Drawing
drawbox (10, 0, maxx - 10, maxy, 7)
drawfilloval (ballx, bally, ballsize, ballsize, ballcol)
drawfillbox (rpadx + 5, rpady - 20, rpadx, rpady + 20, 1)
drawfillbox (lpadx - 5, lpady - 20, lpadx, lpady + 20, 4)
drawline (maxx div 2, 0, maxx div 2, maxy, 7)
View.Update
%Draw the background
/*
drawoval (maxx div 2, maxy div 2, 50, 50, 7)
drawfilloval (maxx div 2, maxy div 2, 5, 5, 7)
drawoval (90, maxy div 4, 40, 40, 7)
drawoval (maxx - 90, maxy div 4, 40, 40, 7)
drawoval (90, maxy - maxy div 4, 40, 40, 7)
drawoval (maxx - 90, maxy - maxy div 4, 40, 40, 7)
drawfilloval (90, maxy div 4, 5, 5, 7)
drawfilloval (maxx - 90, maxy div 4, 5, 5, 7)
drawfilloval (90, maxy - maxy div 4, 5, 5, 7)
drawfilloval (maxx - 90, maxy - maxy div 4, 5, 5, 7)
drawline (maxx div 4 + 15, 0, maxx div 4 + 15, maxy, 7)
drawline (maxx div 4 - 15 + maxx div 2, 0, maxx div 4 - 15 + maxx div 2, maxy, 7)
*/
delay (0)
cls
put lscore, "/", maxscore
locatexy (maxx - 20, maxy)
put rscore, "/", maxscore
%Check if the game is over
if lscore >= maxscore then
cls
put "Red Player Wins!"
elsif rscore >= maxscore then
cls
put "Blue Player Wins!"
end if
exit when rscore >= maxscore or lscore >= maxscore
end loop
|