かなり適当ですが、ゴミが動き回るサンプルです。
正弦余弦が分かるならそっちを使ったほうが楽ですが。
#const WIN_CX 640
#const WIN_CY 480
#const IMG_MAX 20 // ゴミの数
#const IMGCX_MAX 10
#const IMGCY_MAX 10
#const VECTOR_MAX 3
dim x, IMG_MAX
dim y, IMG_MAX
dim vx, IMG_MAX
dim vy, IMG_MAX
dim cx, IMG_MAX
dim cy, IMG_MAX
repeat IMG_MAX
cx.cnt = 1 + rnd(IMGCX_MAX)
cy.cnt = 1 + rnd(IMGCY_MAX)
x.cnt = rnd(WIN_CX - IMGCX_MAX)
y.cnt = rnd(WIN_CY - IMGCY_MAX)
vx.cnt = 1 + rnd(VECTOR_MAX)
vy.cnt = 1 + rnd(VECTOR_MAX)
if rnd(2) == 0 : vx.cnt = -vx.cnt
if rnd(2) == 0 : vy.cnt = -vy.cnt
loop
repeat
redraw 0
color : boxf : color 255, 0, 255
repeat IMG_MAX
x.cnt += vx.cnt
y.cnt += vy.cnt
// 速度と方向を不規則に
if rnd(5) == 0 {
vx.cnt = limit(vx.cnt + rnd(3) - 1, -VECTOR_MAX, VECTOR_MAX)
}
if rnd(5) == 0 {
vy.cnt = limit(vy.cnt + rnd(3) - 1, -VECTOR_MAX, VECTOR_MAX)
}
// 壁の衝突判定
if x.cnt < 0 : x.cnt = 0 : vx.cnt = -vx.cnt
if (x.cnt + cx.cnt) > WIN_CX : x.cnt = WIN_CX - cx.cnt : vx.cnt = -vx.cnt
if y.cnt < 0 : y.cnt = 0 : vy.cnt = -vy.cnt
if (y.cnt + cy.cnt) > WIN_CY : y.cnt = WIN_CY - cy.cnt : vy.cnt = -vy.cnt
color rnd(256), rnd(256), rnd(256)
boxf x.cnt, y.cnt, x.cnt + cx.cnt, y.cnt + cy.cnt
loop
redraw 1
wait 2
loop