SCREEN 12 RANDOMIZE TIMER 'DIM SHARED mouse AS INTEGER 'DIM SHARED m1 AS INTEGER 'DIM SHARED m2 AS INTEGER 'DIM SHARED m3 AS INTEGER 'DIM SHARED m4 AS INTEGER ' DEF SEG = 0 ' MSEG = 256 * PEEK(51 * 4 + 3) + PEEK(51 * 4 + 2) ' mouse = 256 * PEEK(51 * 4 + 1) + PEEK(51 * 4) + 2 ' DEF SEG = MSEG ' m1 = 3: CALL absolute(m1, m2, m3, m4, mouse) eleje: 'm1 = 3: CALL absolute(m1, m2, m3, m4, mouse) g = INT(RND * 2) * 50 x0 = 250 y0 = 150 - 100 * SGN(g) n = INT(RND * 20) + 10 DIM m(n) DIM r(n) DIM x(n) DIM y(n) DIM vx(n) DIM vy(n) DIM szin(n) DIM xe(n) DIM ye(n) dt = (.03 + n * .005) / (1 + SGN(g) * 1.5) 'dt = .05 FOR i = 1 TO 7 valasztek(i) = i + 8 NEXT i FOR i = 1 TO n m(i) = (RND + .5) * 80 r(i) = m(i) / 5 x(i) = x0 y(i) = y0 vx(i) = (RND - .5) * (80 - g) vy(i) = (RND - .5) * (80 - g) 'u = INT(RND * (8 - i)) + 1 'szin(i) = valasztek(u) 'FOR k = u TO 7 - i 'valasztek(k) = valasztek(k + 1) 'NEXT k szin(i) = i - 7 * INT(i / 7) + 9 NEXT i ujra: mx = m3 my = m4 FOR i = 1 TO n FOR j = 1 TO i - 1 tav = SQR((x(i) - x(j)) ^ 2 + (y(i) - y(j)) ^ 2) merre = (vx(i) - vx(j)) * (x(i) - x(j)) + (vy(i) - vy(j)) * (y(i) - y(j)) IF tav > r(i) + r(j) OR merre >= 0 THEN GOTO tt: IF ABS(y(i) - y(j)) < tav / 1.4142 THEN GOTO vacak k = (x(j) - x(i)) / (y(j) - y(i)) e = m(j) / m(i) d = 2 * (k * (vx(i) - vx(j)) + vy(i) - vy(j)) / (e + 1) / (k ^ 2 + 1) c = -d * e a = c * k b = -a / e GOTO egyutt vacak: l = (y(j) - y(i)) / (x(j) - x(i)) e = m(j) / m(i) b = 2 * (l * (vy(i) - vy(j)) + vx(i) - vx(j)) / (e + 1) / (l ^ 2 + 1) a = -b * e c = a * l d = -c / e egyutt: vx(i) = vx(i) + a vx(j) = vx(j) + b vy(i) = vy(i) + c vy(j) = vy(j) + d tt: NEXT j x(i) = x(i) + vx(i) * dt y(i) = y(i) + vy(i) * dt + g / 2 * dt ^ 2 vy(i) = vy(i) + g * dt IF x(i) <= 12 + r(i) AND vx(i) < 0 THEN vx(i) = -vx(i) IF y(i) >= 470 - r(i) AND vy(i) > 0 THEN vy(i) = -vy(i) IF x(i) >= 630 - r(i) AND vx(i) > 0 THEN vx(i) = -vx(i) IF y(i) <= 12 + r(i) AND vy(i) < 0 THEN vy(i) = -vy(i) NEXT i a$ = INKEY$ IF a$ <> "" THEN END FOR i = 1 TO n CIRCLE (xe(i), ye(i)), r(i), 0 CIRCLE (x(i), y(i)), r(i), szin(i) xe(i) = x(i): ye(i) = y(i) ' m1 = 3: CALL absolute(m1, m2, m3, m4, mouse) ' IF m2 <> 0 THEN END ' IF m3 <> mx OR m4 <> my THEN END ' mx = m3 ' my = m4 NEXT i GOTO ujra