This commit is contained in:
Jakub Frankovič 2026-05-20 09:28:49 +02:00
parent e0ed8982a0
commit f783dc74e2

View File

@ -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. 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 - **J-tetromína**: Modrá, J-tvar
- **L-tetromína**: Biela, L-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 - Kompilátor GCC
- Knižnica ncurses (libncurses5-dev alebo ekvivalent) - Knižnica ncurses (libncurses5-dev alebo ekvivalent)
- Unix-like terminálové prostredie (Linux, macOS, WSL, atď.) - Unix-like terminálové prostredie (Linux, macOS, WSL, atď.)
- Terminálové okno aspoň 50 znakov šíreho a 24 riadkov vysokého - 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:** 1. **Navigácia do priečinka projektu:**
```bash ```bash
@ -49,7 +62,7 @@ Príkaz `make` spustí kompiláciu pomocou GCC s nasledovnými parametrami:
make clean make clean
``` ```
### Kompilácia na Sigma Serveri ## 2.3 Kompilácia na Sigma Serveri
Pre prácu na universitnom serveri: Pre prácu na universitnom serveri:
```bash ```bash
@ -59,9 +72,11 @@ make
./tetris ./tetris
``` ```
## 3. Návod na Hru \newpage
### Herné Ovládanie # 3. Návod na Hru
## 3.1 Herné Ovládanie
| Tlačítko | Akcia | | Tlačítko | Akcia |
|----------|-------| |----------|-------|
@ -74,7 +89,7 @@ make
| **Q** | Ukončenie hry | | **Q** | Ukončenie hry |
| **R** (pri Game Over) | Reštart 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: 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. **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 - Úroveň sa zvýši o 1 po každých 10 vymazaných radoch
- Počiatočná úroveň je 1 - Počiatočná úroveň je 1
- Rýchlosť pádu časti sa s úrovňou zvyšuje - Rýchlosť pádu časti sa s úrovňou zvyšuje
- Maximálna rýchlosť je dosahnutá na úrovni 16 - 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. 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 - **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 - **Fantómová čiastka**: Zelené bodky ukazujú, kde sa čiastka ocitne pri hard dropu
- **Farebné čiastky**: Každá tetromína má jedinečnú farbu - **Farebné čiastky**: Každá tetromína má jedinečnú farbu
- **Herné Štatistiky**: Zobrazenie skóre, úrovne a počtu vymazaných radov - **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()`** **`void* init_game()`**
- Inicializuje nový herný stav - 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 - Uvoľňuje pamäť hernému stavu
- Volá sa pri ukončení hry - 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)`** **`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 - 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 - Otáča aktuálnu čiastku o 90° v smere hodinových ručičiek
- Overuje, či je otočenie povolené (bez zrážok) - Overuje, či je otočenie povolené (bez zrážok)
#### 4.3 Fixovanie a Interakcia ## 4.3 Fixovanie a Interakcia
**`void lock_piece(GameState* state)`** **`void lock_piece(GameState* state)`**
- Fixuje aktuálnu čiastku na hernú dosku (stáva sa jej trvalou súčasťou) - 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 - Aktualizuje skóre na základe počtu vymazaných radov
- Zvyšuje úroveň hry podľa 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)`** **`void apply_gravity(GameState* state)`**
- Aplikuje gravitáciu na čiastku (automatický pád) - 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 štatistický panel vpravo
- Vykresľuje stavový riadok na spodku - Vykresľuje stavový riadok na spodku
### Dôležité Štruktúry ## 4.5 Štruktúra GameState
#### 4.5 Štruktúra GameState
```c ```c
typedef struct { typedef struct {
@ -216,7 +229,7 @@ typedef struct {
} GameState; } GameState;
``` ```
#### 4.6 Tetromínové Tvary ## 4.6 Tetromínové Tvary
```c ```c
static const int PIECE_SHAPES[NUM_PIECES][4][4][2] = { ... } 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 3** (0-3): Štyri bloky tetromíny
- **Rozmer 4** (x, y): Relatívne súradnice bloku od stredu - **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: 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)` 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` 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. 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: Algoritmus vymazávania:
1. Iteruje dosku od spodku k vrchu 1. Iteruje dosku od spodku k vrchu
@ -247,7 +258,7 @@ Algoritmus vymazávania:
4. Úplné rady sa vynechajú (vymazánia sa) 4. Úplné rady sa vynechajú (vymazánia sa)
5. Horná časť dosky sa vyplní nulami 5. Horná časť dosky sa vyplní nulami
#### 4.9 Systém Bodovania ## 4.9 Systém Bodovania
Bodovanie sa vypočítava ako: Bodovanie sa vypočítava ako:
``` ```
@ -260,36 +271,40 @@ Kde `body_za_rady` sú:
- 3 rady: 500 bodov - 3 rady: 500 bodov
- 4 rady: 800 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: 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. 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: Implementácia umožnila používanie Unicode znakov na lepšie grafické znázornenie:
- `0x250C`, `0x2510`, `0x2514`, `0x2518`: Rohy rámčekov - `0x250C`, `0x2510`, `0x2514`, `0x2518`: Rohy rámčekov
- `0x2500`, `0x2502`: Vodorovné a zvislé čiary - `0x2500`, `0x2502`: Vodorovné a zvislé čiary
- Vlastné znaky: `#`, `O`, `T`, `S`, `Z`, `J`, `L` pre tetromíny - 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 - **Event loop**: Implementácia efektívneho event loop-u s timeout mechanizmom
- **Inkrementálne vykresľovanie**: Hra vykresľuje len časti, ktoré sa zmenili - **Inkrementálne vykresľovanie**: Hra vykresľuje len časti, ktoré sa zmenili
- **Gravitačný systém**: Časovací mechanizmus pre aplikovanie gravitácie - **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 - Podpora šípok a špeciálnych kláves cez ncurses
- Detekcia veľkosti terminálového okna - Detekcia veľkosti terminálového okna
- Bezproblémová práca s rôznymi typmi terminálov - 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/ 1. **ncurses dokumentácia** - https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/
2. **GCC kompilátor** - https://gcc.gnu.org/onlinedocs/ 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/ 4. **Tetris pravidlá a mechanika** - https://tetris.wiki/
5. **Unicode Box Drawing Characters** - https://en.wikipedia.org/wiki/Box-drawing_character 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) - Originálny Tetris od Alexeja Pajitnova (1984)
- Štandardný Tetris Guidelines - https://tetris.wiki/Tetris_Guideline - Š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). 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 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í 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 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 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 - AI bol používaný ako pomôcka pre zrýchlenie vývoja
- Všetok kód bol manuálne skontrolovaný a overený - Všetok kód bol manuálne skontrolovaný a overený
- AI pomáhal pri brainstormingu a optimalizácii - AI pomáhal pri brainstormingu a optimalizácii
- Dokumentácia bola vytvorená s podporou AI pre konzistentnosť a úplnosť - Dokumentácia bola vytvorená s podporou AI pre konzistentnosť a úplnosť
---