Biliard v konzolu v C # .NET
Už dlhšiu dobru som si hovoril, že by to chcelo na niečom pekne ukázať, prečo sa vlastne objekty zaoberať. K čomu by vlastne mohli byť dobré. Program, ktorý si práve čítate, som zamýšľal pre študentov prvé vstupujúci do objektového programovania. Pri jeho tvorbe ma zaujalo hneď niekoľko zaujímavých vecí a rád sa o ne s vami podelím.
Pohyb guličky
Kvôli odrážanie nepřenastavuji pri pohnutia guličky len jednu súradnicu, ale vždy obe, aby som mohol sčítať aktuálnu polohu s vektoroch v oboch smeroch ao viac sa nestarať. Vykresľovanie na súradnice už sa nám v škole veľmi osvedčilo, takže o inom riešení (napríklad prekresľovanie celej konzoly) ani neuvažujem. Kto nevie, tak počiatok sústavy hľadajte vľavo hore.
Systém odrážanie od stien
Možno to niekomu znie banálne, ale dalo mi chvíľu prácu, než som našiel jednoduchý spôsob, ako ošetriť odrážanie guľôčky od steny v akomkoľvek smere! Výpočet možností a reakcie na ne je jednoducho zlá varianta a musel som ju zavrhnúť. Potom som skúsil využiť vektor. Ten má totiž 2 súradnice, jednu pre X a druhú pre Y smer. Takže stačí prenastaviť vždy len túto súradnicu, prípadne obe, ak nastal odraz od rohu. Potom je jedno, od akej steny a akým smerom sa gulička odrážala. Funguje to perfektne.
Timer
Jasne, že je timer vhodnejšie, než uspanie vlákna metódou Sleep (). Ale chcel som maximálnu jednoduchosť. A tiež som testoval obe varianty a pri behu som nepozoroval žiadny badateľný rozdiel, takže uspávanie proteď zvíťazilo.
Preblikávania konzoly
Obzvlášť pri vyšších rýchlostiach "kotúľanie" konzoly prestane stíhať a pohyby začnú byť trhané. Zistil som však, že obyčajné skrytie scrollbaru vpravo veľmi zlepší plynulosť a výsledok celkovo. Ďalšia vec - počas vykonávania programu sa proste NESMIE žiadny znak vykresliť mimo hraníc konzolového okna. Ak to nastane vľavo, hore alebo vpravo, nastane výnimka a program spadne. Ak to však nastane smerom nadol - nič nespadne, pretože celá konzoly sa jednoducho posunie o jeden riadok a znak sa vykreslí. Akonáhle dôjde k vykreslení v hornom riadku, konzola sa opäť posunie nahor. A máme tu preblikávania. Chvíľku mi trvalo, než som odhalil túto prostú príčinu ...
Sústava IFU v metóde PohniSe ()
Zaujímavé, čo spôsobí drobnosť v podobe zámeny sekvencie
if
za sekvenciu if else
. Rozdiel nastane vo chvíli,
keď sa gulička odrazí od rohu konzoly (v tej chvíli by malo dôjsť k zmene
vektora xi vektora y), ale zmení sa len prvý vektor a nastane to, o čom som
písal. Skús si to!
A čo barviššky? !!
Nie sú tam schválne kvôli jednoduchosti. Nie je vôbec ťažké dotvoriť si tam náhodné farby guličiek, prípadne farby viazané na smer, v ktorom sa gulička pohybuje, takže to už nechám ako výzvu pre záujemcov
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 146x (49.08 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#