Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Palikka-fysiikkaa

jsbasic [02.12.2003 13:13:55]

#

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)

rndprogy [02.12.2003 16:48:02]

#

Aika hienosti menee! Oppisin jopa jotain uutta... kai..

sooda [02.12.2003 18:12:25]

#

Lähes joka kerta menee ihan realistisesti... aika hieno.

Gwaur [02.12.2003 22:04:25]

#

Tosi hieni :)
silloinkin kun fysiikat menee pieleen, nimittäin ne naurattaa usein aika paljon :>

hunajavohveli [03.12.2003 12:24:39]

#

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.

jsbasic [22.12.2003 11:25:19]

#

Kyllä kulmia voi lisätä yli sadankin, mutta ympyröille riittäisi paljon yksinkertaisempi koodi...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta