sok = 1000
eroszorzo = 80000
maxseb = 670
konst = 20000
k = 4
SCREEN 12
RANDOMIZE TIMER

KEY(11) ON
KEY(12) ON
KEY(13) ON
KEY(14) ON

DIM x1(sok): DIM y1(sok)
DIM xero(sok): DIM yero(sok)
DIM xseb(sok): DIM yseb(sok)

' Bolygok nehezsegi tereben mozgo muhold palyaja (foabra);
'                                              gyorsulasa (jobbra fent);
'                                              sebessege (jobbra lent).
' A kezdeti felteteleket es az adatokat veletlenszeruen valasztja meg.
' Uj felallas kerese: Enter.
' Atvaltas finomabb illetve durvabb iteraciora: Szokoz
' Atvaltas nyomtorlo uzemmodra: -
'           nyomhuzo uzemmodra: +
' VEGE: Escape

uj:
SOUND 2000, 2
LOCATE 3, 60: PRINT "Mehet? (Enter)"
ff: f$ = INKEY$: IF f$ = "" THEN GOTO ff
IF f$ <> CHR$(13) THEN END

uj2:
CLS
a = -1
xx = 200
yy = 200
mm = 1
vx = RND * 200: vy = RND * 200

palyasugar(0) = 30
FOR i = 1 TO k
palyasugar(i) = palyasugar(i - 1) + (RND + 1) * 20
szogseb(i) = SQR(konst / palyasugar(i) ^ 3)
m(i) = RND * 30000 + 20000
r(i) = (m(i) ^ 1 / 3) / 2000
szog0(i) = RND * 6.28
NEXT i

ee:      
ffx = 0: ffy = 0
IF a = 1 THEN dt = .00005
IF a = -1 THEN dt = .0005

PotEa = 0
FOR i = 1 TO k
xregi(i) = x(i)
yregi(i) = y(i)
tav(i) = SQR((xx - x(i)) ^ 2 + (yy - y(i)) ^ 2)
IF tav(i) > r(i) THEN GOTO nincskozel
GOTO uj

nincskozel:
IF tav(i) < r(i) + 5 THEN dt = .00005
ido = ido + dt
fx(i) = -50 * mm * m(i) * (xx - x(i)) / tav(i) ^ 3
fy(i) = -50 * mm * m(i) * (yy - y(i)) / tav(i) ^ 3
ffx = ffx + fx(i)
ffy = ffy + fy(i)

x(i) = 200 + palyasugar(i) * COS(szogseb(i) * ido + szog0(i))
y(i) = 200 + palyasugar(i) * SIN(szogseb(i) * ido + szog0(i))
CIRCLE (xregi(i), 400 - yregi(i)), r(i), 0
CIRCLE (x(i), 400 - y(i)), r(i), 7

PotEa = PotEa - 50 * mm * m(i) / tav(i)
NEXT i

sebesseg = SQR(vx ^ 2 + vy ^ 2)
LOCATE 3, 40: PRINT "Sebesseg: "; INT(sebesseg)

nincshajtas:
MozgEa = mm * sebesseg ^ 2 / 2
Ea = PotEa + MozgEa
LOCATE 3, 1: PRINT "Energia:"; INT(Ea); "     "

vx = vx + ffx * dt / mm
vy = vy + ffy * dt / mm
xx = xx + vx * dt
yy = yy + vy * dt

pontgyartas:
x1(n) = xx
y1(n) = yy
IF torol = 1 THEN PRESET (x1(m), 400 - y1(m))
PSET (xx, 400 - yy), 14
IF xx > 500 OR yy > 400 OR xx < 0 OR yy < 0 THEN GOTO uj
xseb(n) = 500 + vx / 10
yseb(n) = 300 - vy / 10
LINE (500, 300)-(xseb(n), yseb(n)), 3
PSET (xseb(n), yseb(n))

xero(n) = 500 + ffx / 300
yero(n) = 100 - ffy / 300

LINE (500, 100)-(xero(n), yero(n)), 5
PSET (xero(n), yero(n))
IF torol = 0 THEN GOTO nemtorol

PRESET (xseb(m), yseb(m))
PRESET (xero(m), yero(m))
LINE (500, 100)-(xero(m), yero(m)), 0
LINE (500, 300)-(xseb(m), yseb(m)), 0

nemtorol:

a$ = INKEY$

IF a$ = CHR$(27) THEN END
IF a$ = CHR$(13) THEN GOTO uj2
IF a$ = " " AND a = 1 THEN a = -1: GOTO ee
IF a$ = " " AND a = -1 THEN a = 1
IF a$ = "+" THEN torol = 0
IF a$ = "-" THEN torol = 1 ELSE GOTO yy
CLS

FOR i = 1 TO k
CIRCLE (x(i), 400 - y(i)), r(i), 7
NEXT i

yy:
n = n + 1
IF n > sok THEN n = 1: FOR i = 1 TO k: CIRCLE (x(i), 400 - y(i)), r(i), 7: NEXT i
m = n - sok + 1
IF m <= 0 THEN m = m + sok: FOR p = 11 TO 14: KEY(p) OFF: KEY(p) ON: NEXT

GOTO ee

