Simple tetris game made by pygame
Inspired by react-tetris
AI algorithm: Pierre Dellacherie (El-Tetris)
pip3 install pytetris
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
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 pieceSPACE
: Drop down the pieceP
: Pause the gameS
: Mute controlR
: Reset the game (will loss current score)A
: Make AI on or off
Pierre Dellacherie is a one-piece algorithm.
Six main features:
The height where the piece is put. Top or center of the piece is both ok.
Example:
⬜⬜⬜⬜⬜🟦⬜⬜⬜⬜
⬜⬜⬛⬛🟦🟦⬛⬛⬜⬜
⬛⬛⬛⬛🟦⬛⬛⬛⬛⬛
⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛
Height: 4
or 3
The number of rows eliminated × The number of the squares the piece contributed
Example:
⬜⬜⬜⬜⬜🟦⬜⬜⬜⬜
⬜⬜⬛⬛🟦🟦⬛⬛⬜⬜
⬛⬛⬛⬛🟦⬛⬛⬛⬛⬛
⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛
Eliminated lines: 1
Contribute: 1
Eroded Piece Cells Metric: 1 × 1 = 1
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:
❎⬜⬜⬛⬛⬜⬜⬛⬛⬜⬜❎
Single Row Transitions: 6
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:
❎
⬜
⬛
⬛
⬜
⬛
❎
Single Column Transitions: 4
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:
⬜
⬛
⬛
⬜
⬛
Single Column Holes: 1
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:
⬜⬜⬛
⬛⬜⬛
⬛⬛⬛
⬛⬜⬛
⬛⬜⬛
Wells: (1) + (1+2) = 4
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 = 100 * moving_steps + rotation_times
We choose the action which priority is lower if there are two or more same evaluation actions.
Clone the repository then install dependencies.
poetry install --no-root
or you can install the dependencies using pip:
pip3 install pygame numpy