python-tetris
python-tetris copied to clipboard
Tetris game with AI made by pygame, inspired by react-tetris
PyTetris
Table of Contents
-
PyTetris
- Table of Contents
- Overview
- Screenshots
-
Play the Game
- Install
- Start
- How to Play
-
Pierre Dellacherie
- Landing Height
- Eroded Piece Cells Metric
- Board Row Transitions
- Board Column Transitions
- Board Buried Holes
- Board Wells
- Total
- Priority
- Result Preview
- Project Development Setup
Overview
Simple tetris game made by pygame
Inspired by react-tetris
AI algorithm: Pierre Dellacherie (El-Tetris)
Screenshots




Play the Game
Install
pip3 install pytetris
Start
Run the following command in the environment which you installed the pytetris package or under the project folder:
python -m pytetris
or you can run the project in the project folder by
poetry run game
How to Play
In the home page, you can use ←→
or click the button to change to start level and use ↑↓
to change the start random line number.
-
↑
: Rotate the piece -
←→
: Move the piece left or right -
↓
: Speed up the piece -
SPACE
: Drop down the piece -
P
: Pause the game -
S
: Mute control -
R
: Reset the game (will loss current score) -
A
: Make AI on or off
Pierre Dellacherie
Pierre Dellacherie is a one-piece algorithm.
Six main features:
Landing Height
The height where the piece is put. Top or center of the piece is both ok.
Example:
:white_large_square::white_large_square::white_large_square::white_large_square::white_large_square::blue_square::white_large_square::white_large_square::white_large_square::white_large_square:
:white_large_square::white_large_square::black_large_square::black_large_square::blue_square::blue_square::black_large_square::black_large_square::white_large_square::white_large_square:
:black_large_square::black_large_square::black_large_square::black_large_square::blue_square::black_large_square::black_large_square::black_large_square::black_large_square::black_large_square:
:black_large_square::white_large_square::white_large_square::black_large_square::black_large_square::black_large_square::black_large_square::black_large_square::black_large_square::black_large_square:
Height: 4
or 3
Eroded Piece Cells Metric
The number of rows eliminated × The number of the squares the piece contributed
Example:
:white_large_square::white_large_square::white_large_square::white_large_square::white_large_square::blue_square::white_large_square::white_large_square::white_large_square::white_large_square:
:white_large_square::white_large_square::black_large_square::black_large_square::blue_square::blue_square::black_large_square::black_large_square::white_large_square::white_large_square:
:black_large_square::black_large_square::black_large_square::black_large_square::blue_square::black_large_square::black_large_square::black_large_square::black_large_square::black_large_square:
:black_large_square::white_large_square::white_large_square::black_large_square::black_large_square::black_large_square::black_large_square::black_large_square::black_large_square::black_large_square:
Eliminated lines: 1
Contribute: 1
Eroded Piece Cells Metric: 1 × 1 = 1
Board Row Transitions
The total number of row transitions. A row transition occurs when an empty cell is adjacent to a filled cell on the same row and vice versa.
Tips: Both sides of the wall is concerned as filled.
Example:
:negative_squared_cross_mark::white_large_square::white_large_square::black_large_square::black_large_square::white_large_square::white_large_square::black_large_square::black_large_square::white_large_square::white_large_square::negative_squared_cross_mark:
Single Row Transitions: 6
Board Column Transitions
The total number of column transitions. A column transition occurs when an empty cell is adjacent to a filled cell on the same column and vice versa.
Tips: Both sides of the wall is concerned as filled.
Example:
:negative_squared_cross_mark:
:white_large_square:
:black_large_square:
:black_large_square:
:white_large_square:
:black_large_square:
:negative_squared_cross_mark:
Single Column Transitions: 4
Board Buried Holes
The total number of column holes. A hole is an empty cell that has at least one filled cell above it in the same column.
Example:
:white_large_square:
:black_large_square:
:black_large_square:
:white_large_square:
:black_large_square:
Single Column Holes: 1
Board Wells
The total number of column wells. A well is a succession of empty cells such that their left cells and right cells are both filled.
Tips: As long as there are filled cells on both sides, the empty cell is concerned as well.
Example:
:white_large_square::white_large_square::black_large_square:
:black_large_square::white_large_square::black_large_square:
:black_large_square::black_large_square::black_large_square:
:black_large_square::white_large_square::black_large_square:
:black_large_square::white_large_square::black_large_square:
Wells: (1) + (1+2) = 4
Total
The evaluation function is a linear sum of all the above features. Bigger value will be better.
Feature | Weight |
---|---|
Landing Height | -4.500158825082766 |
Eroded Piece Cells Metric | 3.4181268101392694 |
Board Row Transitions | -3.2178882868487753 |
Board Column Transitions | -3.2178882868487753 |
Board Buried Holes | -7.899265427351652 |
Board Wells | -3.3855972247263626 |
Priority
priority = 100 * moving_steps + rotation_times
We choose the action which priority is lower if there are two or more same evaluation actions.
Result Preview


Project Development Setup
Clone the repository then install dependencies.
poetry install --no-root
or you can install the dependencies using pip:
pip3 install pygame numpy