PROGRAMOWANIE
WEBMASTER:
 Artyku³y
 Kursy
 Skrypty
PHP:
 Artyku³y
 Kursy
 Skrypty
VISUAL C/C++:
 Artyku³y
 Kursy
 Kody ¼ród³owe
C++ BUILDER:
 Artyku³y
 Kursy
 Komponenty
 Kody ¼ród³owe
 FAQ
DELPHI:
 Artyku³y
 Kursy
 Komponenty
 Kody ¼ród³owe
 FAQ
JAVA:
 Artyku³y
 Kursy
 Aplety
ASP:
 Artyku³y
 Kursy
 Skrypty
VISUAL BASIC:
 Artyku³y
 Kursy
 Kody ¼ród³owe
PASCAL:
 Artyku³y
 Kursy
 Kody ¼ród³owe
ASSEMBLER:
 Artyku³y
 Kursy
 Kody ¼ród³owe
O NAS [...]
 Ekipa portalu
 Reklama
REKLAMA

Pascal » Artyku³y
Efekt padaj±cego ¶niegu
Zima, za oknem pada ¶nieg. Nieraz zapewne czytelnicy widzieli w ró¿nych demkach, czy innych programach efekt padaj±cego ¶niegu zatrzymuj±cego siê na elementach obrazka. Kiedy¶ nie chcia³o mi siê nic po¿ytecznego stworzyæ, i postanowi³em napisaæ coæ w tym stylu.

Opiszê pokrótce sposób postêpowania przy tworzeniu wirtualnego ¶niegu:

Najpierw losujemy sobie pozycje x i y na ekranie pixelków, a tak¿e ich prêdko¶ci. Operujemy na liczbach rzeczywistych (lub jak kto woli z przecinkiem), aby ruch pixelka by³ p³ynny. Nale¿y równie¿ zadbaæ, aby pixel nie przeskoczy³ o 2 pola w dó³ (tzn. aby prêdko¶æ nie by³a wiêksza od 0.9) bo wtedy dosz³yby nam dodatkowe warunki czego raczej nie po¿±damy w naszym programie. Mogliby¶my losowaæ punkty tylko w X, a Y zawsze ustawiæ na 0. Spowodowa³oby to jednak nieestetyczny start i mog³oby doj¶æ do zapchania siê w górnej czê¶ci ekranu przy ilo¶ci punktów ok. 1000. Wiêc musimy losowaæ na ca³ym ekranie, ale uwaga nie mo¿emy postawiæ pixelka na kolorze, który bêdzie je zatrzymywa³ (np, gdy kolorem który powoduje zatrzymanie pixelka jest kolor 15, to nie mo¿emy wylosowaæ wspó³rzêdnych, które wypadaj± na napisie w kolorze 15, a to dlatego ¿e pixel startuj±c pozostawi³by po sobie dziurkê, a w rezultacie zamazanie napisu), w tym celu przy losowaniu sprawdzamy sobie kolor.

Mamy ju¿ przygotowane tablice, mo¿emy zacz±æ ruch punktów. W pêtli dla wszystkich pixelków po kolei sprawdzamy najpierw czy mo¿emy poruszyæ siê jeszcze w dó³, czyli czy punkt pod nami jest w kolorze innym ni¿ kolor zatrzymuj±cy. Je¿eli mo¿emy siê poruszyæ to kasujemy pixel na starej pozycji i dodajemy szybko¶æ do aktualnej wspó³rzêdnej Y. Po czym sprawdzamy czy nie wyskoczyli¶my poza ekran, je¿eli tak to losujemy now± warto¶æ X punktu i do Y wpisujemy 0 (czyli zaczynamy od góry) i na zakoñczenie rysujemy pixel w nowym miejscu kolorem zatrzymuj±cym.

Wróæmy teraz do pierwszego rozga³êzienia. Czyli do momentu, w którym sprawdzali¶my czy pod nami jest kolor zatrzymuj±cy. Je¶eli jest, to nale¿y sprawdziæ czy nasz punkt mo¿e obsun±æ siê w prawo lub w lewo (po stoku). Sprawdzamy czy mo¿emy siê obsun±æ w prawo, a potem w lewo. Je¿eli nie mo¿emy siê obni¿yæ w ¿adn± ze stron, to spoczywamy spokojnie na miejscu, w którym obecnie siê znajdujemy i losujemy now± szybko¶æ oraz X i zaczynamy od nowa. Je¿eli mo¿emy siê obsun±æ w lewo lub w prawo to kasujemy punkt na starej pozycji zmieniamy X (w zale¿no¶ci od tego w któr± stronê siê obsuwamy) i dodajemy znów szybko¶æ do Y, sprawdzamy czy nie wyl±dowali¶my poza ekranem i stawiamy punkt w nowym miejscu. I cykl siê zamyka w kó³eczko. To mniej wiêcej ca³a filozofia ¶niegu. Teraz jak to wygl±da w praktyce (a raczej w Turbo Pascalu):

Program mo¿na na wiele sposobów ulepszyæ. Przyk³adowo mo¿na jako t³o wstawiæ jaki¶ krajobraz (np. plik graficzny GIF) na którego tle bêdzie pada³ ¶nieg. Innym pomys³em jest tzw. lepko¶æ, czyli przyczepno¶æ do powierzchni podczas lotu), czy budowanie siê skarp i pó¼niejsze ich obrywanie siê, itd. ...

Kod ¼ród³owy do artyku³u:
Efekt ¶niegu (1,49 KB)

Dariusz Pindraszak
NEWSLETTER
Chcesz byæ zawsze na bie¿±co?
Zapisz siê!
WP.PL
LITERATURA
INNE [?]
Katalog WWW
Sponsor
On-Line: 4
stat4u
Wszystkie prawa zastrze¿one © 2001-2002 Programik.com