Palikkapelien ja kaikkien muidenkin pelien tekijöille on tässä simppeli koodi-vinkki.
Tällä voi mallintaa palikoiden törmäyksiä maahan. Palikoiden muodon saa valita itse kolmioista ympyröihin.
Edit 2019 by mod: Vaihdettu hidastukseen TIMER. Koodi toimii FreeBASICilla asetuksella -lang qb.
'Palikka-fysiikkaa by JSBasic
RANDOMIZE TIMER
SCREEN 7, , 0, 1 ' Tässä tilassa saadaan kätevästi kaksoispuskurointi
' Kulmien määrän voi itse valita (3-100)
kulmienmaara = INT(3 + RND * 4)
' Kimmoisuus väliltä (0-1)
kimmoisuus = .2
'Palikan x ja y sijainnit ja nopeus
x = 160
y = 0
xn = 0
yn = 0
'Palikan kulma ja pyörimisnopeus
k = 0
kn = (RND - .5) * .1
t# = TIMER
DO
'Hidastus
t# = t# + 0.015
WHILE TIMER < t#: WAIT &h3da, &h8: WEND
yn = yn + .05 'Painovoima vaikuttaa y-akselille
x = x + xn 'Lasketaan uudet sijainnit nopeuden mukaan
y = y + yn
k = k + kn
FOR kulma = 1 TO kulmienmaara + 1
'Tässä lasketaan joka kulmalle sijainti
oskulma = k + kulma * (3.14 * 2) / kulmienmaara
kx = x + SIN(oskulma) * 50
ky = y + COS(oskulma) * 50
'Törmäämislaskenta-koodi on tässä:
IF ky > 199 THEN
exn = xn: eyn = yn: ekn = kn 'varastoidaan nykyiset nopeudet
'Sinit ja cosinit hommiin.
'Tässä on joitain vakioita (500, 50 ja 3) joita en oikein ymmärrä ja ne
'vaativat varmaan hienosääntöä.
xn = xn - SIN(oskulma) * eyn / 3
xn = xn - COS(oskulma) * ekn * 3
kn = kn - exn * eyn / 500
kn = kn + SIN(oskulma) * eyn / 50
yn = yn - COS(oskulma) * eyn * (1 + kimmoisuus)
yn = yn - SIN(oskulma) * ekn * 3
xn = xn * .98 'pieni kitka x akselille ja pyörimisnopeuteen
kn = kn * .98
y = y - (ky - 199) 'nostetaan palikka pois maan alta
END IF
IF kulma > 1 THEN LINE -(kx, ky), 15 ELSE PSET (kx, ky), 15
NEXT
key$ = INKEY$
'Jos painetaan ENTER, pudotetaan palikka uudelleen
IF key$ = CHR$(13) THEN y = 50: x = 160: kn = (RND - .5) * .1: xn = 0
PCOPY 0, 1
CLS
'ESC lopettaa
LOOP UNTIL key$ = CHR$(27)Aika hienosti menee! Oppisin jopa jotain uutta... kai..
Lähes joka kerta menee ihan realistisesti... aika hieno.
Tosi hieni :)
silloinkin kun fysiikat menee pieleen, nimittäin ne naurattaa usein aika paljon :>
Upeaa palikkafysiikkaa. Miksi tuo rajoitus on muuten 100? Onko se koneen tehosta kiinni, vai onko siihen jokin muu syy. Itselläni teho riittää ainakin 1000. Rupeaa pallolta liike-energia karkaamaan.
Kyllä kulmia voi lisätä yli sadankin, mutta ympyröille riittäisi paljon yksinkertaisempi koodi...
Aihe on jo aika vanha, joten et voi enää vastata siihen.