70 lines
5.5 KiB
Markdown
70 lines
5.5 KiB
Markdown
## -=:dAs:=- Tetris
|
||
### _Класичний тетріс на Python + pygame з налаштовуваними фігурами, кольорами та керуванням_
|
||
|
||
[](#) [](#) [](#)
|
||
|
||
🇬🇧 [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:=-_
|