Vesiefektistä sai johdettua melko helposti lumisade-efektin, ja tässä se nyt on. Toisin kuin vesiefektissä, pudonneiden lumihiutaleiden taulukkotila vapautuu, eli lunta sataa loputtomasti.
SCREEN 13
TYPE hiutale
x AS INTEGER
y AS INTEGER
END TYPE
Max = 800 'hiutaleitten määrä kerrallaan
'mitä ruudulla näkyy
LOCATE 5, 5: PRINT "Lunta tulvillaan..."
DIM h(Max) AS hiutale
DO
FOR i = 1 TO Max
PRESET (h(i).x, h(i).y) 'vanha hiutale pois
IF h(i).x = 0 THEN 'uusi hiutale
h(i).x = INT(RND * 320) + 2
h(i).y = 0 - INT(RND * 200) + 1
ELSE
IF h(i).y < 199 AND h(i).x > 1 THEN
IF POINT(h(i).x, h(i).y + 1) = 0 THEN 'suoraan alas
h(i).y = h(i).y + 1
ELSEIF POINT(h(i).x - 1, h(i).y + 1) = 0 THEN 'alas ja vasemmalle
h(i).y = h(i).y + 1
h(i).x = h(i).x - 1
ELSEIF POINT(h(i).x + 1, h(i).y + 1) = 0 THEN 'alas ja oikealle
h(i).y = h(i).y + 1
h(i).x = h(i).x + 1
ELSE
PSET (h(i).x, h(i).y), 26 + i MOD 4 'hiutale laskeutui
h(i).x = 0 'uudestaan ylös
END IF
ELSE
PSET (h(i).x, h(i).y), 26 + i MOD 4 'hiutale laskeutui
h(i).x = 0 'uudestaan ylös
END IF
END IF
PSET (h(i).x, h(i).y), 15 'uusi hiutale
NEXT
LOOP WHILE INKEY$ <> CHR$(27)Hieman likaista lunta... :)
Tätäkin koodinpätkää voi nopeuttaa lisäämällä alkuun rivin:
DEFINT A-Z
Ei voi laittaa peliin, valittaa jotain tossa DIM h(Max) jutun h:ssa.
Kun mainitsit vesiefektin, puhuitko tekemästäni Vesipisarat-efektistä vai jostain muusta? Olen tehnyt samantapaisen, missä tipuu kiviä kasoihin ja sitten vierii alas kunnes kasa on täysin kolmio. Vähän niin kuin tämä, paitsi että taulukkotila ei vapaudu, koska jo pudonneet kivet voivat muiden vieriessä lähteä uudestaan vierimään.
jos "Lunta tulvillaan..." korvataan 40:llä viivalla, lunta tulee maahan säännöllisemmin.
kiva. koittakaa pistää Max=22222.
Aihe on jo aika vanha, joten et voi enää vastata siihen.