Hodnocení soutěžních úloh

Kategorie programování webu

22. dubna 2021

Soutěž v programování – 34. ročník

Krajské kolo 2020/2021

Semafor
Hra 2048

Semafor

Semafor pro automobily jistě znáte. Vaším úkolem je vytvořit webovou stránku, která bude takový semafor zobrazovat, a to jako obdélník, který obsahuje nad sebou tři barevná kruhová světla — shora postupně červené, oranžové a zelené. Obdélník semaforu na výšku zabírá celou viditelnou plochu prohlížeče. Zhasnuté světlo zobrazte buď černou barvou, nebo velmi tmavou červenou/oranžovou/zelenou (s malým jasem). Rozsvícené světlo naopak zobrazujte s plným jasem.

Po načtení stránky bude na 5 sekund svítit zelené světlo, pak tři vteřiny svítí oranžové světlo, následně bude 5 sekund svítit červená, pak jednu sekundu červená a oranžová zároveň a následně se celý cyklus opakuje (5 sekund zelená …). Tedy stejně jako na skutečném semaforu, jen čas pro červený a zelený signál jsme v zadání trochu zkrátili.

Při řešení této úlohy není dovoleno používat JavaScript. Musíte si vystačit s HTML a CSS.

Hodnocení

Nehodnotíme estetičnost provedení, pouze shodu se zadáním.

Časy trvání jednotlivých stavů by neměly být ve zjevném rozporu se zadáním (±20%)

Úlohu lze snadno vyřešit pomocí CSS animací a přechodů

Body Za co
1 Grafické vyobrazení semaforu odpovídá zadání
1 Semafor zabírá na výšku celou plochu okna prohlížeče
1 Při změně velikosti okna prohlížeče se změní i velikost semaforu, tak aby opět na výšku zabíral celou plochu
3 Posloupnost signálů a jejich časování odpovídá zadání (za každý chybně zobrazený či chybně trvající stav odečíst 1 bod ze tří)
Body neudělujte, pokud je pro animaci použit Javascript

Hra 2048

Vytvořte stránku s hrací plochou pro hru 2048 a následně hru naprogramujte.

Hrací plocha

Kromě samotného herního plánu na stránce hry zobrazte aktuální a nejlepší skóre a 10 nejlepších výsledků. Následující obrázek slouží jako inspirace toho, jak přibližně by na stránce měly být jednotlivé prvky rozmístěny.

Příklad hrací plochy

Stránku vytvořte tak, aby byla responzivní a šlo ji zobrazit i na zařízeních s menším displejem jako je mobilní telefon. V tom případě hrací políčka 4×4 zabírají celou šíři okna prohlížeče a tabulka s výsledky se odsune na konec stránky.

Pravidla hry

Hra 2048 se hraje na herním plánu, který je tvořen 4×4 čtvercovými políčky. Na čtvercových políčkách mohou být dlaždice s čísly, jejichž hodnoty jsou mocniny 2 – od 2 až do 2048 (211).

V každém tahu se určí směr posunu dlaždic (nahoru, dolů, doleva, doprava).

Konečná pozice a sloučení dlaždic na konci tahu je dáno následujícími pravidly:

Po každém tahu se náhodně na některém z volných čtverců vygeneruje nová dlaždice s číslem 2 nebo 4. Zda je to 2 nebo 4 je také náhodné.

Ukázka základního pohybu
Spojování více dlaždic v jednom řádku

Posun dlaždic lze provést buď

Na začátku hry se vygenerují na náhodných pozicích dvě dlaždice s hodnotou 2.

Cíl hry

Cílem hry je posunovat dlaždice po hracím plánu tak, aby vznikla dlaždice s číslem 2048. V tomto případě hra končí výhrou.

Pokud nelze provést tah (tj. neexistuje žádný směr posunu, při kterém by se mohla posunout aspoň jedna dlaždice), hra končí prohrou.

Skóre hry je dáno celkovým součtem čísel na všech dlaždicích.

Jak hra funguje si můžete vyzkoušet na adrese https://2048game.com/.

Úkoly

  1. Vytvořte stránku s jednotlivýmu prvky herní plochy. Do tabulky s výsledky na začátku vložte smyšlené výsledky s body 1 až 10.
  2. Vygenerujte první dvě dlaždice.
  3. Určení směru posunu dlaždic zajistěte pomocí klávesových šipek.
  4. Určení směru posunu dlaždic zajistěte pomocí 4 tlačítek Nahoru, Dolů, Vlevo a Vpravo.
  5. Určení směru posunu dlaždic zajistěte pomocí tažení myši (levé tlačítko), podle toho, zda je delší vodorovný nebo svislý směr.
  6. Určení směru posunu dlaždic zajistěte tažením prstu. (Na počítačích bez dotykové obrazovky můžete tuto funkci zkoušet a ladit pomocí vývojářských nástrojů a funkce Device Toolbar – viz. např. https://jecas.cz/testovani-mobily.)
  7. Průběžně zobrazujte stav skóre.
  8. Přidejte animaci posunu dlaždic.
  9. Přidejte animační efekt při sloučení dlaždic.
  10. Program dokáže poznat konec hry (výhru i prohru) a zobrazí tento stav.
  11. Pokud je po skončení hry získané skóre hry vyšší než nejvyšší skóre, aktualizuje se nejvyšší dosažené skóre.
  12. Pokud je po skončení hry získané skóre hry vyšší než skóre v tabulce výsledků, aktualizují se výsledky v tabulce.
  13. Jméno hráče lze zadat kdykoliv v průběhu hry.
  14. Umožněte vrátit libovolný počet tahů zpět pomocí tlačítka Krok zpět.
  15. Novou hru lze kdykoliv zahájit stiskem tlačítka Nová hra. Pokud se nová hra zahájí v průběhu hry, tak se neaktualizují nejvyšší skóre a tabulka s výsledky.
  16. Umožněte přehrát celou hru ze záznamu a zadat délku pauzy mezi jednotlivými tahy. Funkci přehrání je možné vyvolat i v průběhu hry.
  17. Tabulku s výsledky a nejvyšší skóre si stránka pamatuje, i když se mezitím vypne a znovu nastartuje prohlížeč.
  18. Přehrát lze libovolnou hru uloženou v tabulce výsledků.

Na konci stránky zdokumentujte, které z předchozích úkolů jste vyřešili. Stačí vypsat čísla jednotlivých úkolů.

Hodnocení

Body Za co
1 Stránka obsahuje herní plán 4×4
1 Stránka obsahuje ovládací tlačítka
1 Stránka obsahuje tabulku s deseti nejlepšími výsledky a je v ní něco vyplněno
1 Stránka je responzivní a na užších displejích se tabulka s výsledky přesune na konec stránky
1 Stránka je responzivní a na užších displejích zabírá hrací plán 4×4 celou šířku okna prohlížeče
1 Na začátku hry se správně vygenerují první dvě dlaždice
1 Program lze ovládat pomocí klávesových šipek
1 Program lze ovládat pomocí tlačítek na stránce
1 Program lze ovládat pomocí myši
1 Program lze ovládat tažením prstu (lze testovat pomocí Device Toolbaru ve vývojářských nástrojích, stisknutá myš se pak chová jako prst)
5 Program správně dodržuje pravidla posunu dlaždic (např. 4444 -> 0088), za každou zjištěnou anomálii strněte jeden bod
1 Program správně a průběžně počítá a zobrazuje skóre
1 Dlaždice se při posunu animují
1 Dlaždice se při sloučení animují
1 Program rozpozná správně konec hry a zobrazí o tom informaci
1 Po skončení hry se aktualizuje nejvyšší dosažené skóre
2 Po skončení hry se aktualizuje tabulka s výsledky
1 Do tabulky s výsledky se zapisuje jméno zadané do vstupního pole na stránce
5 Program umožňuje vrácení libobolného počtu tahů zpět
1 Stiskem tlačítka lze zahájit novou hru po skončení předchozí
1 Stiskem tlačítka lze zahájit novou hru kdykoliv během té současné a neaktualizují se přitom nejlepší výsledek a tabulka s výsledky
2 Program umožňuje přehrát partii hry od začátku
1 Při přehrávání lze měnit délku pauzy mezi tahy
1 Funkci přehrání lze vyvolat i během rozehrané hry
1 Nejvyšší dosažené skóre si stránka pamatuje i po restartu prohlížeče.
4 Tabulku s výsledky si stránka pamatuje i po restartu prohlížeče.
1 Lze přehrát i libovolnou hru z tabulky výsledků