setscreen("graphics:800;800")
View.Set("offscreenonly")
colorback(black)
cls
var crowd_colour:int
var x1_crowd: int
var y1_crowd: int
var counter:int:=0
var arena_x : array 1..8 of int := init (200, 200, 250, 550,
600, 600, 550, 250)
var arena_y : array 1..8 of int := init (150, 650, 700, 700,
650, 150, 100, 100)
var Score_font:int:=Font.New ("Garamond:30")
var score:int:=0
var player_score:string:=""
var puckx,pucky:int:=400
var puckychange,puckxchange:int:=1
var RD_X:int:=500
var RD_Y:int:=200
var chars : array char of boolean
var cur_x,cur_y:int
const movement:=2
procedure Arena
loop
counter:=counter+1
randint(crowd_colour,1,255)
randint(x1_crowd,1,800)
randint(y1_crowd,1,800)
drawfilloval(x1_crowd,y1_crowd,2,2,crowd_colour)
exit when counter=30000
end loop
end Arena
function X_Velocity_Calculate(puckx:int,pucky:int):real
var xvelocity, yvelocity : real
var angle : real
var Opposite : int
var Adjacent : int
Adjacent := 400puckx
Opposite := 620pucky
if Opposite = 0 then
angle := 0
else
angle := arctand (Opposite/Adjacent)
end if
xvelocity := angle * movement / 90
result xvelocity
end X_Velocity_Calculate
function Y_Velocity_Calculate(puckx:int,pucky:int):real
var xvelocity, yvelocity : real
var angle : real
var Opposite : int
var Adjacent : int
Adjacent := 400puckx
Opposite := 620pucky
if Opposite = 0 then
angle := 0
else
angle := arctand (Opposite/Adjacent)
end if
yvelocity := (90angle)* movement / 90
result yvelocity
end Y_Velocity_Calculate
function Collision(x:real,y:real,xwall1:int,xwall2:int,ywall1:int,ywall2:int):boolean
if x < xwall2 and x >xwall1 and y > ywall2 and y <ywall1 then
result true
else
result false
end if
end Collision
loop
cls
Arena
loop
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) then
RD_Y := RD_Y + 2
elsif chars (KEY_DOWN_ARROW) then
RD_Y := RD_Y  2
elsif chars (KEY_RIGHT_ARROW) then
RD_X := RD_X + 2
elsif chars (KEY_LEFT_ARROW) then
RD_X := RD_X  2
end if
if chars (KEY_SHIFT) then
puckxchange:=round(X_Velocity_Calculate(puckx,pucky))
puckychange:=round(Y_Velocity_Calculate(puckx,pucky))
end if
if RD_X=586 then
RD_X:=RD_X8
elsif RD_X=224 then
RD_X:=RD_X+8
end if
if RD_Y=686 then
RD_Y:=RD_Y8
elsif RD_Y=112 then
RD_Y:=RD_Y+8
end if
%Arena
Draw.FillPolygon (arena_x, arena_y, 8, 100)
puckx:=puckx+puckxchange
pucky:=pucky+puckychange
cur_x:=puckx
cur_y:=pucky
%Puck
Draw.FillOval(round(puckx),round(pucky),2,2,black)
if puckx=598 or puckx=202 then
puckxchange:=puckxchange*1
end if
if pucky=698 or pucky=102 then
puckychange:=puckychange*1
end if
%Puck Corners
if (pucky450)>=puckx then
puckxchange:=puckxchange*1
puckychange:=puckychange*1
end if
if puckx>550 and pucky>650 and (1250pucky)<=puckx then
puckxchange:=puckxchange*1
puckychange:=puckychange*1
end if
if puckx<250 and pucky<150 and (350pucky)>=puckx then
puckxchange:=puckxchange*1
puckychange:=puckychange*1
end if
if puckx>550 and pucky<150 and (pucky+450)<=puckx then
puckxchange:=puckxchange*1
puckychange:=puckychange*1
end if
%%%%Player Corners
if (RD_Y+2450)>=RD_X30 then
RD_Y:=RD_Y10
RD_X:=RD_X+10
end if
if RD_X+52>550 and RD_Y+32>650 and (1250RD_Y+32)<=RD_X+52 then
RD_Y:=RD_Y10
RD_X:=RD_X10
end if
if RD_X40<250 and RD_Y16<150 and (350RD_Y16)>=RD_X40 then
RD_Y:=RD_Y+10
RD_X:=RD_X+10
end if
if RD_X+6>550 and RD_Y11<150 and (RD_Y11+450)<=RD_X+6 then
RD_Y:=RD_Y+10
RD_X:=RD_X10
end if
%%%Collison
if Collision(puckx,pucky,RD_X34,RD_X+18,RD_Y+16,RD_Y15)=true then
puckx:=RD_X25
pucky:=RD_Y2
end if
if chars(KEY_ENTER)and puckx < RD_X+18 and puckx >RD_X34 and pucky > RD_Y15 and pucky <RD_Y+16 then
puckx:=cur_x
pucky:=cur_y
puckxchange:=0
puckychange:=0
end if
%%%Target(Version1Only
Draw.Box(380,600,420,640,red)
%%%%User Right Defense
Draw.Line(RD_X+14,RD_Y+7,RD_X25,RD_Y5,black)
Draw.Line(RD_X25,RD_Y5,RD_X30,RD_Y2,black)
Draw.FillOval(RD_X,RD_Y,5,10,9)
Draw.FillOval(RD_X,RD_Y+12,4,4,66)
Draw.Line(RD_X+4,RD_Y+8,RD_X+14,RD_Y+8,9)
Draw.Line(RD_X4,RD_Y+8,RD_X14,RD_Y,9)
Draw.FillOval(RD_X14,RD_Y,2,3,9)
Draw.FillOval(RD_X+14,RD_Y+8,2,3,9)
Draw.FillOval(RD_X6,RD_Y11,2,5,black)
Draw.FillOval(RD_X+6,RD_Y11,2,5,black)
%%%%%%%%%%%%%%
%ScoreBox
Draw.FillBox(340,0,460,50,black)
player_score:=intstr(score)
Font.Draw(player_score,360,10,Score_font,40)
Font.Draw(" : 0",380,10,Score_font,40)
%Timebox
%%Goal
if puckxchange=0 and puckychange=0 and cur_x >380 and cur_x <420 and cur_y >600 and cur_y <640 and puckx not=RD_X25 and pucky not=RD_Y2 then
score:=score+1
puckx:=400
pucky:=400
puckxchange:=1
RD_X:=500
RD_Y:=200
player_score:=intstr(score)
end if
%%%
View.Update
end loop
end loop
