## -=:dAs:=- Tetris
### _Класичний тетріс на Python + pygame з налаштовуваними фігурами, кольорами та керуванням_
[](#) [](#) [](#)
🇬🇧 [English version](README.md)
### 💡 Призначення
Десктопна гра тетріс, у якій набір фігур, їхні кольори, рахунок для появи кожної фігури, ширина поля, розмір блока, кольори та клавіші описані у JSON-файлах – тож гру можна розширювати новими фігурами, не змінюючи код.
### 📃 Можливості
- [Ігровий процес](#Gameplay) – падіння фігур, обертання, очищення ліній, рахунок і лічильник ліній, попередній перегляд наступної фігури
- [Прогресивні фігури](#ProgressivePieces) – 23 фігури, нові відкриваються зі зростанням рахунку
- [Налаштування](#Configuration) – клавіші, кольори, ширина поля, розмір блока та режим швидкості в JSON
- Пауза, перезапуск і діалог підтвердження виходу (мишею або клавішами Y/N)
### ⭐ Переваги
- **Фігури як дані** – нова фігура – це кілька рядків JSON: назва, колір, мінімальний рахунок і список поворотів.
- **Безпечні значення за замовчуванням** – якщо локальних конфігів немає, автоматично використовуються закомічені `*_000.json`.
- **Запуск з будь-якої теки** – конфіги шукаються поруч зі скриптом або зібраним виконуваним файлом, а не в поточній теці.
- **Зрозумілі помилки конфігурації** – зламаний JSON чи відсутній ключ зупиняють гру з повідомленням, де названо файл і ключ.
### 📱 Скріншоти
 |
 |
| Ігрове поле |
Логотип |
### 📌 Використання
#### Ігровий процес
**_Стандартні правила тетрісу на полі висотою 20 рядків_**
- `←` / `→` – рух, `↑` – поворот, `↓` – опустити на рядок
- `P` – пауза, `R` – перезапуск, `Esc` – вихід (з підтвердженням)
- Очки за одночасно очищені лінії: 1 – 100, 2 – 300, 3 – 500, 4 – 800
- Наступна фігура завжди відрізняється від поточної
#### Прогресивні фігури
**_Що вищий рахунок, то різноманітніші фігури_**
- 8 базових фігур (`configs/blocks.json`): квадрат, лінія, лінія-3 та L – одразу; J – з 900, S – з 1000, Z і T – з 2500 очок
- 15 додаткових фігур (`configs/blocks_ADD.json`, необов'язковий): точка, U, кут, X, P, F та інші – від 3500 до 30000 очок
- Після 5000, 10000 і 15000 очок змінюється швидкість падіння
#### Налаштування
**_Усі налаштування – в теці `configs/`_**
- `config.json` – клавіші (назви клавіш pygame, напр. `K_LEFT`), текст підказки з керуванням, кольори, `store_width` (ширина поля в блоках), `block_size` (пікселі), `high_score_inc_speed`
- `high_score_inc_speed`: `false` – гра пришвидшується зі зростанням рахунку, `true` – сповільнюється
- `blocks.json` / `blocks_ADD.json` – фігури: `name`, `color` `[r, g, b]`, `min_score`, `shapes` (список поворотів за годинниковою стрілкою, матриці з 0/1); хоча б одна фігура повинна мати `min_score` 0
- Якщо локального файлу немає, використовується відповідний `*_000.json`
### 🚀 Запуск
Вимоги: Python 3.12, pygame 2.6.
```shell
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python das_tetris_gui.py # запустити гру
.venv/bin/python -m unittest discover -s tests -v # запустити тести
.venv/bin/pip install pyinstaller
.venv/bin/pyinstaller --onefile das_tetris_gui.py # зібрати єдиний виконуваний файл у dist/
```
Виконуваний файл читає конфіги з теки `configs/`, розташованої поруч із ним.
###### _Made by -=:dAs:=-_