IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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é 142x (49.08 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Všetky články v sekcii
Zdrojákoviště C # .NET - Objektovo orientované programovanie
Článok pre vás napísal fictum.jiri
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor pracuje v oblasti správy sítí a lektorování práce na počítači. Jeho zkušenosti se dále ubírají přes vlastní skripty příkazového řádku až po výuku základů C# pro žáky VOŠ.
Aktivity