Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
2014:arkanoid-game [2015/01/18 22:52] Jindřich Šindelář [Demonstrační video] |
2014:arkanoid-game [2015/01/18 23:41] (aktuální) Jindřich Šindelář [Závěr] |
||
---|---|---|---|
Řádek 7: | Řádek 7: | ||
Cílem hry je tedy odpalování míčku pomocí pálky směrem do pole cihel v horní části obrazovky tak, aby byly všechny cihly zničeny. | Cílem hry je tedy odpalování míčku pomocí pálky směrem do pole cihel v horní části obrazovky tak, aby byly všechny cihly zničeny. | ||
----- | ----- | ||
+ | =====Úvod===== | ||
+ | Následující text je dokumentací projektu zabývajícího se vývojem klonu [[http://en.wikipedia.org/wiki/Arkanoid|Arkanoidu]] ovládaného akcelerometrem vestavěným na vývojovém kitu [[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL25Z|FRDM KL25Z]]. Obsahuje popis hardware i jednotlivých funkcí firmware, které jsou popsány buď slovně, nebo příslušnými úseky kódu. Autor nepovažuje použití vývojových diagramů pro popis projektu tohoto charakteru za nezbytné. Je zde uveden také odkaz na [[http://developer.mbed.org/users/JSindelar/code/Arkanoid_v1/|repozitář projektu]] obsahující veškeré potřebné soubory včetně použitých knihoven. V závěru je přiloženo krátké video pro demonstraci funkce. | ||
+ | ------ | ||
=====Hardware===== | =====Hardware===== | ||
Původním zamýšleným displejem byl displej [[http://www.dx.com/p/2-8-tft-lcd-touch-shield-module-for-arduino-silver-blue-black-223437|ITDB02]]. Vzhledem k nesnázím s oživením displeje, které si autor nejprve odůvodňoval rozdíly v dokumentaci samotného shieldu a řídícího obvodu pro displej (viz {{www.veskys.com/Instrucuction Manual/0113052614572399.zip|archiv s dokumentací}}) byl po dohodě s vyučujícím zvolen [[http://www.gme.cz/lcd-display-graficky-128x64-atm12864d-fl-ybw-p513-118|monochromatický displej s rozlišením 128x64]]. Při oživování tohoto displeje a konzultaci s kolegy bylo zjištěno, že problém se nachází na kitu [[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL25Z|FRDM KL25Z]] - když byly pro přenos dat a řídících signálů do displeje použity vnější řady pinů na konektorech J2 a J1 (kromě těch, které nemohou být použity jako GPIO, viz [[http://elmicro.com/files/freescale/frdm-kl25z_pinouts_rev_1_0.pdf|pinout]]), displej nezobrazoval správně. Tyto vnější řady pinů byly defaultně použity také při pokusech s prvním displejem (logicky vzhledem k jeho pinoutu), chyba tedy mohla být způsobena kitem [[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL25Z|FRDM KL25Z]] a nikoliv [[http://www.dx.com/p/2-8-tft-lcd-touch-shield-module-for-arduino-silver-blue-black-223437|ITDB02 shieldem]]. | Původním zamýšleným displejem byl displej [[http://www.dx.com/p/2-8-tft-lcd-touch-shield-module-for-arduino-silver-blue-black-223437|ITDB02]]. Vzhledem k nesnázím s oživením displeje, které si autor nejprve odůvodňoval rozdíly v dokumentaci samotného shieldu a řídícího obvodu pro displej (viz {{www.veskys.com/Instrucuction Manual/0113052614572399.zip|archiv s dokumentací}}) byl po dohodě s vyučujícím zvolen [[http://www.gme.cz/lcd-display-graficky-128x64-atm12864d-fl-ybw-p513-118|monochromatický displej s rozlišením 128x64]]. Při oživování tohoto displeje a konzultaci s kolegy bylo zjištěno, že problém se nachází na kitu [[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL25Z|FRDM KL25Z]] - když byly pro přenos dat a řídících signálů do displeje použity vnější řady pinů na konektorech J2 a J1 (kromě těch, které nemohou být použity jako GPIO, viz [[http://elmicro.com/files/freescale/frdm-kl25z_pinouts_rev_1_0.pdf|pinout]]), displej nezobrazoval správně. Tyto vnější řady pinů byly defaultně použity také při pokusech s prvním displejem (logicky vzhledem k jeho pinoutu), chyba tedy mohla být způsobena kitem [[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL25Z|FRDM KL25Z]] a nikoliv [[http://www.dx.com/p/2-8-tft-lcd-touch-shield-module-for-arduino-silver-blue-black-223437|ITDB02 shieldem]]. | ||
Řádek 22: | Řádek 25: | ||
=====Firmware===== | =====Firmware===== | ||
- | Firmware byl psán v prostředí [[http://developer.mbed.org/|mbed.org]]. Pro komunikaci s displejem byla využita knihovna [[http://developer.mbed.org/users/DimiterK/code/KS0108/|KS0108]]. Z časových důvodů není kód rozdělen do více souborů, vše se nachází v souboru ''main.cpp'', který lze nalézt v [[http://developer.mbed.org/users/JSindelar/code/Arkanoid_v1/|repozitáři projektu]]. Ze stejných důvodů obsahuje hra pouze jednu úroveň, funkce ale byly psány tak, aby bylo možné jednoduše přidat další úrovně. | + | Firmware byl psán v prostředí [[http://developer.mbed.org/|mbed.org]]. Pro komunikaci s displejem byla využita knihovna [[http://developer.mbed.org/users/DimiterK/code/KS0108/|KS0108]]. Z časových důvodů není kód rozdělen do více souborů, všechny funkce se nachází v souboru ''main.cpp'', který lze nalézt v [[http://developer.mbed.org/users/JSindelar/code/Arkanoid_v1/|repozitáři projektu]]. Ze stejných důvodů obsahuje hra pouze jednu úroveň, funkce ale byly psány tak, aby bylo možné jednoduše přidat další úrovně. |
V následujícím textu budou popsány jednotlivé používané funkce. | V následujícím textu budou popsány jednotlivé používané funkce. | ||
Řádek 73: | Řádek 76: | ||
====funkce DrawBricks()==== | ====funkce DrawBricks()==== | ||
Funkce ''DrawBricks()'' dle obsahu polí ''column[]'', ''row[]'' a ''BrickExists[]'' naplněných předchozí funkcí vykresluje matici cihel. Parametry cihel, které jsou pro všechny stejné (šířka, výška) jsou dány konstantami překladače ''BrickW'', ''BrickH''. Původně bylo zamýšleno použít místo 3 samostatných polí jedno pole struktur o 3 položkách, přístup do položek struktur v tomto poli ve funkci volané z ''main''u se však zdál příliš komplikovaný. | Funkce ''DrawBricks()'' dle obsahu polí ''column[]'', ''row[]'' a ''BrickExists[]'' naplněných předchozí funkcí vykresluje matici cihel. Parametry cihel, které jsou pro všechny stejné (šířka, výška) jsou dány konstantami překladače ''BrickW'', ''BrickH''. Původně bylo zamýšleno použít místo 3 samostatných polí jedno pole struktur o 3 položkách, přístup do položek struktur v tomto poli ve funkci volané z ''main''u se však zdál příliš komplikovaný. | ||
+ | ----- | ||
+ | {{ 2014:arkanoid-game:arkanoid_screen.png?550 }} | ||
+ | Takto vypadá displej po vykreslení loga, tabulky s nulovým skóre a 3 zbývajícími životy, ohraničení herní plochy, matice cihel, pálky a míčku ve výchozí pozici. | ||
+ | |||
----- | ----- | ||
====Funkce reset()==== | ====Funkce reset()==== | ||
Řádek 199: | Řádek 206: | ||
=====Demonstrační video===== | =====Demonstrační video===== | ||
- | {{youtube>GC-csz9e6Wk?large}} | + | {{ youtube>GC-csz9e6Wk?large }} |
V první části videa je hra úspěšně dohrána, po restartu je záměrně prohrána pro demonstraci chování v obou případech. | V první části videa je hra úspěšně dohrána, po restartu je záměrně prohrána pro demonstraci chování v obou případech. | ||
----- | ----- | ||
=====Závěr===== | =====Závěr===== | ||
- | V rámci tohoto projektu byl vyvinut klon hry [[http://en.wikipedia.org/wiki/Arkanoid|Arkanoid]] ovládaný akcelerometrem vývojového kitu [[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL25Z|FRDM KL25Z]]. Hra zatím obsahuje pouze jednu úroveň včetně počítání skóre a zbývajících pokusů a je plně funkční. | + | V rámci tohoto projektu byl vyvinut klon hry [[http://en.wikipedia.org/wiki/Arkanoid|Arkanoid]] ovládaný akcelerometrem vývojového kitu [[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL25Z|FRDM KL25Z]]. Hra zatím obsahuje pouze jednu úroveň, funkce však byly psány tak, aby rozšíření o další úrovně nebylo příliš pracné. Hra je plně funkční a zobrazuje také informace o skóre a počtu zbývajících pokusů. Kompletní kód včetně použitých knihoven lze nalézt v [[http://developer.mbed.org/users/JSindelar/code/Arkanoid_v1/|repozitáři projektu]]. |