Tetris with Apulian elements - a Software Engineering project.
Project description
An exact copy of the Tetris game, with Apulian elements. Built as a Software Engineering university project.
Requirements
- Python >= 3.11
- Kivy >= 2.3 (installed automatically by Poetry)
- Node >= 25 and npm >= 11.11 (for semantic-release)
- Poetry (dependency manager)
In-Game keyboard controls
| Key | Action |
|---|---|
| ← / → | Move left / right |
| ↓ | Soft drop |
| ↑ or X | Rotate clockwise |
| Space | Hard drop |
| C | Hold |
| P or Escape | Pause / Resume |
| Q | Quit |
| M | Toggle music |
| N | Next track |
| B | Previous track |
Installation
From PyPI
pip install OrecchietTetris
OrecchietTetris
From source
-
Clone the repository:
git clone https://github.com/unibo-dtm-se-2425-OrecchietTetris/OrecchietTetris-artifact cd OrecchietTetris-artifact
-
Install Poetry if you don't have it yet:
pip install -r requirements.txt
-
Install the project's dependencies (creates
.venv/inside the project):poetry install npm install
-
(Optional) Install pre-commit hooks for commit-message linting:
.venv/bin/poe hooks # macOS / Linux .venv\Scripts\poe hooks # Windows
Virtual environment
All project commands run inside the .venv/ virtual environment created by Poetry.
Activate it once per terminal session, then use tools directly without any prefix:
python3 -m venv .venv
# macOS / Linux
source .venv/bin/activate
# Windows (PowerShell)
.venv\Scripts\Activate.ps1
# Windows (cmd)
.venv\Scripts\activate.bat
To deactivate:
deactivate
Usage
Activate the virtual environment (see above), then run the game:
OrecchietTetris
or:
python -m OrecchietTetris
Development
Activate the virtual environment first, then use the following commands directly.
Run tests
poe test
Run a single test file or test case:
pytest -v tests/model/test_tetromino.py
pytest -v tests/model/test_tetromino.py::test_rotations
Coverage
poe coverage
Lint & type check
poe flake8
poe mypy
Architecture
The project uses the Observer pattern to decouple game logic from the view, with abstract interfaces for dependency inversion.
Components
| Component | Role |
|---|---|
Tetromino(ITetromino) |
Falling piece with clockwise rotation |
Board(IBoard) |
Pure grid engine — collision, locking, line clearing |
Tetris(ITetris) |
Game orchestrator; fires EventType events on every state change |
MenuScreen(IView) |
Kivy main menu with language selector |
GameScreen(IView) |
Kivy 10×20 board, previews, score, keyboard input |
TetrisApp(App) |
Kivy application; manages screen transitions |
I18n |
Runtime EN/IT string lookup |
BlockRenderer |
Maps piece integers to RGBA colours and image paths |
Observer events (EventType enum)
| Event | When | Data |
|---|---|---|
BOARD_UPDATED |
piece moved, rotated, or locked | None |
NEW_PIECE |
new piece spawned | ITetromino |
HOLD_UPDATED |
hold slot changed | ITetromino | None |
LINES_CLEARED |
lines removed | int |
SCORE_UPDATED |
score changed | int |
GAME_OVER |
spawn blocked | None |
PAUSED / RESUMED |
pause toggled | None |
Tetromino Blocks
Each tetromino uses a unique block icon drawn from Apulian food imagery.
| Block | Shape | Apulian Food |
|---|---|---|
| I | Mozzarella | |
| O | Orecchietta | |
| T | Uva (Grape) | |
| S | Cime di rapa (Turnip Tops) | |
| Z | Frisella | |
| J | Cozze Tarantine (Tarantino Mussels) | |
| L | Focaccia |
Soundtrack
You are not ready for this. A list of the best Apulian - and not only - artists!
| Track | Artist | Song |
|---|---|---|
| 01 | Caparezza | Abiura di Me |
| 02 | Serena Brancale | Baccalà |
| 03 | Kid Yugi | Massafghanistan |
| 04 | Sud Sound System | Le Radici Ca Tieni |
| 05 | Boombadash ft. Alessandra Amoroso | Mambo Salentino |
| 06 | Sal Da Vinci | Rossetto e Caffè |
| 07 | Al Bano ft. Romina Power | Felicità |
| 08 | Caparezza | Jodellavitanonhocapitouncazzo |
| 09 | Checco Zalone | Angela |
| 10 | Elvira Visone ft. Luca Sarracino | Mi Hai Rotto il Cuore |
| 11 | Domenico Bini | Sta Andando Tutto Male |
| 12 | Leone Di Lernia | La festa d' patron |
| 13 | GemBoy | La Guerra Di Piero |
You can find the .mp3 files of the soundtrack in assets/music/mp3. Enjoy!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file orecchiettetris-1.0.0.tar.gz.
File metadata
- Download URL: orecchiettetris-1.0.0.tar.gz
- Upload date:
- Size: 48.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b1f0c45bf741fab90332eb9754088d3fd3b350665c2a1810e2594488979dc96
|
|
| MD5 |
565b8e1295c3302acf1d7915be37e5e1
|
|
| BLAKE2b-256 |
c0937f47d69afab6a48aad8fa2ac5ac577be1bcd3899f2b5943b61d47f188324
|
Provenance
The following attestation bundles were made for orecchiettetris-1.0.0.tar.gz:
Publisher:
deploy.yml on unibo-dtm-se-2425-OrecchietTetris/OrecchietTetris-artifact
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
orecchiettetris-1.0.0.tar.gz -
Subject digest:
7b1f0c45bf741fab90332eb9754088d3fd3b350665c2a1810e2594488979dc96 - Sigstore transparency entry: 1885093210
- Sigstore integration time:
-
Permalink:
unibo-dtm-se-2425-OrecchietTetris/OrecchietTetris-artifact@a91705c145976abd1f81d474d57d5a698e8ac95b -
Branch / Tag:
refs/heads/master - Owner: https://github.com/unibo-dtm-se-2425-OrecchietTetris
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deploy.yml@a91705c145976abd1f81d474d57d5a698e8ac95b -
Trigger Event:
push
-
Statement type:
File details
Details for the file orecchiettetris-1.0.0-py3-none-any.whl.
File metadata
- Download URL: orecchiettetris-1.0.0-py3-none-any.whl
- Upload date:
- Size: 48.4 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
88b49ae12e323a8646eff9940bc6c8f9c5f31c6106c184474195abf1364a2cd5
|
|
| MD5 |
86f283536b8785f73e8e947e8bd68079
|
|
| BLAKE2b-256 |
9408184f1947c145e3a8b0668c8a5293e842b1fd4a1d075a8da4764b01e0d111
|
Provenance
The following attestation bundles were made for orecchiettetris-1.0.0-py3-none-any.whl:
Publisher:
deploy.yml on unibo-dtm-se-2425-OrecchietTetris/OrecchietTetris-artifact
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
orecchiettetris-1.0.0-py3-none-any.whl -
Subject digest:
88b49ae12e323a8646eff9940bc6c8f9c5f31c6106c184474195abf1364a2cd5 - Sigstore transparency entry: 1885093497
- Sigstore integration time:
-
Permalink:
unibo-dtm-se-2425-OrecchietTetris/OrecchietTetris-artifact@a91705c145976abd1f81d474d57d5a698e8ac95b -
Branch / Tag:
refs/heads/master - Owner: https://github.com/unibo-dtm-se-2425-OrecchietTetris
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deploy.yml@a91705c145976abd1f81d474d57d5a698e8ac95b -
Trigger Event:
push
-
Statement type: