Пишу тетрис, и столкнулся с проблемой поворота фигуры, а точнее метод поворота, почему то не работает. Подскажите в чем ошибка. Если я убираю метод rotate() из метода control_game(), и запускаю его в цикле, то все прекрасно работает. Но меня интересует более правильная реализация.
import pygame
import random
from pygame.locals import *
import sys
class Control:
def __init__(self):
self.play = True #Переменная для остановки основного цикла игры
def control_game(self,shape):
"""Все управление игрой"""
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_ESCAPE:
self.play = False
elif event.key == K_DOWN:
shape.shape_form.rotate
class Shape:
def __init__(self):
self.shape_form = Shape_T()
self.color_red = pygame.image.load("images/redbrick.png")
self.x = 250
self.y = 25
self.shape_list = ["Shape_T", "Shape_L"]
def get_shape(self):
name = random.choice(self.shape_list)
if name == "Shape_T":
shape = Shape_T()
elif name == "Shape_L":
shape = Shape_L()
return shape
class Shape_T(Shape):
def __init__(self):
super().__init__()
self.list_coordinate = [[self.x, self.y], [self.x - 25, self.y - 25], [self.x, self.y - 50], [self.x, self.y - 25]]
self.position = "Left"
def rotate(self):
"""Переворачивает фигуру на 90 градусов"""
if self.position == "Left":
self.list_coordinate[0] = [self.list_coordinate[0][0] + 25,self.list_coordinate[0][1] - 25]
self.position = "Up"
elif self.position == "Up":
self.list_coordinate[1] = [self.list_coordinate[1][0] + 25,self.list_coordinate[1][0] +25]
self.position = "Right"
elif self.position == "Right":
self.list_coordinate[2] = [self.list_coordinate[2][0] - 25,self.list_coordinate[2][1] + 25]
self.position = "Down"
elif self.position == "Down":
self.list_coordinate[0] = list(self.list_coordinate[1])
self.list_coordinate[1] = list(self.list_coordinate[2])
self.list_coordinate[2] = [self.list_coordinate[2][0] - 25,self.list_coordinate[2][1] - 25]
self.position = "Left"
class Shape_L(Shape):
def __init__(self):
super().__init__()
self.list_coordinate = [[self.x + 25,self.y],[self.x,self.y],[self.x,self.y - 25],[self.x,self.y - 50]]
self.position = "Right"
def rotate(self):
"""Переворачивает фигуру на 90 градусов"""
if self.position == "Right":
self.list_coordinate[3] = [self.list_coordinate[3][0] + 25,self.list_coordinate[3][1] - 25]
self.list_coordinate[0][0] += 50
self.list_coordinate[1] = [self.list_coordinate[1][0] + 25,self.list_coordinate[1][1] - 25]
self.position = "Down"
elif self.position == "Down":
self.list_coordinate[3] = [self.list_coordinate[0][0] - 25,self.list_coordinate[0][1] + 25]
self.list_coordinate[0][1] -= 50
self.list_coordinate[1] = [self.list_coordinate[2][0] + 25,self.list_coordinate[2][1] - 25]
self.position = "Left"
elif self.position == "Left":
self.list_coordinate[0][0] += 50
self.list_coordinate[1] = [self.list_coordinate[1][0] + 25,self.list_coordinate[1][1] + 25]
self.list_coordinate[3] = [self.list_coordinate[3][0] - 25,self.list_coordinate[3][1] - 25]
self.position = "Up"
elif self.position == "Up":
self.list_coordinate[0][1] += 50
self.list_coordinate[1] = [self.list_coordinate[1][0] - 25,self.list_coordinate[1][1] + 25]
self.list_coordinate[3] = [self.list_coordinate[3][0] + 25,self.list_coordinate[3][1] - 25]
self.position = "Right"
pygame.init()
shape = Shape()
shape.shape_form = shape.get_shape()
control = Control()
sc = pygame.display.set_mode((400, 800))
sc.fill((100, 150, 200))
flag = None
var = 0
while control.play:
control.control_game(shape)
sc.fill((100, 150, 200))
for brick in shape.shape_form.list_coordinate:
sc.blit(shape.color_red, (brick[0], brick[1]))
if var % 20 == 0:
shape.shape_form.list_coordinate[0][1] += 1
shape.shape_form.list_coordinate[1][1] += 1
shape.shape_form.list_coordinate[2][1] += 1
shape.shape_form.list_coordinate[3][1] += 1
var += 1
pygame.display.flip()