refactor: add base class for all game objects
This commit is contained in:
14
entity/Entity.py
Normal file
14
entity/Entity.py
Normal file
@@ -0,0 +1,14 @@
|
||||
import pygame
|
||||
|
||||
class Entity:
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def update(self) -> None:
|
||||
pass
|
||||
|
||||
def draw(self, surface: pygame.Surface) -> None:
|
||||
pass
|
||||
|
||||
def collide(self, entity) -> bool:
|
||||
pass
|
||||
@@ -1,19 +1,27 @@
|
||||
from typing import List, Tuple
|
||||
import pygame
|
||||
import copy
|
||||
|
||||
from entity.Entity import Entity
|
||||
from util.ConfigurationManager import ConfigurationManager
|
||||
|
||||
'''
|
||||
For information on the Tetris piece Tetromino go here:
|
||||
https://tetris.fandom.com/wiki/Tetromino
|
||||
'''
|
||||
class Piece: # TODO game objects base class / interface?
|
||||
class Piece(Entity):
|
||||
|
||||
def __init__(self, shape, position, color):
|
||||
def __init__(self, shape: Tuple, position: Tuple, color: str):
|
||||
super().__init__()
|
||||
|
||||
self.color = color
|
||||
self.points = self.__get_points(shape, position)
|
||||
self.center = self.__get_center(shape, position)
|
||||
|
||||
def draw(self, surface):
|
||||
self.previous_points = None
|
||||
self.previous_center = None
|
||||
|
||||
def draw(self, surface: pygame.Surface) -> None:
|
||||
tile_size = ConfigurationManager.configuration["engine"]["tile-size"]
|
||||
hex_color = ConfigurationManager.configuration["color"]["border"] # TODO should abstract out color call?
|
||||
|
||||
@@ -24,7 +32,10 @@ class Piece: # TODO game objects base class / interface?
|
||||
pygame.draw.polygon(surface, base_color, sub_points, 0)
|
||||
pygame.draw.polygon(surface, border_color, sub_points, max(tile_size // 6, 1))
|
||||
|
||||
def move(self, vector):
|
||||
def move(self, vector: Tuple) -> None:
|
||||
self.previous_points = copy.deepcopy(self.points)
|
||||
self.previous_center = copy.deepcopy(self.center)
|
||||
|
||||
self.center[0] += vector[0]
|
||||
self.center[1] += vector[1]
|
||||
|
||||
@@ -37,7 +48,10 @@ class Piece: # TODO game objects base class / interface?
|
||||
For more information on a rotation of a piece go here:
|
||||
https://gamedev.stackexchange.com/questions/17974/how-to-rotate-blocks-in-tetris
|
||||
'''
|
||||
def rotate(self):
|
||||
def rotate(self) -> None:
|
||||
self.previous_points = copy.deepcopy(self.points)
|
||||
self.previous_center = copy.deepcopy(self.center)
|
||||
|
||||
for sub_points in self.points:
|
||||
for point in sub_points:
|
||||
h = point[0] - self.center[0]
|
||||
@@ -46,11 +60,13 @@ class Piece: # TODO game objects base class / interface?
|
||||
point[0] = (k * -1) + self.center[0]
|
||||
point[1] = h + self.center[1]
|
||||
|
||||
def colliding(object):
|
||||
pass
|
||||
def revert(self) -> None:
|
||||
if self.previous_points and self.previous_center:
|
||||
self.points = self.previous_points
|
||||
self.center = self.previous_center
|
||||
|
||||
def __get_points(self, shape, position):
|
||||
tile_size = ConfigurationManager.configuration["engine"]["tile-size"]
|
||||
def __get_points(self, shape: Tuple, position: Tuple) -> List:
|
||||
tile_size = ConfigurationManager.configuration["engine"]["tile-size"]
|
||||
|
||||
points = []
|
||||
for square in shape[:-1]:
|
||||
@@ -62,7 +78,7 @@ class Piece: # TODO game objects base class / interface?
|
||||
|
||||
return points
|
||||
|
||||
def __get_center(self, shape, position):
|
||||
def __get_center(self, shape: Tuple, position: Tuple) -> List:
|
||||
tile_size = ConfigurationManager.configuration["engine"]["tile-size"]
|
||||
center = shape[-1]
|
||||
|
||||
|
||||
@@ -1,23 +1,25 @@
|
||||
from typing import List, Tuple
|
||||
import pygame
|
||||
|
||||
from entity.Entity import Entity
|
||||
from util.ConfigurationManager import ConfigurationManager
|
||||
|
||||
class Well: # TODO game objects base class / interface?
|
||||
class Well(Entity):
|
||||
|
||||
WIDTH = 10 # standard tetris well width, should not be changed
|
||||
HEIGHT = 20 # standard tetris well height, should not be changed
|
||||
|
||||
def __init__(self, position):
|
||||
def __init__(self, position: Tuple):
|
||||
self.points = self.__get_points(position)
|
||||
|
||||
def draw(self, surface):
|
||||
def draw(self, surface: pygame.Surface) -> None:
|
||||
well_color_hex = ConfigurationManager.configuration["color"]["border"] # TODO Should abstract out color call?
|
||||
well_color = pygame.Color(well_color_hex)
|
||||
|
||||
for sub_points in self.points:
|
||||
pygame.draw.polygon(surface, well_color, sub_points, 0)
|
||||
|
||||
def __get_points(self, position):
|
||||
def __get_points(self, position: Tuple) -> List:
|
||||
tile_size = ConfigurationManager.configuration["engine"]["tile-size"]
|
||||
|
||||
shape = []
|
||||
|
||||
Reference in New Issue
Block a user