Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2015:2048-game

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2015:2048-game [2016/01/15 14:24]
Václav Lízner [Úvod]
2015:2048-game [2016/01/15 15:09] (aktuální)
Václav Lízner [Hardware]
Řádek 5: Řádek 5:
 ===== Úvod ===== ===== Úvod =====
  
-==Vznik hry==+===Vznik hry===
 Hra 2048 vznikla prakticky za jediný víkend. Devatenáctiletý mladík jménem Gabriele Cirulli naprogramoval tuto hru jako školní projekt. Z tohoto nápadu velmi rychle vznikl fenomén a podobně jako v případě Flappy Bird začaly hříčku 2048 během několika dnů hrát desítky milionů hráčů. Hra 2048 vznikla prakticky za jediný víkend. Devatenáctiletý mladík jménem Gabriele Cirulli naprogramoval tuto hru jako školní projekt. Z tohoto nápadu velmi rychle vznikl fenomén a podobně jako v případě Flappy Bird začaly hříčku 2048 během několika dnů hrát desítky milionů hráčů.
  
-==Popis hry==+===Popis hry===
 Cílem hry je spojit čísla dohromady (mocniny 2), s cílem dosáhnout konečného čísla '2048 ' na jednom čtverečku. Cílem hry je spojit čísla dohromady (mocniny 2), s cílem dosáhnout konečného čísla '2048 ' na jednom čtverečku.
-Herní pole je mřížka 4x4 (16 čtverečků),​ je zobrazena na Obr.1. Na začátku hry máte dva čtverce (také nazývané dlaždice) s číslem ​ 2 uvnitř.Když spojíte ​dvě dlaždice se stejným číslem, splynou do nové dlaždice s dvojnásobným číslem, než je původní: 2+2 = 4, 4+4 = 8, ... 1024 1024 = 2048! Chcete-li přesunout dlaždice na herním poli, stačí si vybrat směr (nahoru, dolů, vpravo nebo vlevo). Všechny dlaždice se přesunou zvoleným směrem - efekt sesypání k jedné ​straně. Pokud jsou vedle sebe dvě stejné čísla tak se spojí. V jednom kole se ale čísla mohou spojovat pouze jednou. Např. pokud sesypeme řádek 2 2 2 2 smerem ​doleva, výsledkem bude 4 4 0 0, nikoliv 8 0 0 0. Dalším ​pravidlem ​je že se sesypou nejvyšším číslem směrem ke stěně. Např. řádek 4 4 4 0 se změní na 8 4 0 0 nikoliv na 4 8 0 0. Po sesypání se oběví ​nové číslo 2 na některém ​volných políček. Pokud je herní pole naplněno, hra končí.+Herní pole je mřížka 4x4 (16 čtverečků),​ta je zobrazena na Obr.1. Na začátku hry jsou dva čtverce (také nazývané dlaždice) s číslem ​ 2 uvnitř. ​Pokud se spojí ​dvě dlaždice se stejným číslem, splynou do nové dlaždice s dvojnásobným číslem, než je původní: 2+2 = 4, 4+4 = 8, ... 10241024 = 2048! Chceme-li přesunout dlaždice na herním poli, stačí si vybrat směr (nahoru, dolů, vpravo nebo vlevo). Všechny dlaždice se přesunou zvoleným směrem - efekt sesypání k jedné ​stěně. V jednom kole se ale čísla mohou spojovat pouze jednou. Např. pokud sesypeme řádek 2 2 2 2 směrem ​doleva, výsledkem bude 4 4 0 0, nikoliv 8 0 0 0. Dalším ​pravidlo ​ježe se sesypou ​čísla ​nejvyšším číslem směrem ke stěně. Např. řádek 4 4 4 0 se změní na 8 4 0 0 nikoliv na 4 8 0 0. Po sesypání se objeví ​nové číslo 2 na některém ​volných políček. Pokud je herní pole naplněno, hra končí.
    
-V počítačistačí použít pouze 4 šipky na klávesnici. Na mobilním zařízení s dotykovým displejem přejedeme prstem požadovaným směrem.+V počítači stačí použít pouze 4 šipky na klávesnici. Na mobilním zařízení s dotykovým displejem přejedeme prstem požadovaným směrem.
  
-==Implementace pro RGB displej== +===Implementace pro RGB displej=== 
-Mojím ​záměrem bylo implementovat tuto hru na RGB displej. Na něm ale nejdou ​zobrazovat čísla, proto budou reprezentovány pomocí různých barev. Řízení směru pohybu je řízeno pomocí náklonu displeje (akcelerometru). Všechny pravidla zůstavají ​stejná jako u originální hry.+Mým záměrem bylo implementovat tuto hru na RGB displej ​8x8. Na něm ale nelze zobrazovat čísla, proto budou reprezentovány pomocí různých barev. Řízení směru pohybu je řízeno pomocí náklonu displeje (akcelerometru). Všechna pravidla zůstávají ​stejná jako u originální hry.
  
 {{ :​2015:​2048-game:​ukazka.png?​direct300 |}} {{ :​2015:​2048-game:​ukazka.png?​direct300 |}}
Řádek 23: Řádek 23:
  
 ===== Hardware ===== ===== Hardware =====
-RGB matice LED je zapojena podle obrázku ​níže. Společným kontaktem pro každou RGB LED je anoda. Z toho vyplývá, že matice musí být spínána po řádcích tak, že je přivedeno kladné napětí na společnou anodu jednoho řádku a pomocí ​uzemění jednotlivých katod jsou rozsvěcovány jednotlivé LED.+RGB matice LED je zapojena podle Obr. 1 níže. Společným kontaktem pro každou RGB LED je anoda. Z toho vyplývá, že matice musí být spínána po řádcích tak, že je přivedeno kladné napětí na společnou anodu jednoho řádku a pomocí ​uzemnění jednotlivých katod jsou rozsvěcovány jednotlivé LED.
  
 K řízení RGB displeje nestačil samotný MCU ze dvou důvodů: ​ K řízení RGB displeje nestačil samotný MCU ze dvou důvodů: ​
-1. protože ​má pouze 3,3V logiku, která nestačí k bezepčnému rozsvícení LED (zejména modré) ​  +1. má pouze 3,3V logiku, která nestačí k bezepčnému rozsvícení LED (zejména modré) ​  
-2. každý pin omezený výstupní i vstupní proud na 4mA.+2. každý pin má omezený výstupní i vstupní proud na 4mA
  
-Z toho důvodu bylo potřeba vytvořit HW převodník,​ který převede 3,3V logiku na 5V a současně výkonově posílí výstupní piny. Pro spínání napětí +5V (high switch) ​bylo použito převodníku,​ který tvoří jeden NMOS a jeden PMOS. Pro spínání napětí 0V bylo použito tranzistorového pole ULN2803A. Kompletní zapojení převodníku je na  Obr.2 níže.+Z toho důvodu bylo potřeba vytvořit HW převodník,​ který převede 3,3V logiku na 5V a současně výkonově posílí výstupní piny. Pro spínání napětí +5V bylo použito převodníku ​(high switch), který tvoří jeden NMOS a jeden PMOS. Pro spínání napětí 0V bylo použito tranzistorového pole ULN2803A. Kompletní zapojení převodníku je na  Obr.2 níže.
  
 {{ 2015:​2048-game:​schema.png?​direct900 |}} {{ 2015:​2048-game:​schema.png?​direct900 |}}
Řádek 35: Řádek 35:
  
  
-Rozměr převodníku byl zvolen přesně podle rozměrů RGB matice LED a rozmístění součástek bylo voleno tak, aby se vešel nad kit FRDM-KL25Z. Deska byla vyráběna na ústavu UREL, proto nejsou použity klasické prokovy, místo nich je použito propojení drátkem. Převodník můžeme vidět na Obr.3 níže a soubory k jeho výrobě jsou v příloze ​tohoto dokumentu.+Rozměr převodníku byl zvolen přesně podle rozměrů RGB matice LED a rozmístění součástek bylo voleno tak, aby se vešel nad kit FRDM-KL25Z. Deska byla vyráběna na ústavu UREL, proto nejsou použity klasické prokovy, místo nich je použito propojení drátkem. Převodník můžeme vidět na Obr.3 níže a soubory k jeho výrobě jsou k dispozici zde: {{2015:​2048-game:​prevodnik.rar}}
  
 {{ 2015:​2048-game:​board.jpg?​direct600 |}} {{ 2015:​2048-game:​board.jpg?​direct600 |}}
Řádek 44: Řádek 44:
 ===== Software ===== ===== Software =====
  
-Program byl psán ve vývojovém prostředí www.mbed.org. Celý kód je k dispozici v tomto odkazu https://​developer.mbed.org/​users/​xlizne01/​code/​2048/​+Program byl napsán ​ve vývojovém prostředí www.mbed.org. Celý kód je k dispozici v tomto odkazuhttps://​developer.mbed.org/​users/​xlizne01/​code/​2048/​
  
 === Funkce main === === Funkce main ===
Řádek 67: Řádek 67:
  
 === Funkce akcelerometr === === Funkce akcelerometr ===
-Tato funkce slouží k výpočtu úhlu jakým ​je deska nakloněna a pak pomocí rozhodovacích úrovní MOVE_ANGLE a NULL_ANGLE. Pokud se deska nakloní některým směrem v úhlu větším než MOVE_ANGLE uloží se do proměnné naklon směr náklonu. Pokud je deska v klidové pozicivodorovně se zemí (o tom rozhoduje rozhodovací úroveň NULL_ANGLE) uloží se do proměnné naklon 0.+Tato funkce slouží k výpočtu úhlu, kterým ​je deska nakloněna a pak pomocí rozhodovacích úrovní MOVE_ANGLE a NULL_ANGLE. Pokud se deska nakloní některým směrem v úhlu větším než MOVE_ANGLEuloží se do proměnné naklon směr náklonu. Pokud je deska v klidové pozici vodorovně se zemí (o tom rozhoduje rozhodovací úroveň NULL_ANGLE) uloží se do proměnné naklon 0.
  
 <code c> <code c>
Řádek 115: Řádek 115:
  
 === Funkce pohyb === === Funkce pohyb ===
-Funkce ovládá pohyb desky pomocí proměnné naklon, v které je uložena aktuální poloha desky. Aby došlo při pohybu na jednu stranu jen k jednomu posunu musí se pak deska vždy vrátit do nulové pozice. K tomu slouží pomocná proměnná p.+Funkce ovládá pohyb desky pomocí proměnné naklon, v které je uložena aktuální poloha desky. Aby došlo při pohybu na jednu stranu jen k jednomu posunumusí se deska vždy vrátit do nulové pozice. K tomu slouží pomocná proměnná p.
 Pokud dojde k pohybu desky, je zavolána funkce sesypej() Pokud dojde k pohybu desky, je zavolána funkce sesypej()
  
Řádek 319: Řádek 319:
  
 === Funkce zobrazeni === === Funkce zobrazeni ===
-Funkce řídí zobrazování dat na RGB matici, v původním návrhu mělo být použito PWM, ale později bylo zjištěno, že PWM nwfungují ​nezávisle a z této možnosti sešlo. Proto bylo vytvořeno SW řízení svítivosti jednotlivých LED. Herní pole je rozděleno na 4 řádky a 4 sloupce a je tedy spíná ​v 16 krocích. V jendom ​kroku je pak řízena svítivost čtyřech RGB LED. Jakou barvou bude čtverec svítit určije určuje ​funkce barva().+Funkce řídí zobrazování dat na RGB matici, v původním návrhu mělo být použito PWM, ale později bylo zjištěno, že PWM nefungují ​nezávisle a z této možnosti sešlo. Proto bylo vytvořeno SW řízení svítivosti jednotlivých LED. Herní pole je rozděleno na 4 řádky a 4 sloupce a je tedy spínáno ​v 16 krocích. V jednom ​kroku je pak řízena svítivost čtyř RGB LED. Jakou barvou bude čtverec svítiturčí funkce barva().
  
 <code c> <code c>
Řádek 549: Řádek 549:
  
 ===== Video demostrace hry 2048 ===== ===== Video demostrace hry 2048 =====
-Ve video můžeme vidět krátkou ukázku ze hry. Můžeme vidět, že funguje pohyb různýmy směry. Správně funguje sesypání i spojování,​ podle logiky hry 2048. Bohužel je také vidět, že nesvítí jedna červená LED, která byla odpálena při HW testování RGB matice. Funkčnost hry to ale skoro nesnižuje, protože svítí ještě okolní 3 body a jde jasně poznat o jakou barvu se jedná.+Ve videu můžeme vidět krátkou ukázku ze hry. Vidíme, že funguje pohyb různýmy směry, správně funguje sesypání i spojování,​ podle logiky hry 2048. Bohužel je také vidět, že nesvítí jedna červená LED, která byla odpálena při HW testování RGB matice. Funkčnost hry to ale téměř ​nesnižuje, protože svítí ještě okolní 3 body a lze jasně poznat o jakou barvu se jedná.
  
 {{ youtube>​xT-M1Xiw78E?​medium }} {{ youtube>​xT-M1Xiw78E?​medium }}
Řádek 557: Řádek 557:
 ===== Závěr ===== ===== Závěr =====
 Cílem projektu bylo realizovat hru 2048 s pomocí kitu FRFM-25Z a RGB matice LED. Řízení pohybu mělo být provedeno pomocí akcelerometru. ​ Cílem projektu bylo realizovat hru 2048 s pomocí kitu FRFM-25Z a RGB matice LED. Řízení pohybu mělo být provedeno pomocí akcelerometru. ​
-Všechny body zadání se podařily splnit a hra je plně funkční. ​Nejvetším nedostatkem je podle mě nedostatečně kvalitní RGB matice, která nezobrazuje úplně věrohodně jednotlivě barvy a josu stále vidět jednotlivé LED uvnitř jedné LED. Tento nedostatek byl částečně vyřešen přidáním rozptylovací fólie z LCD monitoru ​zhora na matici. +Všechny body zadání se podařilo splnit a hra je plně funkční. ​Největším nedostatkem je podle mě nedostatečně kvalitní RGB matice, která nezobrazuje úplně věrohodně jednotlivě barvy a jsou stále vidět jednotlivé LED uvnitř jedné ​RGB LED. Tento nedostatek byl částečně vyřešen přidáním rozptylovací fólie z LCD monitoru ​shora na matici. 
-U hry se neprojevují žádné chyby a je dobře hratelná. Já osobně jsem strávil jejím hraním dost času a podařilo se mi dostáhnou ​i čísla 2048, tedy jasně bílé barvy :)+U hry se neprojevují žádné chyby a je dobře hratelná. Já osobně jsem strávil jejím hraním dost času a podařilo se mi dosáhnout ​i čísla 2048, tedy jasně bílé barvy :)
  
2015/2048-game.1452864275.txt.gz · Poslední úprava: 2016/01/15 14:24 autor: Václav Lízner