Zpětné PRD: Tetris
Status dokumentu: finální zpětný popis aktuálně implementované verze
Verze dokumentu: 1.0
Datum: 2026-05-22
Produkt: webová hra Tetris v boardu Tetris
Primární zdroj pravdy: /home/vmubuntu/www/tetris/index.html
1. Účel dokumentu
Tento dokument zpětně popisuje už implementovanou webovou hru Tetris tak, jak se aktuálně chová v produkčním artefaktu. Není to návrh nové verze produktu. Pokud není něco přímo ověřené ve zdrojovém souboru nebo v předaných handoffech, je to výslovně označeno jako omezení nebo otevřená otázka.
2. Stručné shrnutí produktu
Produkt je single-page webová hra Tetris implementovaná v jednom HTML souboru s vloženým CSS a JavaScriptem. Hráč skládá padající tetromina do pole 10×20, čistí celé řádky, získává skóre a postupně zvyšuje level i rychlost pádu. Hra obsahuje náhled dalšího dílku, ghost projekci dopadu, klávesové i dotykové ovládání, pauzu a restart.
3. Cílový uživatel
Primární uživatel je běžný návštěvník webu, který si chce rychle zahrát jednoduchý Tetris přímo v prohlížeči bez instalace a bez registrace.
Prakticky to znamená: - okamžitý start bez onboarding toku, - použitelnost na desktopu i mobilu, - srozumitelné viditelné ovládání v UI, - krátké herní session.
4. Platforma a technický kontext
- Platforma: webový prohlížeč
- Distribuce: veřejná stránka
/tetris/ - Implementace: single-file HTML/CSS/vanilla JavaScript
- Vykreslení hry:
canvas - Herní smyčka:
requestAnimationFrame - Jazyk UI: čeština
- Layout: responzivní dvousloupcový desktop layout, jednosloupcový mobilní layout
5. Hlavní uživatelský flow
5.1 Vstup do hry
- Uživatel otevře stránku Tetris.
- Vidí titul, hrací plochu, overlay „Připraveno“, tlačítko Start, statistiky, náhled dalšího dílku a přehled ovládání.
- Hru spustí přes tlačítko Start nebo klávesu Enter.
5.2 Aktivní hra
- Po spuštění začne padat aktivní dílek.
- Uživatel dílek posouvá, rotuje, zrychluje pád nebo provede hard drop.
- Po dosednutí dílku se obsazené buňky sloučí do pole.
- Pokud se zaplní celý řádek, řádek se odstraní a hráč získá body.
- Po dosažení dalších deseti vyčištěných řádků se zvýší level a zkrátí interval automatického pádu.
5.3 Pauza a konec
- Uživatel může během hry přepnout pauzu.
- Pokud nový dílek nelze vložit do pole, hra skončí stavem „Konec“.
- Po game over lze hru restartovat.
6. Herní pole a dílky
6.1 Hrací pole
- Pole má 10 sloupců a 20 řádků.
- Každá buňka má velikost 30 px v interní canvas mřížce.
- Prázdná buňka je reprezentována hodnotou
0.
6.2 Podporované tvary
Hra používá standardních 7 tetromin: - I - J - L - O - S - T - Z
6.3 Randomizace dílků
Pořadí dílků je generováno 7-bag randomizerem: - když se bag vyprázdní, vytvoří se nová sada všech sedmi typů, - sada se promíchá, - dílky se postupně odebírají z bagu.
Důsledek: hra nepoužívá čistě náhodný nekonečný výběr s možností velmi dlouhých streaků stejného nedostatku dílku.
7. Herní mechaniky
7.1 Spawn dílku
- Aktivní dílek se objevuje nahoře nad viditelnou oblastí (
y = -1). - Horizontální pozice se centrovaně odvozuje od šířky matice dílku.
- Současně se udržuje i
nextdílek pro náhled.
7.2 Kolize
Kolize nastává když by aktivní dílek: - překročil levý okraj, - překročil pravý okraj, - překročil spodní okraj, - narazil do už zapsaných buněk herního pole.
7.3 Pohyb
Hráč může aktivní dílek posouvat doleva a doprava, pokud cílová pozice nekoliduje.
7.4 Soft drop
- Soft drop je realizován stejnou funkcí jako běžný pád o jeden řádek.
- Pokud tah nevede ke kolizi, dílek se posune o řádek níž.
- Za každý úspěšný jednotlivý pád se přičte
+1bod.
Poznámka: tento bonus se aplikuje i při automatickém pádu, protože stejná funkce drop() obsluhuje jak timer, tak klávesu dolů.
7.5 Hard drop
- Hard drop posouvá dílek dolů až na poslední nekolidující pozici.
- Za každý přeskočený řádek se přičítají
2body. - Po hard dropu se dílek okamžitě sloučí do pole, případně se vyčistí řádky a spawnne další dílek.
7.6 Rotace
- Rotace se provádí transformací matice o 90°.
- U dílku
Ose rotace neprovádí. - Implementace zkouší sadu horizontálních offsetů
0, -1, 1, -2, 2. - Pokud některý offset umožní rotaci bez kolize, rotace se aplikuje.
Interpretace: hra má jednoduchý wall-kick mechanismus, ale neimplementuje plné SRS chování ověřené proti standardu Guideline.
7.7 Sloučení a čištění řádků
Když dílek po pádu narazí: 1. vrátí se o jeden řádek zpět, 2. zapíše se do herního pole, 3. zkontrolují se plné řádky, 4. plné řádky se odstraní, 5. nad ně se vloží prázdné řádky, 6. pokračuje se dalším dílkem.
8. Scoring
Bodování za vyčištění řádků používá tabulku: - 1 řádek: 100 × level - 2 řádky: 300 × level - 3 řádky: 500 × level - 4 řádky: 800 × level
Další bodování:
- +1 za každý úspěšný krok funkce drop()
- +2 × distance za hard drop
Dokumentovaná omezení scoringu: - není implementované T-spin scoring, - není implementované combo scoring, - není implementované back-to-back scoring, - není implementovaný perfect clear bonus, - není evidované high score ani historie her.
9. Levelování a rychlost hry
9.1 Výpočet levelu
level = floor(lines / 10) + 1- Každých 10 vyčištěných řádků zvýší level o 1.
9.2 Rychlost pádu
- Výchozí interval automatického pádu je 900 ms.
- Po zvýšení levelu se interval přepočítá jako
max(90, 900 - (level - 1) * 70). - Hra tedy postupně zrychluje, ale má spodní limit 90 ms.
10. Stavy hry
Implementace explicitně rozlišuje tyto uživatelské stavy:
- Stop — výchozí stav před startem
- Hra — aktivní hraní
- Pauza — dočasně zastavená hra
- Konec — game over
Mapování je viditelné i ve statistikách v pravém panelu.
10.1 Stop
- Overlay je zobrazen.
- Text vybízí ke spuštění přes Start nebo Enter.
- Statistiky jsou nulové, stav ukazuje
Stop.
10.2 Hra
- Overlay je skrytý.
- Běží herní smyčka a přičítá se
dropCounter. - Po překročení
dropIntervalse provede pád.
10.3 Pauza
- Aktivuje se klávesou
Pnebo tlačítkem Start/Pauza. - Zobrazí se overlay s textem „Pauza“.
- Automatický pád se neprovádí.
10.4 Konec hry
- Nastane, pokud nově spawnovaný dílek okamžitě koliduje.
runningse nastaví nafalse,gameOvernatrue.- Zobrazí se overlay s finálním skóre a CTA na restart.
11. Ovládání
11.1 Klávesnice
←/→— pohyb do stran↓— soft drop↑neboX— rotaceSpace— hard dropP— pauza / pokračovatR— restartEnter— start, pokud hra ještě neběží
11.2 Dotykové / pointer ovládání
Na stránce jsou viditelná tlačítka: - vlevo - vpravo - rotace - dolů - DROP - restart
Chování:
- dotykové ovládání funguje přes pointerdown a příbuzné pointer eventy,
- pro vlevo, vpravo a soft drop se při držení spouští opakování,
- opakování používá interval 115 ms pro vodorovný pohyb a 85 ms pro soft drop,
- při uvolnění nebo zrušení pointer capture se opakování zastaví.
12. UI a obsah obrazovky
12.1 Hlavní layout
Stránka se skládá ze dvou hlavních částí: - levý panel s hrou, - pravý panel se statistikami, náhledem dalšího dílku, nápovědou a akcemi.
Na mobilu se layout skládá pod sebe.
12.2 Levý panel
Obsahuje:
- značku „Hermes arcade“,
- nadpis Tetris,
- odkaz Domů,
- herní canvas 300×600,
- overlay pro start/pauzu/game over,
- dotyková tlačítka.
12.3 Pravý panel
Obsahuje:
- statistiky Skóre, Level, Řádky, Stav,
- náhled Další dílek,
- krátkou textovou nápovědu,
- seznam ovládání,
- tlačítka Start/Pauza a Restart.
12.4 Ghost piece
Aktivní dílek má ghost projekci budoucí dopadové pozice vykreslenou se sníženou průhledností.
12.5 Next preview
Další dílek je vykreslen do samostatného canvasu o velikosti 120×120 px.
13. Responzivita a použitelnost
Z implementace lze přímo potvrdit:
- desktop layout používá dva sloupce,
- při šířce pod 820 px se layout přepíná na jeden sloupec,
- při šířce pod 520 px se dále upravují rozměry tlačítek, paddingy a overlay,
- canvas má touch-action: none, aby se omezily konflikty s gesty prohlížeče,
- mobilní tlačítka mají zvýšenou velikost a vizuální labely.
Neověřené aspekty: - reálná ergonomie na konkrétních mobilních zařízeních, - chování v různých mobilních prohlížečích, - přístupnost pro čtečky obrazovky a klávesové-only uživatele mimo základní ARIA labely.
14. Funkční požadavky odvozené z aktuální implementace
FR-01 Spuštění hry
Systém musí umožnit spustit novou hru přes Start button nebo Enter z výchozího stavu.
FR-02 Herní pole
Systém musí udržovat pole 10×20 a zapisovat do něj umístěné dílky.
FR-03 Generování dílků
Systém musí generovat dílky ze sady I/J/L/O/S/T/Z pomocí 7-bag randomizeru.
FR-04 Náhled dalšího dílku
Systém musí zobrazovat další připravený dílek před jeho spawnem.
FR-05 Pohyb a rotace
Systém musí umožnit horizontální pohyb, soft drop, hard drop a rotaci aktivního dílku.
FR-06 Kolize
Systém musí zabránit neplatnému pohybu mimo pole a přes obsazené buňky.
FR-07 Čištění řádků
Systém musí po uzamčení dílku vyhodnotit plné řádky a odstranit je.
FR-08 Scoring
Systém musí počítat skóre za vyčištěné řádky, běžný pád a hard drop dle implementovaných pravidel.
FR-09 Levelování
Systém musí po každých 10 vyčištěných řádcích zvýšit level a zkrátit interval automatického pádu.
FR-10 Stavy hry
Systém musí podporovat výchozí stav, aktivní hru, pauzu a konec hry.
FR-11 Restart
Systém musí umožnit reset celé hry přes klávesu R, overlay button nebo dedikované restart tlačítko.
FR-12 Desktop + touch ovládání
Systém musí být ovladatelný klávesnicí i přes on-screen tlačítka.
15. Nefunkční požadavky odvozené z implementace
NFR-01 Nízký vstupní práh
Aplikace musí být použitelná bez loginu, bez instalace a bez načítání dalších závislostí mimo stránku.
NFR-02 Okamžitá odezva UI
Pohyb dílků a vykreslení musí probíhat v klientovi v reálném čase pomocí requestAnimationFrame.
NFR-03 Jednoduchá nasaditelnost
Implementace musí být hostovatelná jako samostatná HTML stránka bez backendové herní logiky.
NFR-04 Základní mobilní použitelnost
UI musí obsahovat dotykové ovládání a responzivní styly pro menší viewporty.
16. Omezení aktuální verze
Z implementace nebo předchozích handoffů vyplývají tato omezení: - není implementovaný hold dílku, - není implementovaný lock delay, - rotace nepoužívá plný SRS standard, - neexistuje perzistence skóre ani leaderboard, - není multiplayer, - není zvuk ani hudba, - nejsou implementované pokročilé scoring mechaniky moderního Tetrisu, - hra je plně lokální a neukládá stav na server, - není potvrzená hlubší accessibility podpora nad rámec základních labelů.
17. Mimo rozsah této implementace
Tento produkt aktuálně neřeší: - účty uživatelů, - cloud save, - achievementy, - skiny nebo témata hry, - správu obsahu, - analytiku hráče viditelnou v kódu, - tutorial flow, - nastavení obtížnosti mimo automatické levelování, - editaci ovládání uživatelem.
18. Otevřené otázky a body k případnému potvrzení
- Je bonus
+1za každé úspěšné volánídrop()záměrný i pro automatický časovaný pád, nebo jde o vedlejší efekt sdílené logiky? - Má být současný jednoduchý wall-kick považován za finální design, nebo jen za pragmatické minimum?
- Má produkt dlouhodobě zůstat jako jednoduchá casual varianta bez hold/T-spin/combo systému?
- Je cílem zachovat čistě lokální hru bez persistence, nebo je to pouze první verze?
- Potřebuje se validovat použitelnost dotykového ovládání na fyzických mobilních zařízeních?
19. Doporučení pro budoucí změny dokumentace
Pokud se bude PRD v budoucnu používat jako referenční produktový dokument, je vhodné oddělit: - „aktuálně implementováno“ - „požadováno do budoucna“ - „známé odchylky od Tetris Guideline“
Tím se zabrání míchání popisu existujícího stavu s návrhem roadmapy.
20. Zdroje zjištění
Primární zdroje:
- /home/vmubuntu/www/tetris/index.html
- parent handoff t_8c4b8eb4 — implementační rozbor
- parent handoff t_70400048 — outline PRD
- parent handoff t_e662dc19 — původní draft
- parent handoff t_0bee21fb — review a finalizace obsahu
21. Shrnutí pro stakeholdera
Aktuální Tetris je funkční, jednoduchá a poměrně dobře použitelná webová hra pro krátké session. Implementace pokrývá základní očekávání od casual Tetrisu: 10×20 pole, 7 tetromin, scoring, levelování, next preview, ghost piece, pause/restart a desktop i touch ovládání. Zároveň jde o zjednodušenou variantu bez persistence a bez pokročilých pravidel moderních Tetris guideline implementací.