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:led-tetris [2015/01/18 16:09] Matej Hojdík |
2014:led-tetris [2015/01/18 22:07] (aktuální) Matej Hojdík [Záver] |
||
---|---|---|---|
Řádek 100: | Řádek 100: | ||
Od tejto súradnice sa v dvoch for cykloch (riadok, stĺpec) skontroluje, či sa neprekryje nový segment s vysvietenou časťou (čiže predchádzajúce segmenty, prípadne ich zvyšky). Ak dojde ku kolízií pole ''int dispArray[8][16]'' sa vynuluje a začína nová hra. Ak nenastane kolízia, segment sa na určitu dobu zapíše to tohoto poľa a tým sa vysvieti. | Od tejto súradnice sa v dvoch for cykloch (riadok, stĺpec) skontroluje, či sa neprekryje nový segment s vysvietenou časťou (čiže predchádzajúce segmenty, prípadne ich zvyšky). Ak dojde ku kolízií pole ''int dispArray[8][16]'' sa vynuluje a začína nová hra. Ak nenastane kolízia, segment sa na určitu dobu zapíše to tohoto poľa a tým sa vysvieti. | ||
- | V tomto momente sa začína inkrementovať premenná counter. Vždy keď je counter násobkom 4000, testuje sa návratová hodnota z funkcie pre obsluhu akcelerometra. Podľa návratovej hodnoty z funkcie obsluhujúcej akcelerometer sa rozhodne: | + | V tomto momente sa začína inkrementovať premenná counter. Vždy keď je counter násobkom 4000, testuje sa návratová hodnota z funkcie pre obsluhu akcelerometra, pričom plne dostačujúce sú hodnoty z osí x a y. Podľa návratovej hodnoty z funkcie obsluhujúcej akcelerometer sa rozhodne: |
* či sa má segment pohnúť v pravo - realizované náklonom dosky do prava | * či sa má segment pohnúť v pravo - realizované náklonom dosky do prava | ||
* či sa má segment pohnúť v ľavo - realizované náklonom dosky do ľava | * či sa má segment pohnúť v ľavo - realizované náklonom dosky do ľava | ||
Řádek 144: | Řádek 144: | ||
---- | ---- | ||
+ | === Zoznam všetkých funkcií === | ||
+ | podrobnejšie sú tieto funkcie, tak ako celý firmware popísané[[http://developer.mbed.org/users/lamaking/code/Tet_-r-is/|tu]] | ||
+ | <code cpp> | ||
+ | // prototypy funkcii | ||
+ | short RandSegment(void); //funkcia nahodne vybera novy segment pomocou citania A/D vstupu | ||
+ | void SegmentInit(void); //prida jednotlivym segmentom informacie o ich vlastnostiach - pocet riadkov, stlpcov, rotovany segment, priradi pole s vlastnostou farby | ||
+ | void SegmentCopy(struct segments *psgm, int segmentIn[2][4]); //v SegmentInit skopiruje vytvorene pole segmentu do pola v strukture (struct segments) | ||
+ | void MoveDown(int array[8][16], int line); //posun pola smerom dole po odstranení zaplneneho riadku | ||
+ | void LineCheck(void); //funkcia kontroluje zaplneny riadok | ||
+ | void SegmentMove(struct segments *psgm); //funkcia sa stara o pohyby segmentu | ||
+ | void WriteClrSeg(int wrtEnab, struct segments *psgm); //zmazanie alebo zapis segmentu pri pohybe maticou | ||
+ | int DecLvl(void); //obsluha akcelerometra (preco prave Dec som zabudol) | ||
+ | void LineAdd(int line); //adresacia riadkov | ||
+ | void Display(void); //rozsvecovanie farieb v riadkoch podla hlavnej matice | ||
+ | void OutPortInit(void); //nastavenie portov do pociatocneho stavu - vypnutie/zhasnutie | ||
+ | </code> | ||
+ | |||
+ | ---- | ||
+ | |||
===== Video ===== | ===== Video ===== | ||
Řádek 154: | Řádek 173: | ||
Zadaním bolo realizovať hru Tetris pomocou FRDM-KL25Z a RG LED matice 8x8 s využitím farebnosti matice. Ovládanie bolo realizované pomocou akcelerometra. | Zadaním bolo realizovať hru Tetris pomocou FRDM-KL25Z a RG LED matice 8x8 s využitím farebnosti matice. Ovládanie bolo realizované pomocou akcelerometra. | ||
- | Zadanie sa podarilo splniť v plnom rozsahu. Program bol odladený od drobných chýb takže hra je plne hrateľná, odskúšaná a relatívne náročná na ovládanie, čo jej prídáva na atraktivite. Drobnosti ako skóre, zvyšovanie rýchlosti po dosiahnutí určitej úrovne a podobne neboli pridané. Jednak je matica relatívne malá, takže už po pár segmentoch môže byť pole plne obsadené a ovládanie je už beztak dostatočne náročné, takže nízke skóre skôr odradí. Zato je hra vybavená random generátorom, takže hra je o to viac zaujímavejšia. | + | Zadanie sa podarilo splniť v plnom rozsahu. Program bol odladený od drobných chýb takže hra je plne hrateľná, odskúšaná a relatívne náročná na ovládanie, čo jej prídáva na atraktivite. Drobnosti ako skóre, zvyšovanie rýchlosti po dosiahnutí určitej úrovne a podobne neboli pridané. Jednak je matica relatívne malá, takže už po pár segmentoch môže byť pole plne obsadené a ovládanie je už beztak dostatočne náročné, takže nízke skóre skôr odradí. Zato je hra vybavená random generátorom, takže je o to viac zaujímavejšia. |
- | Malou nevýhodou je, že ak je pri pohybe do vodorovnej polohy s doskou jemne buchnuté, môže akcelerometer zaznamenať vyššiu hodnotu v opačnej osi (viz video 0:20). Riešenie je jednoduché: stačí mať hru vždy vo vzduchu. | + | Malou nevýhodou je, že ak je pri pohybe s doskou jemne buchnuté, môže akcelerometer zaznamenať vyššiu hodnotu v niektorej osi (viz video 0:20), najpravdepodobnejšie v tej, kde je najväčší náklon. Riešenie je jednoduché: stačí mať hru vždy vo vzduchu. |