Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

Kulečník v konzoli v C# .NET

Už delší dobru jsem si říkal, že by to chtělo na něčem pěkně ukázat, proč se vlastně objekty zabývat. K čemu by vlastně mohly být dobré. Program, který si právě pročítáte, jsem zamýšlel pro studenty prvě vstupující do objektového programování. Při jeho tvorbě mě zaujalo hned několik zajímavých věcí a rád se o ně s vámi podělím.

Pohyb kuličky

Kvůli odrážení nepřenastavuji při pohnutí kuličky jen jednu souřadnici, ale vždy obě, abych mohl sečíst aktuální polohu s vektorech v obou směrech a o víc se nestarat. Vykreslování na souřadnice už se nám ve škole velmi osvědčilo, takže o jiném řešení (například překreslování celé konzole) ani neuvažuji. Kdo neví, tak počátek soustavy hledejte vlevo nahoře.

Systém odrážení od stěn

Možná to někomu zní banálně, ale dalo mi chvíli práci, než jsem našel jednoduchý způsob, jak ošetřit odrážení kuličky od stěny v jakémkoliv směru! Výčet možností a reakce na ně je prostě špatná varianta a musel jsem ji zavrhnout. Pak jsem zkusil využít vektor. Ten má totiž 2 souřadnice, jednu pro X a druhou pro Y směr. Takže stačí přenastavit vždy jen tuto souřadnici, případně obě, pokud nastal odraz od rohu. Potom je jedno, od jaké stěny a jakým směrem se kulička odrážela. Funguje to perfektně.

Timer

Jasně, že je timer vhodnější, než uspání vlákna metodou Sleep(). Ale chtěl jsem maximální jednoduchost. A také jsem testoval obě varianty a při běhu jsem nepozoroval žádný znatelný rozdíl, takže uspávání proteď zvítězilo.

Problikávání konzole

Obzvlášť při vyšších rychlostech "kutálení" konzole přestane stíhat a pohyby začnou být trhané. Zjistil jsem však, že obyčejné skrytí scrollbaru vpravo velmi zlepší plynulost a výsledek celkově. Další věc - během vykonávání programu se prostě NESMÍ žádný znak vykreslit mimo hranice konzolového okna. Pokud to nastane vlevo, nahoře či vpravo, nastane výjimka a program spadne. Pokud to však nastane směrem dolů - nic nespadne, protože celá konzole se prostě posune o jednu řádku a znak se vykreslí. Jakmile dojde k vykresleni v horní řádce, konzole se opět posune nahoru. A máme zde problikávání. Chvilku mi trvalo, než jsem odhalil tuto prostou příčinu...

Soustava ifů v metodě PohniSe()

Zajímavé, co způsobí drobnost v podobě záměny sekvence if za sekvenci if else. Rozdíl nastane ve chvíli, kdy se kulička odrazí od rohu konzole (v tu chvíli by mělo dojít ke změně vektoru x i vektoru y), ale změní se jen první vektor a nastane to, o čem jsem psal. Zkus si to!

A co barviššky?!!

Nejsou tam schválně kvůli jednoduchosti. Není vůbec těžké dotvořit si tam náhodné barvy kuliček, případně barvy vázané na směr, ve kterém se kulička pohybuje, takže to už nechám jako výzvu pro zájemce :-)


Galerie

Program byl vytvořen v roce 2018.

 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 142x (49.08 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Všechny články v sekci
Zdrojákoviště C# .NET - Objektově orientované programování
Program pro vás napsal fictum.jiri
Avatar
Uživatelské hodnocení:
1 hlasů
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