Привет!
конечно можем, для этого мы здесь и есть
вот пример кода:
graphics 800,600,32,2
setbuffer backbuffer()
; инициализируем генератор случайных чисел
seedrnd millisecs()
; случайная скорость по Х и Y
xspeed#=rnd(-10,10)
yspeed#=rnd(-10,10)
; случайный радиус
radius=rnd(10,50)
; случайное положение на экране
x#=rnd(0+radius,graphicswidth()-radius)
y#=rnd(0+radius,graphicsheight()-radius)
repeat
cls
oval x,y,radius,radius
; перемещаем шарик
x=x+xspeed
y=y+yspeed
; коррекция координат для проверки соприкосновения с краем экрана
x1=x+radius*0.5
y1=y+radius*0.5
; проверка соприкосновения с краем экрана, если да, то скорось меняется на противоположную
if y1<radius*0.5 or y1>graphicsheight()-radius*0.5 then yspeed=-1*yspeed
if x1<radius*0.5 or x1>graphicswidth()-radius*0.5 then xspeed=-1*xspeed
flip
until keyhit(1)
end
здест про угол падения равен углу отражения сказки нет, потому, что это с точки зрения компьютера будет очень долго обрабатываться... алгоритм работает следующим образом: скорость объекта подразделяется на скорость по оси Х и скорость по оси Y, мы просто проверяем есть кружок вышел за верхнюю или нижнюю границу, меняем скорость по Y на протироположную (если он летел вверх и достиг верха то летит теперь вниз)... точно так-же по Х... можно конечно и с синусами сделать, но это потребуется если только поверхности будут кривыми или будут двигаться (крутиться), а в "квадратном" случае вот этот был-бы самым оптимальным методом...
