colorback (black)
cls
color (white)
put "Enter draw mode (1,2,3)[recommended = 3] :"
var mode : char
mode := getchar
put "Enter Max Number of Particles [recommended = 1000]:"
var mx := 0
get mx
cls
View.Set ("offscreenonly")
%%%%%%%%%%Declaring projectile type as an object%%%%%%%%%%5
type projectile_t :
record
startx, starty, x, y, angle, weight, velocity, bounciness, time1 : real
end record
var projectile_a : array 1 .. mx of projectile_t
procedure Reset (var projectile_a : projectile_t, v1, v2, a1, a2, w1, w2, b1, b2 : int)
projectile_a.startx := 0
projectile_a.starty := 50
projectile_a.velocity := Rand.Int (v1, v2)
projectile_a.angle := Rand.Int (a1, a2)
projectile_a.weight := Rand.Int (w1, w2)
projectile_a.time1 := 0
projectile_a.bounciness := Rand.Int (b1, b2)
end Reset
procedure Projectile (var obj : projectile_t)
obj.x := (obj.velocity * cosd (obj.angle) * obj.time1) + obj.startx
obj.y := (obj.velocity * sind (obj.angle) * obj.time1 - (obj.weight) * obj.time1 ** 2 / 2) + obj.starty
end Projectile
procedure Bounce (var obj : projectile_t)
if obj.y <= obj.starty then
if (obj.velocity) > 0 then
obj.time1 := 0
obj.startx := obj.x
obj.starty := obj.y
obj.velocity -= obj.bounciness
end if
if (obj.velocity) < 0 then
obj.velocity := 0
end if
end if
end Bounce
for i : 1 .. upper (projectile_a)
Reset (projectile_a (i), 40, 80, 45, 45, 5, 15, 10, 30)
end for
loop
for i : 1 .. upper (projectile_a)
%Reset (projectile_a (i))
projectile_a (i).time1 += .1
Projectile (projectile_a (i))
Bounce (projectile_a (i))
case mode of
label "1" :
drawfilloval (round (projectile_a (i).x), round (projectile_a (i).y), 2, 2, white)
label "2" :
drawfilloval (round (projectile_a (i).x), round (projectile_a (i).y), round (projectile_a (i).weight / 2), round (projectile_a (i).weight / 2), white)
label "3" :
drawdot (round (projectile_a (i).x), round (projectile_a (i).y), white)
label :
end case
end for
%drawline (0, 45, maxx, 45, white)
drawfillbox (0, 0, maxx, 45, brown)
View.Update
for i : 1 .. upper (projectile_a)
case mode of
label "1" :
drawfilloval (round (projectile_a (i).x), round (projectile_a (i).y), 2, 2, black)
label "2" :
drawfilloval (round (projectile_a (i).x), round (projectile_a (i).y), round (projectile_a (i).weight / 2), round (projectile_a (i).weight / 2), black)
label "3" :
drawdot (round (projectile_a (i).x), round (projectile_a (i).y), black)
label :
end case
if projectile_a (i).velocity <= 0 then
Reset (projectile_a (i), 10, 80, 15, 60, 5, 15, 10, 30)
end if
end for
end loop |