Tämä on tällläinen pieni peli, jossa ollaan avaruudessa ja laukaistaan raketti, ja sen on tarkoitus osua punaiseen "planeettaan". SubTV :llä pyörii tämän tapainen peli. Homma toimii antamalla kulman ja nopeuden raketille ja sitten se lähtee ajamaan ja kääntyy planeettojen vetovoiman mukaan. Koodi ei varmasti ole parasta mahdollista mutta toimii. Koodin pitäisi olla kommentoitua ja fyysikka-osuus on sitten ihan sovellettua... ei välttämättä ollenkaan oikein.
03.03.03 muokkaus: korjasin koodin Hipon kommentin mukaan.
12.08.03 muokkaus: nyt on helpompi lisätä planeettoja, muokkaa vain arvoa pallojenmaara ja määrittelee uuden planeetan.
'Avaruuspainovoimasimulaatio (tai nimihirviö :) 'Copyright Miikka Koskinen 'SAA KÄYTTÄÄ TÄYSIN VAPAASTI EPÄKAUPALLISIIN TARKOITUKSIIN. 'KAUPPALISIIN TARKOITUKSIIN KYSYTTÄVÄ TEKIJÄN LUPA. 'käytämme dynaamista muistin varausta, luulisin '$DYNAMIC 'määritellään planeetat TYPE pallo x AS INTEGER 'x-koordinaatti y AS INTEGER 'y-koordinaatti r AS INTEGER 'ympyrän säde c AS INTEGER 'väri END TYPE 'ja se raketti TYPE objekti x AS SINGLE 'x y AS SINGLE 'y c AS INTEGER 'väri m AS INTEGER 'massa xs AS SINGLE 'x-nopeus ys AS SINGLE 'y-nopeus END TYPE 'planeettojen määrä CONST pallojenmaara = 4 CONST maalivari = 12 'luodaan (?) muuttujia DIM SHARED p(pallojenmaara-1) AS pallo, o AS objekti 'näyttötila 640x480x16 SCREEN 12 'määritellään planeetat p(0).x = 600 p(0).y = 320 p(0).r = 10 p(0).c = maalivari p(1).x = 300 p(1).y = 300 p(1).r = 20 p(1).c = 9 p(2).x = 500 p(2).y = 200 p(2).r = 20 p(2).c = 9 p(3).x = 200 p(3).y = 20 p(3).r = 10 p(3).c = 9 'määritellään raketti o.x = 10 o.y = 10 o.m = 10 o.c = 10 PI = 4 * ATN(1) 'lasketaan pii SUB piirto CLS 'putsataan näyttö 'piirretään lähtöpiste PSET (o.x, o.y), o.c 'piirretään ympyrät FOR i = 0 TO pallojenmaara-1 CIRCLE (p(i).x, p(i).y), p(i).r, p(i).c PAINT (p(i).x, p(i).y), p(i).c, p(i).c NEXT i END SUB piirto DO 'kysytään kulma & nopeus LOCATE 5, 1 DO INPUT "Kulma (0-90)"; kulma! LOOP UNTIL kulma! >= 0 AND kulma! <= 90 DO INPUT "Nopeus (0-10)"; s! LOOP UNTIL s! >= 0 AND s! <= 10 o.x = 10 o.y = 10 o.xs = COS(PI * kulma! / 180) * s! 'x-nopeus on kolmion sivun pituus o.ys = SIN(PI * kulma! / 180) * s! 'y-nopeus myös piirto 'kymmenentuhatta kertaa käydään läpi FOR i = 0 TO 10000 o.x = o.x + o.xs 'liikutaan o.y = o.y + o.ys 'liikutaan 'tarkistetaan onko törmätty johonkin planeettaan tms. tormaysvari = POINT(o.x, o.y) IF tormaysvari <> 0 AND tormaysvari <> o.c THEN EXIT FOR 'piirretään piste PSET (o.x, o.y), o.c 'sitten tullee fysiikka-osuus eli lasketaan vetovoimat FOR j = 0 TO pallojenmaara-1 x = p(j).x - o.x 'pisteiden etäisyys y = p(j).y - o.y 'x ja y r = SQR(x * x + y * y) 'pisteiden etäisyys (lasketaan hypotenuusa) F = 10 * ((p(j).r * o.m) / (r * r)) 'painovoima pisteiden välillä a = F / o.m 'kiihtyvyys 'lisätään nopeuteen kiihtyvyys o.xs = o.xs + x / r * a o.ys = o.ys + y / r * a NEXT j 'tässä hidastetaan vähän, niin on kivempi WAIT &h3da, &h8 NEXT i 'ilmoitetaan tulos LOCATE 8, 1 PRINT "---------------------" PRINT "Kulma = "; kulma! PRINT "Nopeus = "; s! IF tormaysvari = maalivari THEN PRINT "Voitit!" ELSE PRINT "Hävisit!" END IF PRINT "Paina ESC, jos haluat lopettaa" DO x$ = INKEY$ IF x$ = CHR$(27) THEN END LOOP UNTIL x$ <> "" LOOP
Kommentteja, kiitos, kuten kaikki sanovat.
Ihan kiva, vaikka liikkuukin hassusti, kun voima lisätään väärin. Jo pituudesta voi huomata, että se on väärä, kun lasket tosta lisätystä nopeudesta hypotenuusan. Hieman vektorimatikkaa, skaalataan vektori nopeuden pituseks, eli jaetaan pituudella ja kerrotaan nopeuden määrällä. if-sössöjen tilalle:
o.xs = o.xs + x / r * a
o.ys = o.ys + y / r * a
Niin ja se on siis pieni a, ei iso. :)
Mää tiedän ton koodin kirjoittajan ja se on tosi hikke. Sil ja paril sen kaveril on meneillään skeittimanageripeli. Mää oon sen beta-testaaja.
Joo, siis ensinnäkin milloin kommentteihin tulee rekisteröintipakko. Ja kaikki nyt tietää että mä ja snakari ja vilikki ja tatu ja jarkko tehdään Skede Manageria, ja harkitsen vakavissani, että Vipa ei olekkaan enää betatestaaja. Ja tuo matematiikka on sen takia pielessä että kun katsos meillä ei ole yläasteella matemattikassa opetettu vielä mitään kovin ihmeellistä, niin tuo on ihan päästä vedettyä koodia. Se oli alunperin pieni a mutta muuttui vahingossa isoksi, kiitos qb-editorin.
Erittäin upea ja aidon tuntuinen!
aika hieno
Ihan tyylikäs. Hypotenuusa? Se tuli ainakin meille vasta ysillä... Skede manageri rullaa... ;-)
peelot kattoo subtv:tä
en sanois "simulaatioks"
...(tai nimihirviö)
:D ja LOL
Aika jännä viritelmä. Sain muuten osuman arvoilla 30 ja 200. ;D
eikös tää kuuluis ennemminkin peleihin?
Muutes, miten lisätään uus planeetta?
Ehkäpä tämä kuuluisi..
Gwaur kirjoitti:
Muutes, miten lisätään uus planeetta?
Oikeastaan voisin tehdä koodiin muutoksen, joka helpottaa asiaa.
Noniin, nyt vain muokkaat muuttujaa pallojenmaara ja määrittelet uuden planeetan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.