Fix config loading, speed thresholds and block selection; add tests, README, CLAUDE.md

This commit is contained in:
Anry Das
2026-10-14 08:22:43 +03:00
parent 85a233f33c
commit d36037c88e
13 changed files with 638 additions and 38 deletions
+69
View File
@@ -0,0 +1,69 @@
## -=: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 чи відсутній ключ зупиняють гру з повідомленням, де названо файл і ключ.
### 📱 Скріншоти
<table>
<tr>
<td align="center"><img src="images/screenshot_game.png" width="300" alt="Гра" /></td>
<td align="center"><img src="images/logo_02_256x256.png" width="200" alt="Логотип" /></td>
</tr>
<tr>
<td align="center"><i>Ігрове поле</i></td>
<td align="center"><i>Логотип</i></td>
</tr>
</table>
### 📌 Використання
#### Ігровий процес<a id='Gameplay' />
**_Стандартні правила тетрісу на полі висотою 20 рядків_**
- `←` / `→` – рух, `↑` – поворот, `↓` – опустити на рядок
- `P` – пауза, `R` – перезапуск, `Esc` – вихід (з підтвердженням)
- Очки за одночасно очищені лінії: 1 – 100, 2 – 300, 3 – 500, 4 – 800
- Наступна фігура завжди відрізняється від поточної
#### Прогресивні фігури<a id='ProgressivePieces' />
**_Що вищий рахунок, то різноманітніші фігури_**
- 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 очок змінюється швидкість падіння
#### Налаштування<a id='Configuration' />
**_Усі налаштування – в теці `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:=-_