Zadání 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

Úlohy můžete řešit v libovolném pořadí a samozřejmě je nemusíte vyřešit všechny. Počet bodů za každou úlohu je uveden přímo v jejím zadání. Hodnotí se shoda se zadáním, funkčnost, dodržování webových standardů a přehlednost zdrojového kódu.

Na řešení úloh máte 4 hodiny čistého času.

Vaše řešení nahrávejte do cloudu přístupného na adrese https://svp.proed.cz/

Přihlašovací jméno a heslo jste dostali emailem. Po přihlášení uvidíte složku odpovídající vašemu přihlašovacímu jménu (např. X123) a do ní řešení uložte. Pokud je řešení jedné úlohy složeno z více souborů, doporučujeme je nenahrávat samostatně, ale jako jeden ZIP archiv, jehož jméno odpovídá názvu úlohy (uloha-xyz.zip).

Vaše řešení musíte nahrát do 13:00, pozdější nahrání souborů nebude možné. Doporučujeme proto řešení nahrát s několikaminutovou rezervou. Pokud ve vaší kategorii řešíte více úloh, je vhodné každou úlohu nahrát hned, jak ji dokončíte.

Nahrávejte jak zdrojové kódy vašeho řešení, tak zkompilované spustitelné soubory (pokud to ve vámi používaném programovacím jazyce dává smysl).

Kompletní řešení každé úlohy (soubory HTML, CSS, obrázky, Javascript) uložte do samostatného podadresáře nazvaného jménem úlohy (např. semafor). Stránku s řešením vždy pojmenujte index.html a uložte v kódování UTF-8.

Při zápisu HTML a CSS kódu dodržujte webové standardy. Řešení by mělo fungovat ve všech běžně dostupných prohlížečích.

Při řešení můžete používat frontendové technologie HTML, CSS a JavaScript. Všechny zdrojové kódy musíte napsat sami v průběhu soutěže. Řešení úlohy smí využívat pouze běžně dostupná API současných webových prohlížečů. Preprocesory zdrojového kódu (jako např. Babel, Typescript, Sass, Less, …) jsou povoleny, odevzdávejte pak jak vámi napsaný vstupní kód, tak i vygenerovaný výsledek. Snažte se, aby vygenerovaný výsledek co nejlépe odpovídal zdrojovému souboru, neprovádějte minifikaci nebo obfuskaci.

Není povoleno používat knihovny, frameworky nebo kompilátory, které vyžadují runtime podporu prohlížeče (např. jQuery, Bootstrap, React, mono-wasm, …). Zdůrazňujeme, že stejně jako v minulých letech je zakázáno používat jQuery.


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.


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ů.