|
||||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
Software (10844)
|
Qt framework - qt_tetris(2)Další díl při tvorbě naší hry nás zavede do problematiky tvorby enginu pro kreslení jednotlivých hracích kostiček a celé logiky v hracím poli.
Virtuální hrací poleV minulém díle jsme si založili structuru sGAME_FIELD a její proměnnou l_gameField, která představuje naše virtuální pole. Každá kostička v tomto poli obsahuje třídu pro kostičku a může mít celkem tři stavy. Buď zde nic není a tím pádem bude s_Sprite roven NULL, obsahuje kostičku s_Sprite a ta se buď pohybuje nebo je „skamenělá“. Tedy proměnná l_status označuje existenci kostičky a l_isFixed její pohyblivost. Pole si je možné představit jako takovou neviditelnou šachovnici. Jaká bude další kostičkaV našem boxu Další si vygenerujeme novou kostičku. Nejdříve si do konstruktoru vytvoříme náhodné generování: Tím zajistíme, že náš program ví, kterou kostičkou má hra začínat a jakou vypustí jako následující (generování je náhodné). Jednoduše budeme generovat čísla od 1 – 8 a každé znich představuje určitý typ kostičky (já jsem zvolil pro příklad 8 kostiček). Vytvoříme novou metodu v tetris.cpp pro vykreslování našich náhodných kostiček: Tado metoda vždy vykreslí do našeho okna kostičku, která bude následovat hned jak dopadne aktuální pohyblivá kostička (všechny políčka v hracím poli nabydou hodnoty l_isFixed = true). Dále si vytvoříme do projektu novou třídu představující jednu kostičku, pojmenovanou CCube. Třída by mohla vypadat takto: Třída nám vykreslí jednu kostičku do hracího pole metodou DrawReal, tak i kostičku do pozice následující hrací kostičky metodou Draw. Metody pak budou vypadat takto: Metoda by šla udělat pouze jedna s dalším parametrem. Možností je více. Můžete si zkusit různé experimenty. Důležeté je povšimnout si praktického využití knihovny Qt4. V našich dvouch metodách jsme využili metodu pro nastavení barvy setPen (pro okraje) a pro vyplnění pozadí naší kostičky fillRect. A konečně sama metoda pro vykreslování 4 úhelníků drawRect s parametrem QRectF pro určení souřadnic. Další metody naší třídy:
Impementace by pak mohla být třeba takto: Toto například bude velká kostička tvořená čtyřmi menšími kostičkami. Každé části se nastaví pozice a barva jak je patrné z příkladu. Dále přidáme v tetris.cpp k metodě void CTetris::paintEvent(QPaintEvent *event) řádek paintNextSprite(&a_painter). Tím jsme si zajistili, že se nám vykreslí vždy následující kostičky vždy, když spustíme hru tlačítkem start. Aktivace tlačítka start Vytvoříme si metodu pro stisk tlačítka Start. Po stisku provedeme metodu Reset hracího pole (pokud začínáme hru po skončení předchozí hry je potřeba resetovat hrací pole). Tlačítko Start deaktivujeme. Nastavíme proměnnou indikující zda je hra v běhu na hodnotu true. Metodou AddNewSprite (implementujeme si v dalším díle) si vložíme hrací kostku (podle náhodně vygenerované l_currentType). Provedeme překreslení našeho okna metodou repaint. A nakonec spustíme smyčku Timer (se 100ms). Implementace Reset metody pole bude vypadat následovně: Timer smyčka se pak definuje takto:
ZávěrMáme již hotové hrací pole a víme jaká bude vždy následovat kostička. Příště si doděláme engine pro vykreslení hracích kostiček, uděláme metodu pro testování zda došlo ke kolizi, metodu pro test zda je plná řada a plné řady necháme zmizet. Ukážeme si algoritmu co nám zajistí posunutí „zkamenělin“ po odstranění plné řady. A aktivujeme si klávesnici pro ovládání kostiček.
|
Search Software
Search Google
|
||||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |