From e7f3146e9adb61e3856c99981cd7e87460d5737f Mon Sep 17 00:00:00 2001 From: adrien Date: Tue, 8 Oct 2019 01:09:51 +0200 Subject: [PATCH] Improve T-Spin detection --- tetrislogic/__init__.py | 2 +- tetrislogic/consts.py | 12 +++++++++++- tetrislogic/tetromino.py | 18 +++++++++--------- tetrislogic/utils.py | 10 +++++++++- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/tetrislogic/__init__.py b/tetrislogic/__init__.py index bad968a..cf43502 100644 --- a/tetrislogic/__init__.py +++ b/tetrislogic/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- from .consts import LINES, COLLUMNS, NEXT_PIECES -from .utils import Movement, Rotation, Color, Coord +from .utils import Movement, Spin, Color, Coord from .tetromino import ( Mino, Tetromino, diff --git a/tetrislogic/consts.py b/tetrislogic/consts.py index 7cb3a84..c964e3b 100644 --- a/tetrislogic/consts.py +++ b/tetrislogic/consts.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from .utils import Coord +from .utils import Coord, T_Spin # Matrix @@ -15,3 +15,13 @@ AUTOREPEAT_PERIOD = 0.010 # Official : 0.010 s # Piece init coord MATRIX_PIECE_COORD = Coord(4, LINES) + +# Scores +LINES_CLEAR_NAME = "LINES_CLEAR_NAME" +SCORES = ( + {LINES_CLEAR_NAME: "", T_Spin.NONE: 0, T_Spin.MINI: 1, T_Spin.T_SPIN: 4}, + {LINES_CLEAR_NAME: "SINGLE", T_Spin.NONE: 1, T_Spin.MINI: 2, T_Spin.T_SPIN: 8}, + {LINES_CLEAR_NAME: "DOUBLE", T_Spin.NONE: 3, T_Spin.T_SPIN: 12}, + {LINES_CLEAR_NAME: "TRIPLE", T_Spin.NONE: 5, T_Spin.T_SPIN: 16}, + {LINES_CLEAR_NAME: "TETRIS", T_Spin.NONE: 8}, +) \ No newline at end of file diff --git a/tetrislogic/tetromino.py b/tetrislogic/tetromino.py index f81a350..ec0f420 100644 --- a/tetrislogic/tetromino.py +++ b/tetrislogic/tetromino.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- import random -from .utils import Coord, Rotation, Color +from .utils import Coord, Spin, Color class Mino: @@ -32,13 +32,13 @@ class TetrominoBase(list): # Super rotation system SRS = { - Rotation.CLOCKWISE: ( + Spin.CLOCKWISE: ( (Coord(0, 0), Coord(-1, 0), Coord(-1, 1), Coord(0, -2), Coord(-1, -2)), (Coord(0, 0), Coord(1, 0), Coord(1, -1), Coord(0, 2), Coord(1, 2)), (Coord(0, 0), Coord(1, 0), Coord(1, 1), Coord(0, -2), Coord(1, -2)), (Coord(0, 0), Coord(-1, 0), Coord(-1, -1), Coord(0, -2), Coord(-1, 2)), ), - Rotation.COUNTER: ( + Spin.COUNTER: ( (Coord(0, 0), Coord(1, 0), Coord(1, 1), Coord(0, -2), Coord(1, -2)), (Coord(0, 0), Coord(1, 0), Coord(1, -1), Coord(0, 2), Coord(1, 2)), (Coord(0, 0), Coord(-1, 0), Coord(-1, 1), Coord(0, -2), Coord(-1, -2)), @@ -49,9 +49,9 @@ class TetrominoBase(list): def __init__(self): super().__init__(Mino(self.MINOES_COLOR, coord) for coord in self.MINOES_COORDS) self.orientation = 0 - self.last_rotation_point = None + self.rotated_last = False + self.rotation_point_5_used = False self.hold_enabled = True - self.locked = False def ghost(self): return type(self)() @@ -60,8 +60,8 @@ class TetrominoBase(list): class O_Tetrimino(TetrominoBase, metaclass=MetaTetromino): SRS = { - Rotation.CLOCKWISE: (tuple(), tuple(), tuple(), tuple()), - Rotation.COUNTER: (tuple(), tuple(), tuple(), tuple()), + Spin.CLOCKWISE: (tuple(), tuple(), tuple(), tuple()), + Spin.COUNTER: (tuple(), tuple(), tuple(), tuple()), } MINOES_COORDS = (Coord(0, 0), Coord(1, 0), Coord(0, 1), Coord(1, 1)) MINOES_COLOR = Color.YELLOW @@ -73,13 +73,13 @@ class O_Tetrimino(TetrominoBase, metaclass=MetaTetromino): class I_Tetrimino(TetrominoBase, metaclass=MetaTetromino): SRS = { - Rotation.CLOCKWISE: ( + Spin.CLOCKWISE: ( (Coord(1, 0), Coord(-1, 0), Coord(2, 0), Coord(-1, -1), Coord(2, 2)), (Coord(0, -1), Coord(-1, -1), Coord(2, -1), Coord(-1, 1), Coord(2, -2)), (Coord(-1, 0), Coord(1, 0), Coord(-2, 0), Coord(1, 1), Coord(-2, -2)), (Coord(0, -1), Coord(1, 1), Coord(-2, 1), Coord(1, -1), Coord(-2, 2)), ), - Rotation.COUNTER: ( + Spin.COUNTER: ( (Coord(0, -1), Coord(-1, -1), Coord(2, -1), Coord(-1, 1), Coord(2, -2)), (Coord(-1, 0), Coord(1, 0), Coord(-2, 0), Coord(1, 1), Coord(-2, -2)), (Coord(0, 1), Coord(1, 1), Coord(-2, 1), Coord(1, -1), Coord(-2, 2)), diff --git a/tetrislogic/utils.py b/tetrislogic/utils.py index 82200dc..1a5309c 100644 --- a/tetrislogic/utils.py +++ b/tetrislogic/utils.py @@ -15,7 +15,7 @@ class Movement: DOWN = Coord(0, -1) -class Rotation: +class Spin: CLOCKWISE = 1 COUNTER = -1 @@ -28,6 +28,14 @@ class T_Spin: T_SPIN = "T-SPIN" +class T_Slot: + + A = 0 + B = 1 + C = 3 + D = 2 + + class Color: BLUE = 0