Ball Drop
Author |
Message |
Jorbalax
|
Posted: Thu Mar 06, 2008 8:12 pm Post subject: Ball Drop |
|
|
Man, turing is WAY too easy to procrastinate with...
Anyways...I can't quite figure out why it's so amusing to me...probably because the color scheme reminds me of those ball play pens.
code: |
View.Set ("graphics:800;600, offscreenonly, nobuttonbar, title:Ball Drop, position:centre;centre")
%editable constants
const COLORARRAY : array 0 .. 4 of int := init (brightred, yellow, brightgreen, brightblue, brightpurple)
const BALLDELAY := 0
const BALLSIZE := 6
const BALLSPEED := 0
const DROPBALLS := KEY_ENTER
const FRAMEDELAY := 15
fcn BALLVEL : real
result (Rand.Int (5, 10) / 100)
end BALLVEL
%-----%
var colnum : int := 0
var balls : flexible array 1 .. 0 of
record
x, y, speed, vel : real
col : int
end record
var removearray : flexible array 1 .. 0 of int
var inputarray : array char of boolean
var mx, my, mb : int
var DROP : boolean := false
var keydown : boolean := false
var lastballsince : int := 0
proc drawdropbox
var c : int := brightred
if DROP then
c := brightgreen
end if
Draw.FillBox (2, maxy - 22, 22, maxy - 2, c)
Draw.Box (2, maxy - 22, 22, maxy - 2, black)
end drawdropbox
proc drawball (x, y, size, col : int)
Draw.FillOval (x, y, size, size, col)
Draw.Oval (x, y, size, size, black)
end drawball
loop
Mouse.Where (mx, my, mb)
Input.KeyDown (inputarray)
if inputarray (DROPBALLS) and not keydown then
DROP := not DROP
keydown := true
end if
if not inputarray (DROPBALLS) then
keydown := false
end if
if mb = 1 and Time.Elapsed - lastballsince > BALLDELAY then
new balls, upper (balls) + 1
balls (upper (balls)).x := mx
balls (upper (balls)).y := my
balls (upper (balls)).col := COLORARRAY (colnum)
balls (upper (balls)).speed := BALLSPEED
balls (upper (balls)).vel := BALLVEL
colnum := (colnum + 1) mod (upper (COLORARRAY) + 1)
lastballsince := Time.Elapsed
end if
new removearray, 0
for i : 1 .. upper (balls)
drawball (round (balls (i).x), round (balls (i).y), BALLSIZE, balls (i).col)
if DROP then
balls (i).y += balls (i).speed
balls (i).speed -= balls (i).vel
end if
if balls (i).y < -15 then
new removearray, upper (removearray) + 1
removearray (upper (removearray)) := i
end if
end for
drawdropbox
View.Update
for i : 1 .. upper (removearray)
for j : removearray (i) .. upper (balls) - 1
balls (j) := balls (j + 1)
end for
new balls, upper (balls) - 1
for l : 1 .. upper (removearray)
removearray (l) -= 1
end for
end for
cls
Time.DelaySinceLast (FRAMEDELAY)
end loop
|
|
|
|
|
|
|
Sponsor Sponsor
|
|
|
nastynika
|
Posted: Fri Mar 07, 2008 9:08 am Post subject: Re: Ball Drop |
|
|
nice |
|
|
|
|
|
petree08
|
Posted: Fri Mar 07, 2008 9:51 am Post subject: RE:Ball Drop |
|
|
that's pretty neat, i like the "red light/green light" thing, it would be cool if the balls bounced off the floor
i just went into your code and added a bounce ferature (hope you don't mind)
%THE FOLOWING CODE WAS WRITTEN BY JORBALAX with the exception of the the bounce i added
code: |
View.Set ("graphics:800;600, offscreenonly, nobuttonbar, title:Ball Drop, position:centre;centre")
%editable constants
const COLORARRAY : array 0 .. 4 of int := init (brightred, yellow, brightgreen, brightblue, brightpurple)
const BALLDELAY := 0
const BALLSIZE := 6
const BALLSPEED := 0
const DROPBALLS := KEY_ENTER
const FRAMEDELAY := 15
fcn BALLVEL : real
result (Rand.Int (5, 10) / 100)
end BALLVEL
%-----%
var colnum : int := 0
var balls : flexible array 1 .. 0 of
record
x, y, speed, vel : real
col : int
end record
var removearray : flexible array 1 .. 0 of int
var inputarray : array char of boolean
var mx, my, mb : int
var DROP : boolean := false
var keydown : boolean := false
var lastballsince : int := 0
proc drawdropbox
var c : int := brightred
if DROP then
c := brightgreen
end if
Draw.FillBox (2, maxy - 22, 22, maxy - 2, c)
Draw.Box (2, maxy - 22, 22, maxy - 2, black)
end drawdropbox
proc drawball (x, y, size, col : int)
Draw.FillOval (x, y, size, size, col)
Draw.Oval (x, y, size, size, black)
end drawball
loop
Mouse.Where (mx, my, mb)
Input.KeyDown (inputarray)
if inputarray (DROPBALLS) and not keydown then
DROP := not DROP
keydown := true
end if
if not inputarray (DROPBALLS) then
keydown := false
end if
if mb = 1 and Time.Elapsed - lastballsince > BALLDELAY then
new balls, upper (balls) + 1
balls (upper (balls)).x := mx
balls (upper (balls)).y := my
balls (upper (balls)).col := COLORARRAY (colnum)
balls (upper (balls)).speed := BALLSPEED
balls (upper (balls)).vel := BALLVEL
colnum := (colnum + 1) mod (upper (COLORARRAY) + 1)
lastballsince := Time.Elapsed
end if
new removearray, 0
for i : 1 .. upper (balls)
drawball (round (balls (i).x), round (balls (i).y), BALLSIZE, balls (i).col)
if DROP then
balls (i).y += balls (i).speed
balls (i).speed -= balls (i).vel
%%%% PARRT PETREE ADDED
if balls (i).y < 1 then
balls (i).speed := - (balls (i).speed / 1.5)
end if
%%%%
end if
if balls (i).y < -15 then
new removearray, upper (removearray) + 1
removearray (upper (removearray)) := i
end if
end for
drawdropbox
View.Update
for i : 1 .. upper (removearray)
for j : removearray (i) .. upper (balls) - 1
balls (j) := balls (j + 1)
end for
new balls, upper (balls) - 1
for l : 1 .. upper (removearray)
removearray (l) -= 1
end for
end for
cls
Time.DelaySinceLast (FRAMEDELAY)
end loop
|
I really like these programs that use physics, i wish there where moer of them |
|
|
|
|
|
|
|