Tetris v C# .NET WPF
Naprogramoval jsem klasickou hru Tetris v C# .NET. Pro grafické rozhraní jsem použil WPF. Touto hrou jsem si procvičil dědičnost, použití rozhraní a vláken, práci s kolekcemi a WPF.
Stručný popis řešení
GUI
Hrací čtverečková síť je vytvořena z gridu s deseti sloupci a 20 řádky. V každé buňce gridu je objekt Rectangle, kterému se v průběhu hry mění barva.
Objekty(kostky)
Každý druh kostky skládající se z maximálně 4 dílčích kostiček má svou vlastní třídu. Dědí z třídy BaseShapeObject, ve které jsou implementovány posuny do stran a samotná kolekce bodů. Všechny třídy implementují rozhraní IObject, ve kterém je definována metoda Create pro vytvoření kostky(tvar/pozice kostky).
Herní logika
Při ovládání pohybu kostky se kontrolují souřadnice bodů kostky, jestli jsou v souřadnicích herní plochy, jinak se pohyb neprovede. Kolize a všechny metody pohybu jsou řešeny pomocí funkcí generické kolekce List.
Např. pohyb doleva. Podmínka jestli neexistuje bod, který je menší než počátek osy X (nula). Další podmínka řeší kolizi, jestli se na nové pozici již nějaký bod nenachází. Pokud ne, posunou se všechny body kostky.
if (!points.Exists(p => (p.X - 1) < 0)) { if (!listOfOtherObjects.Exists(lo => points.Exists(p => (p.X - 1) == lo.X && p.Y == lo.Y))) { points.ForEach(p => { p.X--; }); } }
Na pozadí běží vlákno, které měří čas posunu kostky dolů. Hodnota začíná na 1 sekundě. Každé kolo se zmenšuje o 20%. Bodování je následující (n je aktuální kolo):
Počet odbouraných řad | Body |
---|---|
Jedna | n*40 + 40 |
Dvě | n*100 + 100 |
Tři | n*300 + 300 |
Čtyři (tetris) | n*1200 + 1200 |
Hru lze kdykoli pozastavit.
Na případné dotazy či jiné možnosti řešení rád odpovím
Galerie
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 753x (1.25 MB)
Aplikace je včetně zdrojových kódů v jazyce C#