» elektronika » Arduino »Výroba Tetrisu na Arduino

Výroba Tetrisu na Arduino

pozdravy obyvateľov našej stránky!
Dnes budeme študovať vnútornosti hry Tetris napísané pod platformou Arduino a matica LED.

Autorom tohto domáceho produktu je AlexGyver, autor kanála YouTube s rovnakým názvom. Vitajte v nádhernom svete štvorcových pixelov.

Začnime príbehom. Tetris je hra, v ktorej postavy pozostávajúce zo 4 štvorcov padajú zhora nadol. V rôznych kombináciách sa tieto tvary môžu otáčať a posúvať doľava a doprava. Cieľom hry je zhromaždiť vodorovné úrovne, ktoré sú vyčistené a body vám budú pridelené. Strata sa považuje za okamih, keď nová postava nemá kam klesať. Tetris vynašiel sovietsky programátor Alexej Leonidovič Pazhitnov.

Pôvodná verzia Pascalu sa objavila 6. júna 1984. Od tej doby prešiel Tetris dlhou cestou a bol portovaný na všetky platformy, na ktorých je všeobecne možné hrať hry, ako aj na zariadenia, ktoré nie sú určené vôbec pre hry, ako je napríklad technická kalkulačka, osciloskop a neveríte, spájkovačka.



Podľa počtu predaných komerčných verzií je Tetris lepšia ako ktorákoľvek iná hra v histórii ľudstva. Iba pre jedného herného chlapca sa predalo 35 miliónov kópií, nehovoriac o prenosnej tehlovej hre, ktorú mali takmer všetci naraz.
Začneme s implementáciou tetrisu na arduino a farebnú maticu s analýzou „barlí“. Matica pozostáva z trojfarebných adresných LED. Problém s týmto typom matrice je v tom, že je príliš cool. Farba každého pixelu je kódovaná 24 bitmi, tj 8 bitmi pre každú zložku: červenou, zelenou a modrou. Neexistujú žiadne také údaje o arduino, existuje nasledujúci - 32 bitov.

Farby všetkých LED by mali byť uložené v RAM, pretože ich zmeníme. A navyše, pre maticu 16 x 16 máme presne 1 KB obsadenej dynamickej pamäte a arduino nano má iba 2 z nich.

Pridajte niekoľko ďalších knižníc a začnite písať kód, pamäť sa skončí. Autor v zásade nepoužíva napríklad arduino mega, kde je viac pamäte. Cieľom je urobiť hru na arduino nano pomocou jednoduchých, štandardných a známych nástrojov, ale zároveň neštandardných prístupov a „bariel“ a pomocou nich dosiahnuť čo najoptimálnejší kód.

Prvou „barlou“ bude odmietnutie oddeleného uloženia pozícií čísiel a vo všeobecnosti všetko, čo sa deje na obrazovke.Potrebujeme uložiť súradnice bodov podávacieho čísla a súradnice bodov už vynechaných čísiel, čo je maximum, potrebujeme ďalšie 1 pole, dvojrozmerné 16 x 16, čo je až 256 bajtov.

Vy a ja už máme škálu farieb pre všetky pixely, používajme ich. V skutočnosti, okrem skutočnosti, že môžeme dať na maticu farebnú bodku, môžeme zmerať svetlo existujúceho bodu, takže pracujeme s farbami.

Tetris začína padajúcim blokom, ktorý je ovládaný tlačidlami a má 2 súradnice v maticovom súradnicovom systéme. Je to veľmi jednoduché, zostavujeme časovač, podľa ktorého blok padne. Toto je knižnica autora, ktorú si môžete prečítať na webe.

Na spracovanie tlačidiel autor používa aj svoju knižnicu. Schéma zapojenia tlačidiel je smiešne jednoduchá: 4 tlačidlá, 8 vodičov.

Každým krokom časovača nakreslíme bod pod pixel starý bod a čierny bod, tj zhasne LED. Kliknutím na tlačidlo urobíme to isté, ale s vodorovnou súradnicou. Pre slušnosť obmedzíme veľkosť matice tak, aby bod neprekročil pole.

Vidíte, nič komplikované. Nie je to však dlho, pretože nastal čas na kreslenie čísel. Budeme pracovať nasledovne: zachováme odkaz na dodávateľské miesto, ktoré sme už napísali, nazývame ho hlavným bodom alebo hlavným blokom. Hlavný blok sa pohybuje v maticovom súradnicovom systéme, už sme to urobili. Všetky postavy Tetrisu pozostávajú zo 4 blokov, a preto sa mimochodom nazýva Tetris.

Zostáva nám teda dokončiť pridávanie ďalších 3 blokov do hlavného bloku. Napíšeme ich súradnice v súradnicovom systéme hlavného bloku tak, aby bol hlavný blok vždy pod. Je to veľmi jednoduché, vezmite obrázok obráteného písmena T. Hlavný blok zdola do stredu má súradnice 0,0 vo svojom súradnicovom systéme.

Horný blok je 0,1, pravý je 1,1 a ľavý je -1,1.

Vezmite písmeno G. Dolný blok je 0,0, nasledujúci 0,1, nasledujúci 0,2 a okraj listu 1.2.

Tieto súradnice zapíšeme do poľa v nasledujúcej podobe: {0,1, 0,2, 1,2} a vložíme pole do pamäte Flash, aby sme nestratili dynamickú pamäť. Pokiaľ ide o rotáciu obrázkov. Nie je možné otáčať čísla. Je banálne, že je veľmi ťažké vysvetliť mikrokontroléru, ako to urobiť. Ak to chcete urobiť, musíte nastaviť stred rotácie, nejakým spôsobom rozložiť obrázok na časti a hľadať nové súradnice pre každú časť, berúc do úvahy silnú pixeláciu, ktorá samozrejme povedie k chybám a ukáže sa nezmysel. Tento problém je vyriešený veľmi jednoducho, budeme mať v pamäti všetky 4 pozície pre všetky postavy a všetky.

Momentálne zostáva náhodne vybrať číslo čísla a nakresliť ho okolo padajúceho bloku. Tu pre všetky 3 zostávajúce bloky vyberieme súradnice z flash pamäte, preložíme ich do globálnych súradníc matice a rozsvietime LED. Mimochodom, farba je tiež vybraná náhodne zo 6 najjednoduchších a najjasnejších farieb priestoru rgb. Uhol natočenia postavy na začiatku kola je tiež nastavený náhodne, a keď stlačíte tlačidlo hore, jednoducho urobte ďalšiu sadu súradníc, aby ste ju nakreslili a otočili v smere hodinových ručičiek. Pohybovanie tvaru funguje rovnako. Najprv vymažeme obrázok na predchádzajúcej pozícii, to znamená, nakreslite ho čiernou farbou, potom na novej pozícii nakreslíme aktuálnu farbu obrázka. Pri odbočovaní opäť vymažeme starú pozíciu a nakreslíme novú.

Firmvér si môžete stiahnuť na. Budeme analyzovať iba podstatu. Začnime kontrolou ľavej a pravej steny a spodnej časti. Všetko je so spodkom veľmi jednoduché, pozeráme sa na každý krok pádu, základná jednotka dosiahne výšku 0, to nie je ťažké, ale vždy, keď stlačíme ovládacie tlačidlo, musíme zistiť, či sa dotkol najťažší bod tvaru bočných stien matice.

Ak sa dotknete, nepohybujte figúrkou. To isté platí pre rotáciu čísiel. Napríklad, ak nová poloha obrázku presahuje steny, potom je rotácia zakázaná a keďže všetky tvary, ktoré máme, majú rôzne tvary, potom sú extrémne bloky pre nich rôzne. Bolo by možné namaľovať jednotlivé extrémne bloky pre každú postavu, aby sa zjednodušila práca mikrokontroléra, ale je potrebné vziať do úvahy, že na tento účel vynašli.

Všetko je veľmi jednoduché. Ale ďalšia úloha je oveľa zaujímavejšia. Musíme skontrolovať kolízie s blokmi už ležiacimi dole.Keby sme mali pole, ktoré obsahovalo stav všetkých buniek v poli, bolo by to jednoduchšie, ale použijeme pole farieb pre pixely pásky, takže budeme mať najchladnejšiu „barlu“. Aký je skutočný problém. Všetko sa zdá byť jednoduché, zelená postava padne a každý krok pádu, každý posun do strany a každý pokus o otočenie by mali skontrolovať, či postava v novej polohe spočíva na už položených figúrkach. Ak je pre všetky bloky okolitá farba rovnaká ako čierna alebo rovnaká ako farba obrázku, povolíme pohyb v požadovanom smere. Bude to fungovať, kým tvar pod nami nebude mať rovnakú farbu ako padajúci tvar. To je vlastne „barla“: padlý tvar prefarbíme inou farbou. Maľujte nepatrne pre oči, ale viditeľné pre program. Všetko, čo musíte urobiť, je mierne zvýšiť jas aktuálnej farby tvaru a to je všetko.


Postava padla na dno alebo na inú postavu, jej jas sa neznateľne nezvýšil a v novom kole padajúce postavy už nebudú zamieňať svoju farbu so svojou vlastnou, padnú na ňu a budú rovnako pevné, mierne zvyšujú jas.

Mimochodom, keď stlačíte tlačidlo nadol, postava sa ponáhľa vysokou rýchlosťou a zaujme miesto.

Náš Tetris je ponechaný s konečným dotykom, a to horizontálnou kontrolou a čistením naplnených úrovní. Tu je všetko jednoduché. Po zafixovaní postavy v aktuálnom kole sa posunieme pozdĺž čiar a porovnáme farby pixelov s čiernou. Ak v celom riadku nie je jediný čierny pixel, vyčistíme celý riadok.


Zistené čiary sú vyplnené bielou, potom jas postupne klesá na nulu a získa sa animácia. Ďalej sú všetky pixely, počnúc od prvého naplneného riadku až po vrchol, posunuté nadol a počet riadkov, ktoré boli vymazané. Tento proces sa opakuje, až kým neexistujú žiadne dokončené úrovne. Skontrolujeme tiež, či sme dosiahli vrchol, čo znamená stratu. V takom prípade sa zobrazí účet rovný počtu vymazaných úrovní.

Účet sa zobrazuje v číslach, ktoré sa ukladajú do pamäte ako súprava čísel a núl, pomocou ktorých sa potom LED diódy zapínajú alebo vypínajú. Takto vyzerá Tetris v matici adries. Ďakujem za pozornosť. Uvidíme sa skoro!

videa:
10
10
10

Pridajte komentár

    • usmievaťúsmevyxaxaokdontknowyahoonea
      bossškrabanecoklamaťánoáno, ánoútočnýtajomstvo
      ľutovaťtanecdance2dance3odpusteniehelpnápoje
      zastávkapriateliadobrýgoodgoodpíšťalaomdlieťjazyk
      dymtlieskanieCraydeklarovaťvýsměšnýdon-t_mentiondownload
      teplohnevlivýlaugh1MDAstretnutiemoskingnegatívny
      not_ipražená kukuricatrestaťprečítaťvydesiťzdesenievyhľadávať
      posmechthank_youtototo_clueumnikakútnasúhlasiť
      zlýbeeeblack_eyeblum3očervenieťchvastanienuda
      cenzurovanéžartysecret2hroziťvíťazstvoyusun_bespectacled
      shokrešpektlolprevedievitajtekrutoyya_za
      ya_dobryipomocníkne_huliganne_othodiFLUDzákazzavrieť

Odporúčame vám prečítať si:

Ruku pre smartphone ...