## -=:dAs:=- Tetris ### _Класичний тетріс на Python + pygame з налаштовуваними фігурами, кольорами та керуванням_ [![Python](https://img.shields.io/badge/Python-3.12-green)](#) [![pygame](https://img.shields.io/badge/pygame-2.6.1-orange)](#) [![PyInstaller](https://img.shields.io/badge/PyInstaller-6.16-blue)](#) 🇬🇧 [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:=-_