Skip to main content

OrecchietTetris

An exact copy of the Tetris game, with Apulian elements. Built as a Software Engineering university project.

Requirements

  • Python >= 3.11
  • Poetry (dependency manager)
  • Kivy >= 2.3 (installed automatically by Poetry)
  • Node >= 25 and npm >= 11.11 (for semantic-release)

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

  1. Clone the repository:

    git clone https://github.com/unibo-dtm-se-2425-OrecchietTetris/OrecchietTetris-artifact
    cd OrecchietTetris-artifact
    
  2. Install Poetry if you don't have it yet:

    pip install -r requirements.txt
    
  3. Install the project's dependencies (creates .venv/ inside the project):

    poetry install
    npm install
    
  4. (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
Block 1 I Mozzarella
Block 2 O Orecchietta
Block 3 T Uva (Grape)
Block 4 S Cime di rapa (Turnip Tops)
Block 5 Z Frisella
Block 6 J Cozze Tarantine (Tarantino Mussels)
Block 7 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!

Metadata

Release files for OrecchietTetris 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for OrecchietTetris 1.1.1
File Size Uploaded
orecchiettetris-1.1.1.tar.gz 48.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for OrecchietTetris 1.1.1
File Interpreter ABI Platform
orecchiettetris-1.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 96.8 MB

Release files / orecchiettetris-1.1.1.tar.gz

Download URL orecchiettetris-1.1.1.tar.gz
Size 48.4 MB
Tags Source
SHA-256 checksum
How to use checksums
01e4075c73be078b1ce84127ce1607746bafe1de082c05c06a8ec8c798627647
BLAKE2b-256 checksum
How to use checksums
a2ba15ed9271231d843ee37f676b9305dc4c072b4f3a2111f453b2148cf007f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 6, 2026.

Transparency log

Release files / orecchiettetris-1.1.1-py3-none-any.whl

Download URL orecchiettetris-1.1.1-py3-none-any.whl
Size 48.4 MB
Tags Python 3
SHA-256 checksum
How to use checksums
34d4f4e55783722d95aa2c300221ba633875612431ef343c09e3ab48c8e356b6
BLAKE2b-256 checksum
How to use checksums
68614d72a31b065c6b20c54921c8b842baa9ee4569a8eafbc2f246756d934d89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 6, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.1 This release

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.11.2

2 release files

0.11.1

2 release files

0.11.0

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page