ewoke: (Default)
[personal profile] ewoke
Увы, сегодня кодес как он есть, без комментариев.

Компелируете: fbc.exe -lang qb -s gui bounce3.bas

DIM ix(10)
DIM iy(10)
DIM a(10)
DIM sp(10)

l1 = 0: l2 = 0: l3 = 199: l4 = 199
num = 10
rad = 5

RANDOMIZE TIMER

FOR n = 1 TO num
ix(n) = RND * l3
iy(n) = RND * l4
a(n) = RND * 360
sp(n) = RND * 2
NEXT n

SCREEN 7

DO

REM обсчет движения шариков
FOR n = 1 TO num

ix(n) = ix(n) + sp(n) * COS(a(n) * .0174)
iy(n) = iy(n) + sp(n) * SIN(a(n) * .0174)

IF ix(n) > l3 OR ix(n) < l1 THEN
a(n) = 180 - a(n)
ix(n) = ix(n) + sp(n) * COS(a(n) * .0174)
iy(n) = iy(n) + sp(n) * SIN(a(n) * .0174)
END IF

IF iy(n) > l4 OR iy(n) < l2 THEN
a(n) = 360 - a(n)
ix(n) = ix(n) + sp(n) * COS(a(n) * .0174)
iy(n) = iy(n) + sp(n) * SIN(a(n) * .0174)
END IF

IF a(n) > 360 THEN a(n) = a(n) - 360
IF a(n) < 0 THEN a(n) = 360 + a(n)

NEXT n

REM столкновение

FOR k = 1 TO num
FOR n = 1 TO num

d1 = ABS(ix(k) - ix(n))
d2 = ABS(iy(k) - iy(n))

IF SQR(d1 ^ 2 + d2 ^ 2) < rad * 2 AND k <> n THEN

REM изм скорости в зависимости от угла

d3 = (sp(n) + sp(k)) / 2: REM

REM defender//attacker

IF ABS(a(n) - a(k)) > 180 THEN sp(n) = sp(n) - d3: sp(k) = sp(k) + d3
IF ABS(a(n) - a(k)) < 180 THEN sp(n) = sp(n) + d3: sp(k) = sp(k) - d3

IF sp(n) < 0 THEN sp(n) = .1
IF sp(k) < 0 THEN sp(k) = .1

IF sp(n) > 2 THEN sp(n) = 2
IF sp(k) > 2 THEN sp(k) = 2

d3 = a(n)

a(n) = a(n) - 90 * (sp(n) + sp(k)) / 2: REM изм угла в зависимости от скорости
a(k) = d3 + 90 * (sp(n) + sp(k)) / 2

IF a(n) > 360 THEN a(n) = a(n) - 360
IF a(n) < 0 THEN a(n) = 360 + a(n)
IF a(k) > 360 THEN a(k) = a(k) - 360
IF a(k) < 0 THEN a(k) = 360 + a(k)

REM вывод из области взаимодействия

ix(n) = ix(n) + sp(n) * COS(a(n) * .0174)
iy(n) = iy(n) + sp(n) * SIN(a(n) * .0174)
ix(k) = ix(k) + sp(k) * COS(a(k) * .0174)
iy(k) = iy(k) + sp(k) * SIN(a(k) * .0174)

END IF

NEXT n
NEXT k

LINE (l1, l2)-(l3, l4), 7, B

REM прорисовка шариков+type??
FOR n = 1 TO num
CIRCLE (ix(n), iy(n)), rad, 7
NEXT n

sleep 1,1

FOR n = 1 TO num
CIRCLE (ix(n), iy(n)), rad, 0

NEXT n

LOOP UNTIL INKEY$ = CHR$(27)


Файлы:
http://65wat.ru/fb/BOUNCE3.BAS
http://65wat.ru/fb/bounce3.exe

вдохновил на написание скринсейвер программы Dos Navigator, Molecula.
(там, все было разного размера, соот-но была разная масса и импульс).

ехидный наблюдатель заметит, что иногда шары пролетают сквозь рамку и застревают в ней- это багофича.

как пример того, к чему можно стремиться -> http://free-basic.ru/brazil.html
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

ewoke: (Default)
ewoke

October 2025

S M T W T F S
   1234
5 67891011
121314 15161718
19202122232425
262728293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 20th, 2026 03:48 pm
Powered by Dreamwidth Studios