From f783dc74e21d45614bb92d0154ce59b3ceec224a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Frankovi=C4=8D?= Date: Wed, 20 May 2026 09:28:49 +0200 Subject: [PATCH] dok --- final/DOKUMENTACIA.md | 97 +++++++++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 41 deletions(-) diff --git a/final/DOKUMENTACIA.md b/final/DOKUMENTACIA.md index e86e4ee..051812b 100644 --- a/final/DOKUMENTACIA.md +++ b/final/DOKUMENTACIA.md @@ -1,6 +1,17 @@ -# Dokumentácia - Hra Tetris +--- +documentclass: report +fontsize: 14pt +title: "Dokumentácia - Hra Tetris" +toc: true +toc-depth: 3 +toc-title: "Obsah" +colorlinks: true +linkcolor: blue +--- -## 1. Predstavenie Hry +\newpage + +# 1. Predstavenie Hry Tetris je klasická puzzle hra implementovaná v jazyku C s využitím knižnice ncurses. Hra ponúka kompletný herný zážitok s textovým grafickým rozhraním, koloračným zobrazením a moderným Tetrominovým systémom. Hráči musia usporaďovať padajúce štvorbloky (tetrominoes) tak, aby vytvorili horizontálne rady a tie následne vymazali. Hra sa s každým vymazaným radom stáva zložitejšou a rýchlejšou. @@ -13,16 +24,18 @@ Hra obsahuje všetkých 7 štandardných tetromín: - **J-tetromína**: Modrá, J-tvar - **L-tetromína**: Biela, L-tvar -## 2. Preloženie a Spustenie Hry +\newpage -### Požiadavky +# 2. Preloženie a Spustenie Hry + +## 2.1 Požiadavky - Kompilátor GCC - Knižnica ncurses (libncurses5-dev alebo ekvivalent) - Unix-like terminálové prostredie (Linux, macOS, WSL, atď.) - Terminálové okno aspoň 50 znakov šíreho a 24 riadkov vysokého -### Spôsob Preloženia +## 2.2 Spôsob Preloženia 1. **Navigácia do priečinka projektu:** ```bash @@ -49,7 +62,7 @@ Príkaz `make` spustí kompiláciu pomocou GCC s nasledovnými parametrami: make clean ``` -### Kompilácia na Sigma Serveri +## 2.3 Kompilácia na Sigma Serveri Pre prácu na universitnom serveri: ```bash @@ -59,9 +72,11 @@ make ./tetris ``` -## 3. Návod na Hru +\newpage -### Herné Ovládanie +# 3. Návod na Hru + +## 3.1 Herné Ovládanie | Tlačítko | Akcia | |----------|-------| @@ -74,7 +89,7 @@ make | **Q** | Ukončenie hry | | **R** (pri Game Over) | Reštart hry | -### Systém Bodovania +## 3.2 Systém Bodovania Body sa udeľujú na základe počtu vymazaných radov naraz: @@ -87,29 +102,29 @@ Body sa udeľujú na základe počtu vymazaných radov naraz: **Násobitel podľa úrovne:** Všetky body sa násobia aktuálnou hernou úrovňou. Napríklad, vymazanie 4 radov na úrovni 2 = 800 × 2 = 1600 bodov. -### Úrovne a Ťažkosť +## 3.3 Úrovne a Ťažkosť - Úroveň sa zvýši o 1 po každých 10 vymazaných radoch - Počiatočná úroveň je 1 - Rýchlosť pádu časti sa s úrovňou zvyšuje - Maximálna rýchlosť je dosahnutá na úrovni 16 -### Koniec Hry +## 3.4 Koniec Hry Hra končí, keď sa nová tetromína nemôže spustiť na vrchu hernej dosky. To zvyčajne nastane vtedy, keď hráč nedokáže časti vymazávať dostatočne rýchlo a hracia plocha je zaplnená až po vrch. -### Vizuálne Prvky +## 3.5 Vizuálne Prvky - **Náhľad ďalšej časti**: Vpravo sa zobrazuje nasledujúca tetromína - **Fantómová čiastka**: Zelené bodky ukazujú, kde sa čiastka ocitne pri hard dropu - **Farebné čiastky**: Každá tetromína má jedinečnú farbu - **Herné Štatistiky**: Zobrazenie skóre, úrovne a počtu vymazaných radov -## 4. Programová Implementácia +\newpage -### Najdôležitejšie Funkcie +# 4. Programová Implementácia -#### 4.1 Inicializácia a Spúšťanie +## 4.1 Inicializácia a Spúšťanie **`void* init_game()`** - Inicializuje nový herný stav @@ -128,7 +143,7 @@ Hra končí, keď sa nová tetromína nemôže spustiť na vrchu hernej dosky. T - Uvoľňuje pamäť hernému stavu - Volá sa pri ukončení hry -#### 4.2 Mechanika Pohybu +## 4.2 Mechanika Pohybu **`int can_place_piece(GameState* state, int type, int x, int y, int rotation)`** - Kontroluje, či je možné umiestniť čiastku na danú pozíciu s danou rotáciou @@ -161,7 +176,7 @@ Hra končí, keď sa nová tetromína nemôže spustiť na vrchu hernej dosky. T - Otáča aktuálnu čiastku o 90° v smere hodinových ručičiek - Overuje, či je otočenie povolené (bez zrážok) -#### 4.3 Fixovanie a Interakcia +## 4.3 Fixovanie a Interakcia **`void lock_piece(GameState* state)`** - Fixuje aktuálnu čiastku na hernú dosku (stáva sa jej trvalou súčasťou) @@ -175,7 +190,7 @@ Hra končí, keď sa nová tetromína nemôže spustiť na vrchu hernej dosky. T - Aktualizuje skóre na základe počtu vymazaných radov - Zvyšuje úroveň hry podľa počtu vymazaných radov -#### 4.4 Fyzika a Časovanie +## 4.4 Fyzika a Časovanie **`void apply_gravity(GameState* state)`** - Aplikuje gravitáciu na čiastku (automatický pád) @@ -191,9 +206,7 @@ Hra končí, keď sa nová tetromína nemôže spustiť na vrchu hernej dosky. T - Vykresľuje štatistický panel vpravo - Vykresľuje stavový riadok na spodku -### Dôležité Štruktúry - -#### 4.5 Štruktúra GameState +## 4.5 Štruktúra GameState ```c typedef struct { @@ -216,7 +229,7 @@ typedef struct { } GameState; ``` -#### 4.6 Tetromínové Tvary +## 4.6 Tetromínové Tvary ```c static const int PIECE_SHAPES[NUM_PIECES][4][4][2] = { ... } @@ -228,9 +241,7 @@ Táto trojrozmernná matica definuje 7 tetromín s 4 rotačnými stavmi každý: - **Rozmer 3** (0-3): Štyri bloky tetromíny - **Rozmer 4** (x, y): Relatívne súradnice bloku od stredu -### Algoritmické Princípy - -#### 4.7 Detekcia Zrážok +## 4.7 Detekcia Zrážok Hra používa jednoduchý a efektívny systém detekcie zrážok: 1. Pre každý blok čiastky vypočíta pozíciu `(x + offset_x, y + offset_y)` @@ -238,7 +249,7 @@ Hra používa jednoduchý a efektívny systém detekcie zrážok: 3. Kontroluje, či je bunka na doske prázdna `board[y][x] == 0` 4. Ak všetky bloky prejdú overením, čiastka sa môže umiestniť -#### 4.8 Vymazávanie Radov +## 4.8 Vymazávanie Radov Algoritmus vymazávania: 1. Iteruje dosku od spodku k vrchu @@ -247,7 +258,7 @@ Algoritmus vymazávania: 4. Úplné rady sa vynechajú (vymazánia sa) 5. Horná časť dosky sa vyplní nulami -#### 4.9 Systém Bodovania +## 4.9 Systém Bodovania Bodovanie sa vypočítava ako: ``` @@ -260,36 +271,40 @@ Kde `body_za_rady` sú: - 3 rady: 500 bodov - 4 rady: 800 bodov -## 5. Modifikácie Knižnice World +\newpage + +# 5. Modifikácie Knižnice World Knižnica World bola pôvodne určená ako všeobecný framework na vytváranie interaktívnych aplikácií s textovým grafickým rozhraním. Pre Tetris bola použitá bez výrazných modifikácií, ale boli vyvinuté nasledovné rozšírenia a optimalizácie: -### 5.1 Prispôsobenie Farieb +## 5.1 Prispôsobenie Farieb Knižnica World bola rozšírená o podporu všetkých 8 systémových farieb (čierna, červená, zelená, žltá, modrá, purpurová, azúrová, biela). Hra používa tieto farby na odlíšenie jednotlivých tetromín. -### 5.2 Unicode Znaky pre Grafiku +## 5.2 Unicode Znaky pre Grafiku Implementácia umožnila používanie Unicode znakov na lepšie grafické znázornenie: - `0x250C`, `0x2510`, `0x2514`, `0x2518`: Rohy rámčekov - `0x2500`, `0x2502`: Vodorovné a zvislé čiary - Vlastné znaky: `#`, `O`, `T`, `S`, `Z`, `J`, `L` pre tetromíny -### 5.3 Optimalizácia Výkonu +## 5.3 Optimalizácia Výkonu - **Event loop**: Implementácia efektívneho event loop-u s timeout mechanizmom - **Inkrementálne vykresľovanie**: Hra vykresľuje len časti, ktoré sa zmenili - **Gravitačný systém**: Časovací mechanizmus pre aplikovanie gravitácie -### 5.4 Interakcia s Terminálom +## 5.4 Interakcia s Terminálom - Podpora šípok a špeciálnych kláves cez ncurses - Detekcia veľkosti terminálového okna - Bezproblémová práca s rôznymi typmi terminálov -## 6. Zdroje a Referencie +\newpage -### Dokumentácia a Knižnice +# 6. Zdroje a Referencie + +## 6.1 Dokumentácia a Knižnice 1. **ncurses dokumentácia** - https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/ 2. **GCC kompilátor** - https://gcc.gnu.org/onlinedocs/ @@ -297,29 +312,29 @@ Implementácia umožnila používanie Unicode znakov na lepšie grafické znázo 4. **Tetris pravidlá a mechanika** - https://tetris.wiki/ 5. **Unicode Box Drawing Characters** - https://en.wikipedia.org/wiki/Box-drawing_character -### Inšpirácia a Referencie +## 6.2 Inšpirácia a Referencie - Originálny Tetris od Alexeja Pajitnova (1984) - Štandardný Tetris Guidelines - https://tetris.wiki/Tetris_Guideline -## 7. Použitie Umelej Inteligencie +\newpage -### 7.1 Druh Umelej Inteligencie +# 7. Použitie Umelej Inteligencie + +## 7.1 Druh Umelej Inteligencie Pri vytváraní tejto dokumentácie a v procese vývoja boli využité generatívne AI modely (konkrétne **Claude Haiku 4.5** a podobné jazykové modely). -### 7.2 Spôsob Použitia +## 7.2 Spôsob Použitia 1. **Dokumentácia**: Generácia textov v slovenčine, opisov funkcií a štruktúr 2. **Kódovanie**: Asistencia pri navrhovaní algoritámov a optimalizácií 3. **Testovanie**: Návrhy na testovacích prípadov a možné edge cases 4. **Vysvetľovanie**: Analýza a vysvetlenie existujúceho kódu -### 7.3 Kontextové Informácie +## 7.3 Kontextové Informácie - AI bol používaný ako pomôcka pre zrýchlenie vývoja - Všetok kód bol manuálne skontrolovaný a overený - AI pomáhal pri brainstormingu a optimalizácii - Dokumentácia bola vytvorená s podporou AI pre konzistentnosť a úplnosť - ----