Tetris v C# .NET WPF

C# .NET WPF Zdrojákoviště 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

Hra byla vytvořena v roce 2013.

 

Stáhnout

Staženo 544x (1.25 MB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

  Aktivity (1)

Hru pro vás napsal Petr Domes (petrds)
Avatar
Programuji v .NET. Ovládám C#, .ASP, WF, WPF, SQL

Jak se ti líbí článek?
Celkem (3 hlasů) :
55555


 



 

 

Komentáře
Zobrazit starší komentáře (2)

Avatar
Petr Domes (petrds):

jasně, upravuj si to jak chceš :)

 
Odpovědět 11.3.2014 19:20
Avatar
Supercaptain
Člen
Avatar
Supercaptain:

Ahoj, zkouším a zkouším a ten Tetris.zip nejde otevřit. Hazí to hlášku že to obsahuje neznáme metody. Zkoušel jsem to na 3 PC.

 
Odpovědět 13.3.2014 12:00
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Supercaptain
David Čápka:

"Hazí to hlášku" - Asi by bylo dobré napsat tu hlášku. Projekt funguje korektně, teď jsem ho ještě zkoušel, asi máš staré IDE nebo .NET.

Odpovědět  +1 13.3.2014 12:03
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Supercaptain
Člen
Avatar
Odpovídá na David Čápka
Supercaptain:

Však jsem to napsal tu hlašku. >>> Hazí to hlášku že to obsahuje neznáme metody. <<< Viz predešlý post. Nemluvím o otevření projektu ale zipu.
IDE (mam VS 13)

 
Odpovědět 13.3.2014 12:15
Avatar
Odpovídá na Supercaptain
Petr Domes (petrds):

V čem ten zip otvíráš? Komprimoval jsem to v 7Zipu. Otevření ve Windows bez kompreseního programu 3. strany nefunguje :( Jsem tam totiž nastavil jiný než standardní kompresní algoritmus

 
Odpovědět 13.3.2014 12:51
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Supercaptain
David Čápka:

Máš pravdu, Windows Explorer mi to nerozbalí, ale 7zip ano.

Odpovědět 13.3.2014 12:52
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Petr Domes (petrds)
David Čápka:

Tak to prosím přebal a edituj, bylo by dobré, aby to fungovalo všude :)

Odpovědět  +1 13.3.2014 12:53
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Petr Domes (petrds):

tak editováno, standardní alg. to zabalil do 1300KB (původně bylo jen 966KB)

 
Odpovědět 13.3.2014 13:07
Avatar
pata.mrazik
Člen
Avatar
pata.mrazik:

Ahoj chtel jsem se zeptat. Jak je tam tvoren dopad dilku. Ja si zkousim udelat svuj vlastni a potrebuju inspiraci, kdyz me dilek dopadne nezustane na svem miste, ale hned se mi vygeneruje novy. Potreboval bych radu jak ho tam ulozit nebo zanechat a aby se vygeneroval dalsi. Dekuji za radu :-)

 
Odpovědět 13.12.2015 12:01
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 10 zpráv z 12. Zobrazit vše