» elektronika » Arduino »Tetris készítése az Arduinón

Tetris készítése az Arduino-n

Üdvözlet webhelyünk lakói!
Ma megvizsgáljuk a Tetris játék belső oldalát Arduino és LED-mátrix.

A házi készítésű termék szerzője AlexGyver, az azonos nevű YouTube-csatorna szerzője. Üdvözöljük a négyzet alakú képpontok csodálatos világában.

Kezdjük a történettel. A Tetris egy olyan játék, amelyben a négy négyzetből álló számok felülről lefelé esnek. Különböző kombinációkban ezek az alakzatok elforgathatók és balra és jobbra mozgathatók. A játék célja az, hogy összegyűjtse azokat a vízszintes szinteket, amelyek törlődnek, és pontokat kapnak neked. A veszteséget abban a pillanatban tekintik, amikor az új szám sehova nem esik. A Tetris-t a szovjet programozó, Aleksej Leonidovics Pazhitnov találta ki.

Az eredeti Pascal verzió 1984. június 6-án jelent meg. Azóta a Tetris hosszú utat tett meg, és minden olyan platformon át lett hordozva, amelyeken általában játék lehetséges, valamint olyan eszközökre, amelyeket egyáltalán nem szántak játékokra, például egy mérnöki számológép, oszcilloszkóp és - nem fogod elhinni - forrasztópáka.



Az eladott kereskedelmi verziók száma szerint a Tetris jobb, mint az összes többi játék az emberiség történetében. Csak egy Game Boy számára 35 millió példányt adtak el, nem is beszélve a hordozható Brick Game-ről, amely szinte mindegyik egyszerre volt.
A „mankók” elemzésével megkezdjük a tetris arduino és a színes mátrix alkalmazását. A mátrix háromszínű cím LED-ekből áll. Az ilyen típusú mátrix problémája az, hogy túl hideg. Az egyes pixelek színe 24 bittel van kódolva, azaz 8 bit minden komponensre: piros, zöld és kék. Az arduino-n nincs ilyen típusú adat, a következő - 32 bit.

Az összes LED színét RAM-ban kell tárolni, mivel megváltoztatjuk őket. Ezen túlmenően egy 16-16 mátrix esetén pontosan 1 KB elfoglalt dinamikus memóriával rendelkezik, és az arduino nano-nak csak kettőük van.

Adjon hozzá még néhány könyvtárat és kezdje el írni a kódot, a memória véget ér. A szerző alapvetően nem használja például az arduino mega-t, ahol több memória van. A cél az, hogy a játékot kifejezetten arduino nano-on készítsék, egyszerű, szabványos és jól ismert eszközökkel, de ugyanakkor a nem szabványos megközelítésekkel és „mankókkal”, és ezek segítségével elsajátítják a legoptimálisabb kódot.

Az első „mankó” az lesz, hogy megtagadjuk, hogy a memóriában külön tároljuk a figurák helyzetét és általában mindent, ami a képernyőn történik.Tárolnunk kell a betáplálási ábra pontjainak koordinátáit és a már leesett számok pontjainak koordinátáit, vagyis maximálisan további 1 tömbre van szükségünk, kétdimenziós 16-ra 16-ra, ez 256 bájt.

Te és én már mindenféle képponttal rendelkezünk egy színskálával, használjuk. Valójában amellett, hogy egy színes pontot helyezhetünk a mátrixra, megmérhetjük egy létező pont fényét is, hogy a színekkel dolgozzunk.

A Tetris egy leeső mondattal kezdődik, amelyet gombok irányítanak, és a mátrix koordinátarendszerében 2 koordinátával rendelkezik. Nagyon egyszerű, egy időzítőt építünk fel, amely szerint a blokk esni fog. Ez a szerző könyvtára, elolvashatja az oldalon.

A gombok feldolgozására a szerző könyvtárat is használja. A gombok csatlakoztatási rendje nevetségesen egyszerű: 4 gomb, 8 vezeték.

Az időzítő minden lépésénél egy pontot rajzolunk egy pixelt a régi alá, és a régi pontot feketével rajzoljuk, vagyis kapcsoljuk ki a LED-et. A gombra kattintva ugyanezt tesszük, de vízszintes koordinátával. Nos, az tisztesség kedvéért korlátozjuk a mátrix méretét, hogy a pont ne haladja meg a mezőt.

Lásd, semmi bonyolult. De ez nem sokáig, mert eljött az idő, hogy számokat készítsünk. Az alábbiak szerint fogunk dolgozni: megtartjuk az ellátási pontra való hivatkozást, amelyet már írtunk, vagy főpontnak vagy fő blokknak nevezzük. A fő blokk a mátrix koordinátarendszerben mozog, ezt már megtettük. A Tetris összes alakja 4 blokkból áll, ezért ezt egyébként Tetrisnek hívják.

Ennek megfelelően továbbra is a 3 további blokk hozzáadása a fő blokkhoz marad. Írjuk a koordinátájukat a fő blokk koordináta rendszerébe, hogy a fő blokk mindig az alatt legyen. Nagyon egyszerű, vegye fel a fordított T betű alakját. Az alsó és a középső fő blokk koordinátáinak rendszerében 0,0 koordináták vannak.

A felső blokk 0,1, a jobb 1,1 és bal a -1,1.

Vegye le a G betűt. Az alsó blokk 0,0, a következő 0,1, a következő 0,2 és az 1.2 betű széle.

A következő formában írjuk be ezeket a koordinációkat a tömbbe: {0.1, 0.2, 1.2}, és dobjuk a tömböt a flash memóriába, hogy ne pazaroljuk a dinamikus memóriát. Ami az ábra forgását illeti. A számok elforgatása lehetetlen. Nagyon nehéz megmondani a mikrovezérlőnek, hogyan kell ezt megtenni. Ehhez be kell állítania a forgatás középpontját, valahogy részre bontani az ábrát részekre, és az egyes képpontokra új koordinátákat kell keresnie, figyelembe véve az erős pixelációt, ami nyilvánvalóan hibákat eredményez, és ostobasá válik. A problémát nagyon egyszerűen oldják meg, mind a négy pozíciót megtartjuk a memóriában mind az összes ábra, mind az összes esetében.

Valójában most véletlenszerűen választja ki az ábra számát, és rajzolja a csökkenő blokk körül. Itt mind a három fennmaradó blokkhoz a flash memóriából vesszük a koordinátákat, lefordítjuk azokat a mátrix globális koordinátáira és bekapcsoljuk a LED-eket. Mellesleg, a színt véletlenszerűen választják ki az RGB tér 6 legegyszerűbb és fényesebb színéből. Az ábra forgásszöge a kör elején szintén véletlenszerűen van beállítva, és amikor felnyomja a gombot, akkor csak vegye a következő koordinátakészletet, hogy rajzolja és elforgassa az óramutató járásával megegyező irányban. Az alak mozgatása ugyanúgy működik. Először töröljük az ábrát az előző helyzetből, vagyis rajzoljuk feketével, majd az új helyzetbe rajzoljuk meg az ábra aktuális színét. Forduláskor ismét töröljük a régi helyzetet, és csak rajzolunk egy újat.

A firmware letölthető a következő webhelyről:. Csak a lényegét elemezzük. Kezdjük azzal, hogy ellenőrizzük a bal és a jobb falat és az alját. Az aljjal nagyon egyszerű, megnézünk minden esési lépést, az alapegység elérte-e a 0 magasságot, ez nem nehéz, de minden alkalommal, amikor megnyomjuk a vezérlőgombot, meg kell vizsgálnunk, hogy a mátrix oldalfalainak szélső pontja megérint-e.

Ha megérinti, ne mozgassa az alakot. Ugyanez vonatkozik a számok forgatására. Például, ha az ábra új pozíciója túlmutat a falakon, akkor a forgatás tilos, és mivel az összes alakunk különböző alakú, akkor a szélső blokkok mind különböznek. A mikrokontroller munkájának egyszerűsítése érdekében az egyes figurákhoz különálló szélsőséges blokkokat lehet festeni, de vegye figyelembe, hogy ezek ezt találták ki.

Minden nagyon egyszerű. De a következő feladat sokkal érdekesebb. Ellenőriznünk kell az ütközést olyan blokkokkal, amelyek már az alábbiakban fekszenek.Ha lenne olyan tömbünk, amely tartalmazza a mező összes cellájának állapotát, akkor könnyebb lenne, de a szalag pixeleihez színskálát fogunk használni, tehát a legmenőbb „mankó” lesz. Mi a tényleges probléma? Úgy tűnik, hogy minden egyszerű, egy zöld ábra esik, és ellenőriznünk kell az esés minden lépését, minden oldalirányú eltolódást és minden fordulási kísérletet, hogy az új helyzetben lévő ábra a már fekvő figurákkal szemben áll-e. Ha az összes blokknál a környező szín megegyezik a fekete vagy az ábra színével, akkor megengedjük a kívánt irányba történő mozgást. Ez addig fog működni, amíg alatta lévő alak azonos színű, mint a zuhanó alak. Valójában ez a „mankó”: az elesett alakzatot más színűre festjük át. A szem számára észrevétlenül újrafestik, a programnál azonban észrevehetően festenek. Csak annyit kell tennie, hogy kissé növeli az alak jelenlegi színének fényerejét, és ennyi is.


Az alak az aljára esett, vagy egy másik alak, fényereje nem nőtt észrevehetően, és az új körben a leeső figurák már nem keverik össze a színét a sajátjával, ráesnek és ugyanúgy rögzíthetők, kissé növelik a fényerőt.

Mellesleg, amikor lenyomja a gombot, az alak nagy sebességgel lerohan és helyére kerül.

Tetrisünk végső érintése, azaz a kitöltött szintek vízszintes ellenőrzése és törlése marad. Itt minden egyszerű. Miután rögzítettük az ábrát az aktuális körben, a vonalak mentén mozogunk, és a képpontok színét összehasonlítjuk a fekete színtel. Ha a teljes sorban egyetlen fekete pixel sem található, akkor a teljes sort töröljük.


Az észlelt vonalakat fehéren töltik meg, majd a fényerő fokozatosan nullára csökken, és megkapja az animációt. Ezenkívül az összes pixelt az első kitöltött vonaltól a tetejéig kezdve eltolják és a törölt sorok számát lefelé tolják. Ezt a folyamatot addig ismételjük, amíg nincsenek teljes szintek. Azt is ellenőrizzük, hogy elértük-e a csúcsot, ami azt jelenti, hogy elveszítjük. Ebben az esetben egy olyan számla jelenik meg, amely megegyezik a törölt szintek számával.

A számla számokkal jelenik meg, amelyeket a memóriában egységekként és nullákként tárolnak, amellyel a LED-ek be- vagy kikapcsolnak. Így néz ki a Tetris a címmátrixba írva. Köszönöm a figyelmet. Találkozunk hamarosan!

videók:
10
10
10

Adj hozzá egy megjegyzést

    • smilemosolyogxaxarendbendontknowjehunea
      főnökkarcolásbolondigenigen-igenagresszívtitok
      Bocsánattáncdance2dance3megbocsátássegítségitalok
      megállásbarátokjógoodgoodsípájulásnyelv
      füsttapsolóCrayállapítsagúnyosdon-t_mentionletöltés
      hőségingerültlaugh1MDAtalálkozómoskingnegatív
      not_ipopcornbüntetolvasmegijesztijesztkeresés
      gúnyolódásthank_youeztto_clueumnikakutegyetért
      rosszbeeeblack_eyeblum3pírdicsekvésunalom
      cenzúrázottvidámságsecret2fenyegetgyőzelemyusun_bespectacled
      ShokRespektlolprevedfogadtatáskrutoyya_za
      ya_dobryisegítőne_huliganne_othodiFLUDtilalomközel

Azt javasoljuk, hogy olvassa el:

Adja át az okostelefon számára ...