View.Set ('graphics:700;700, position:middle;middle, nobuttonbar, offscreenonly, nocursor')
var x, y : int
var mx, my, button : int
var yd : int := -1
var xd : int := -1
var y1, y2 : int := 300
var x1, x2 : int := 300
var P1, P2, P3, P4 : int := 0
var speed : int := 0
var P1Color, P2Color, P3Color, P4Color : int := 0
var hit : int := 0
var key : array char of boolean
var font : int := Font.New ("Viner Hand ITC:30:bold")
var font2 : int := Font.New ("Comic Sans:20")
var font3 : int := Font.New ("Arial:50")
var Player1, Player2, Player3, Player4, again : string
var P1Win, P2Win, P3Win, P4Win, Play : boolean := false
randint (x, 200, maxx - 200)
randint (y, 200, maxy - 200)
procedure drawField
Draw.FillBox (0, 0, maxx, maxy, green)
Draw.FillBox (0, maxy, 200, maxy - 200, black)
Draw.FillBox (maxx, maxy, maxx - 200, maxy - 200, black)
Draw.FillBox (0, 0, 200, 200, black)
Draw.FillBox (maxx, 0, maxx - 200, 200, black)
if P1 = 0 then
Player1 := "0"
elsif P1 = 1 then
Player1 := "1"
elsif P1 = 2 then
Player1 := "2"
elsif P1 = 3 then
Player1 := "3"
elsif P1 = 4 then
Player1 := "4"
elsif P1 = 5 then
Player1 := "5"
elsif P1 = 6 then
Player1 := "6"
elsif P1 = 7 then
Player1 := "7"
elsif P1 = 8 then
Player1 := "8"
elsif P1 = 9 then
Player1 := "9"
elsif P1 = 10 then
Player1 := "10"
P1Win := true
end if
if P2 = 0 then
Player2 := "0"
elsif P2 = 1 then
Player2 := "1"
elsif P2 = 2 then
Player2 := "2"
elsif P2 = 3 then
Player2 := "3"
elsif P2 = 4 then
Player2 := "4"
elsif P2 = 5 then
Player2 := "5"
elsif P2 = 6 then
Player2 := "6"
elsif P2 = 7 then
Player2 := "7"
elsif P2 = 8 then
Player2 := "8"
elsif P2 = 9 then
Player2 := "9"
elsif P2 = 10 then
Player2 := "10"
P2Win := true
end if
if P3 = 0 then
Player3 := "0"
elsif P3 = 1 then
Player3 := "1"
elsif P3 = 2 then
Player3 := "2"
elsif P3 = 3 then
Player3 := "3"
elsif P3 = 4 then
Player3 := "4"
elsif P3 = 5 then
Player3 := "5"
elsif P3 = 6 then
Player3 := "6"
elsif P3 = 7 then
Player3 := "7"
elsif P3 = 8 then
Player3 := "8"
elsif P3 = 9 then
Player3 := "9"
elsif P3 = 10 then
Player3 := "10"
P3Win := true
end if
if P4 = 0 then
Player4 := "0"
elsif P4 = 1 then
Player4 := "1"
elsif P4 = 2 then
Player4 := "2"
elsif P4 = 3 then
Player4 := "3"
elsif P4 = 4 then
Player4 := "4"
elsif P4 = 5 then
Player4 := "5"
elsif P4 = 6 then
Player4 := "6"
elsif P4 = 7 then
Player4 := "7"
elsif P4 = 8 then
Player4 := "8"
elsif P4 = 9 then
Player4 := "9"
elsif P4 = 10 then
Player4 := "10"
P4Win := true
end if
Font.Draw (Player1, 110, maxy - 160, font3, P1Color)
Font.Draw (Player2, maxx - 160, maxy - 160, font3, P2Color)
Font.Draw (Player3, maxx - 160, 110, font3, P3Color)
Font.Draw (Player4, 110, 110, font3, P4Color)
Font.Draw ("Player 1", 20, maxy - 40, font, P1Color)
Draw.Line (40, maxy - 60, 40, maxy - 180, P1Color)
Draw.Line (40, maxy - 180, 20, maxy - 150, P1Color)
Draw.Line (40, maxy - 180, 60, maxy - 150, P1Color)
Font.Draw ("Player 2", maxx - 180, maxy - 40, font, P2Color)
Draw.Line (maxx - 20, maxy - 80, maxx - 180, maxy - 80, P2Color)
Draw.Line (maxx - 180, maxy - 80, maxx - 150, maxy - 60, P2Color)
Draw.Line (maxx - 180, maxy - 80, maxx - 150, maxy - 100, P2Color)
Font.Draw ("Player 3", maxx - 180, 30, font, P3Color)
Draw.Line (maxx - 40, 60, maxx - 40, 180, P3Color)
Draw.Line (maxx - 40, 180, maxx - 20, 150, P3Color)
Draw.Line (maxx - 40, 180, maxx - 60, 150, P3Color)
Font.Draw ("Player 4", 20, 30, font, P4Color)
Draw.Line (20, 80, 180, 80, P4Color)
Draw.Line (180, 80, 150, 60, P4Color)
Draw.Line (180, 80, 150, 100, P4Color)
end drawField
procedure drawPaddel1
Input.KeyDown (key)
if key ('w') then
y2 += 1
elsif key ('s') then
y2 -= 1
end if
if y2 < 200 then
y2 := 200
elsif y2 + 75 > maxy - 200 then
y2 := maxy - 275
end if
drawfillbox (0, y2, 15, y2 + 75, P1Color)
end drawPaddel1
procedure drawPaddel2
Input.KeyDown (key)
if key (KEY_RIGHT_ARROW) then
x1 += 1
elsif key (KEY_LEFT_ARROW) then
x1 -= 1
end if
if x1 < 200 then
x1 := 200
elsif x1 + 75 > maxy - 200 then
x1 := maxy - 275
end if
drawfillbox (x1, maxy, x1 + 75, maxy - 15, P2Color)
end drawPaddel2
procedure drawPaddel3
Input.KeyDown (key)
if key ('8') then
y1 += 1
elsif key ('2') then
y1 -= 1
end if
if y1 < 200 then
y1 := 200
elsif y1 + 75 > maxy - 200 then
y1 := maxy - 275
end if
drawfillbox (maxx - 15, y1, maxx, y1 + 75, P3Color)
end drawPaddel3
procedure drawPaddel4
Input.KeyDown (key)
if key ('l') then
x2 += 1
elsif key ('k') then
x2 -= 1
end if
if x2 < 200 then
x2 := 200
elsif x2 + 75 > maxy - 200 then
x2 := maxy - 275
end if
drawfillbox (x2, 0, x2 + 75, 15, P4Color)
end drawPaddel4
procedure beginning
color (blue)
loop
Input.KeyDown (key)
Mouse.Where (mx, my, button)
Font.Draw ("PONG!", maxx div 2 - 75, maxy div 2 + 50, font, 13)
locate (23, 20)
put "What speed would you like to play at? (0,1,2,3)"
locate (24, maxcol div 2)
%% Player 1 %%
locate (30, 15)
put "Player 1"..
Draw.FillBox (200, 222, 210, 232, 12)
Draw.FillBox (230, 222, 240, 232, 13)
Draw.FillBox (260, 222, 270, 232, 14)
Draw.FillBox (290, 222, 300, 232, 11)
%% Player 2 %%
locate (32, 15)
put "Player 2"..
Draw.FillBox (200, 190, 210, 200, 12)
Draw.FillBox (230, 190, 240, 200, 13)
Draw.FillBox (260, 190, 270, 200, 14)
Draw.FillBox (290, 190, 300, 200, 11)
%% Player 3 %%
locate (34, 15)
put "Player 3"..
Draw.FillBox (200, 158, 210, 168, 12)
Draw.FillBox (230, 158, 240, 168, 13)
Draw.FillBox (260, 158, 270, 168, 14)
Draw.FillBox (290, 158, 300, 168, 11)
%% Player 4 %%
locate (36, 15)
put "Player 4"..
Draw.FillBox (200, 126, 210, 136, 12)
Draw.FillBox (230, 126, 240, 136, 13)
Draw.FillBox (260, 126, 270, 136, 14)
Draw.FillBox (290, 126, 300, 136, 11)
if mx > 200 and mx < 210 and my > 222 and my < 232 and button = 1 then
P1Color := 12
elsif mx > 230 and mx < 240 and my > 222 and my < 232 and button = 1 then
P1Color := 13
elsif mx > 260 and mx < 270 and my > 222 and my < 232 and button = 1 then
P1Color := 14
elsif mx > 290 and mx < 300 and my > 222 and my < 232 and button = 1 then
P1Color := 11
end if
if mx > 200 and mx < 210 and my > 190 and my < 200 and button = 1 then
P2Color := 12
elsif mx > 230 and mx < 240 and my > 190 and my < 200 and button = 1 then
P2Color := 13
elsif mx > 260 and mx < 270 and my > 190 and my < 200 and button = 1 then
P2Color := 14
elsif mx > 290 and mx < 300 and my > 190 and my < 200 and button = 1 then
P2Color := 11
end if
if mx > 200 and mx < 210 and my > 158 and my < 168 and button = 1 then
P3Color := 12
elsif mx > 230 and mx < 240 and my > 158 and my < 168 and button = 1 then
P3Color := 13
elsif mx > 260 and mx < 270 and my > 158 and my < 168 and button = 1 then
P3Color := 14
elsif mx > 290 and mx < 300 and my > 158 and my < 168 and button = 1 then
P3Color := 11
end if
if mx > 200 and mx < 210 and my > 126 and my < 136 and button = 1 then
P4Color := 12
elsif mx > 230 and mx < 240 and my > 126 and my < 136 and button = 1 then
P4Color := 13
elsif mx > 260 and mx < 270 and my > 126 and my < 136 and button = 1 then
P4Color := 14
elsif mx > 290 and mx < 300 and my > 126 and my < 136 and button = 1 then
P4Color := 11
end if
Draw.Box (320, 222, 330, 232, 7)
Draw.FillBox (321, 223, 329, 231, P1Color)
Draw.Box (320, 190, 330, 200, 7)
Draw.FillBox (321, 191, 329, 199, P2Color)
Draw.Box (320, 158, 330, 168, 7)
Draw.FillBox (321, 159, 329, 167, P3Color)
Draw.Box (320, 126, 330, 136, 7)
Draw.FillBox (321, 127, 329, 135, P4Color)
locate (38, 15)
put "Speed 0 1 2 3 "..
if mx < 210 and mx > 200 and my > 95 and my < 105 and button = 1 then
speed := 0
put speed
elsif mx > 230 and mx < 240 and my > 95 and my < 105 and button = 1 then
speed := 1
put speed
elsif mx > 260 and mx < 272 and my > 95 and my < 105 and button = 1 then
speed := 2
put speed
elsif mx > 295 and mx < 305 and my > 95 and my < 105 and button = 1 then
speed := 3
put speed
end if
Draw.Box (200, 30, 320, 70, 7)
locate (41,31)
put "PLAY" ..
if mx > 200 and mx < 320 and my > 30 and my < 70 and button = 1 then
Play := true
end if
exit when Play = true and speed = 0 or Play = true and speed = 1 or Play = true and speed = 2 or Play = true and speed = 3
View.Update
end loop
end beginning
beginning
loop
drawField
drawPaddel1
drawPaddel2
drawPaddel3
drawPaddel4
% Reflection
if x + xd < 200 and y + yd > maxy - 200 or x + xd > maxx - 200 and y + yd > maxy - 200 or x + xd < 200 and y + yd < 200 or x + xd > maxx - 200 and y + yd < 200 or x + xd > maxx - 15 and y + yd < y1 + 75 and y + yd > y1 or x + xd < 15 and y + yd > y2 and y + yd < y2 + 75
then
xd *= -1
end if
if x + xd > maxx - 200 and y + yd > maxy - 200 or x + xd > maxx - 200 and y + yd < 200 or x + xd < 200 and y + yd > maxy - 200 or x + xd < 200 and y + yd < 200 then
%if x + xd > maxx - 25 and x + xd < maxx and y + yd < y1 + 150 and y + yd > y1 or x + xd < 25 and x + xd > 0 and y + yd < y2 + 150 and y + yd > y2 then
xd *= -1
end if
x += xd
if y + yd > maxy - 200 and x + xd > maxx - 200 or y + yd < 200 and x + xd > maxx - 200 or y + yd > maxy - 200 and x + xd < 200 or y + yd < 200 and x + xd < 200 or y + yd > maxy - 15 and x + xd > x1 and x + xd < x1 + 75 or y + yd < 15 and x + xd > x2 and x + xd < x2 + 75
then
yd *= -1
end if
if y + yd > maxy - 200 and x + xd < 200 or y + yd > maxy - 200 and x + xd > maxx - 200 or y + yd < 200 and x + xd > maxx - 200 or y + yd < 200 and x + xd < 200 then
yd *= -1
end if
y += yd
if x + xd < 15 and y + yd > y2 and y + yd < y2 + 75 then
hit := 1
elsif y + yd > maxy - 15 and x + xd > x1 and x + xd < x1 + 75 then
hit := 2
elsif x + xd > maxx - 15 and y + yd < y1 + 75 and y + yd > y1 then
hit := 3
elsif y + yd < 15 and x + xd > x2 and x + xd < x2 + 75 then
hit := 4
end if
% Tells if the ball has left the screen and starts it up again.
if x + xd < -10 then
if hit = 1 then
P2 += 1
P3 += 1
P4 += 1
elsif hit = 2 then
P2 += 1
elsif hit = 3 then
P3 += 1
elsif hit = 4 then
P4 += 1
end if
hit := 0
x := 50
xd := 1
yd := 1
randint (y, 200, maxy - 200)
delay (1000)
elsif x + xd > maxx + 10 then
if hit = 1 then
P1 += 1
elsif hit = 2 then
P2 += 1
elsif hit = 3 then
P1 += 1
P2 += 1
P4 += 1
elsif hit = 4 then
P4 += 1
end if
hit := 0
x := maxx - 50
xd := -1
yd := -1
randint (y, 200, maxy - 200)
delay (1000)
end if
if y + yd < -10 then
if hit = 1 then
P1 += 1
elsif hit = 2 then
P2 += 1
elsif hit = 3 then
P3 += 1
elsif hit = 4 then
P1 += 1
P2 += 1
P3 += 1
end if
hit := 0
y := 50
xd := 1
yd := 1
randint (x, 200, maxx - 200)
delay (1000)
elsif y + yd > maxy + 10 then
if hit = 1 then
P1 += 1
elsif hit = 2 then
P1 += 1
P3 += 1
P4 += 1
elsif hit = 3 then
P3 += 1
elsif hit = 4 then
P4 += 1
end if
hit := 0
y := maxy - 50
xd := -1
yd := -1
randint (y, 200, maxx - 200)
delay (1000)
end if
drawfilloval (x, y, 5, 5, 7)
if P1 = 10 then
P1Win := true
elsif P2 = 10 then
P2Win := true
elsif P3 = 10 then
P3Win := true
elsif P4 = 10 then
P4Win := true
end if
View.Update
delay (speed)
cls
exit when P1 = 10 or P2 = 10 or P3 = 10 or P4 = 10
end loop
Draw.FillBox (0, 0, maxx, maxy, blue)
if P1Win = true then
Font.Draw ("PLAYER 1 WINS!!", 150, 500, font, 0)
elsif P2Win = true then
Font.Draw ("PLAYER 2 WINS!!", 150, 500, font, 0)
elsif P3Win = true then
Font.Draw ("PLAYER 3 WINS!!", 150, 500, font, 0)
elsif P4Win = true then
Font.Draw ("PLAYER 4 WINS!!", 150, 500, font, 0)
end if
Font.Draw ("Play Again? (Press F1)", 200, 250, font2, 0)
|