Akce! Dobij si body, napiš nám do zpráv "Přes léto se to naučím!" a dobijeme ti ještě navíc 50% z této částky! Sleva na výuku platí do 22.6.2018.

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

C# .NET Objektově orientované programování Zdrojákoviště Kulečník v konzoli v C# .NET

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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 :-)


 

Stáhnout

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

 

 

Článek pro vás napsal fictum.jiri
Avatar
Jak se ti líbí článek?
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 (2)

 

 

Komentáře

Avatar
Pracka
Člen
Avatar
Pracka:7. dubna 8:56

Pekny program :) mozno si mohol skusit zakomponovat odrazi guliciek.
V zjedodusenom modely, kde sa pohybuju vsetky rovnakou rychlostou a maju rovnaku vahu by si len vymenili medzi sebou smerove vektory ;)

Odpovědět 7. dubna 8:56
Carpe Diem
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.