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
var totalspeed:int:=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(px:int,py:int):real
var xvelocity, yvelocity : real
var angle : real
var ylength : int
var xlength : int
xlength := 400-px
ylength := 620-py
if ylength = 0 then
angle := 0
else
angle := arctand (ylength/xlength)
end if
xvelocity := totalspeed*cosd(angle)
if puckx>400 then
xvelocity := xvelocity *-1
end if
result xvelocity
end X_Velocity_Calculate
function Y_Velocity_Calculate(px:int,py:int):real
var xvelocity, yvelocity : real
var angle : real
var ylength : int
var xlength : int
xlength := 400-px
ylength := 620-py
if ylength = 0 then
angle := 0
else
angle := arctand (ylength/xlength)
end if
yvelocity := totalspeed*sind(angle)
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
function Player_Has_Puck(px:int,py:int,stickx:int,sticky:int):boolean
if px=stickx and py=sticky then
result true
else
result false
end if
end Player_Has_Puck
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) and Player_Has_Puck(puckx,pucky,RD_X-25,RD_Y-2)=true 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_X-8
elsif RD_X=224 then
RD_X:=RD_X+8
end if
if RD_Y=686 then
RD_Y:=RD_Y-8
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 then
puckychange:=(puckychange div puckychange)*-1
elsif pucky=102 then
puckychange:=puckychange*-1
end if
%Puck Corners
if (pucky-450)>=puckx then
puckxchange:=puckxchange*-1
puckychange:=puckychange*-1
end if
if puckx>550 and pucky>650 and (1250-pucky)<=puckx then
puckxchange:=puckxchange*-1
puckychange:=puckychange*-1
end if
if puckx<250 and pucky<150 and (350-pucky)>=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+2-450)>=RD_X-30 then
RD_Y:=RD_Y-10
RD_X:=RD_X+10
end if
if RD_X+52>550 and RD_Y+32>650 and (1250-RD_Y+32)<=RD_X+52 then
RD_Y:=RD_Y-10
RD_X:=RD_X-10
end if
if RD_X-40<250 and RD_Y-16<150 and (350-RD_Y-16)>=RD_X-40 then
RD_Y:=RD_Y+10
RD_X:=RD_X+10
end if
if RD_X+6>550 and RD_Y-11<150 and (RD_Y-11+450)<=RD_X+6 then
RD_Y:=RD_Y+10
RD_X:=RD_X-10
end if
%%%Collison
if Collision(puckx,pucky,RD_X-34,RD_X+18,RD_Y+16,RD_Y-15)=true and puckxchange<2 and puckychange<2 and Player_Has_Puck(puckx,pucky,RD_X-25,RD_Y-2)=false then
puckx:=RD_X-25
pucky:=RD_Y-2
end if
if chars(KEY_ENTER)and puckx < RD_X+18 and puckx >RD_X-34 and pucky > RD_Y-15 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_X-25,RD_Y-5,black)
Draw.Line(RD_X-25,RD_Y-5,RD_X-30,RD_Y-2,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_X-4,RD_Y+8,RD_X-14,RD_Y,9)
Draw.FillOval(RD_X-14,RD_Y,2,3,9)
Draw.FillOval(RD_X+14,RD_Y+8,2,3,9)
Draw.FillOval(RD_X-6,RD_Y-11,2,5,black)
Draw.FillOval(RD_X+6,RD_Y-11,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_X-25 and pucky not=RD_Y-2 then
%%%Faceoff%%%%
randint(puckychange,-1,1)
if puckychange=0 then
loop
randint(puckychange,-1,1)
exit when puckychange not=0
end loop
end if
%%%%%Faceoff%%%
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
|