Classe dos Tetraminos
class Tetramino(object):
#classe pai que todas as figuras vão herdar
def __init__(self):
quadrado1 = Quadrado();
quadrado2 = Quadrado();
quadrado3 = Quadrado();
quadrado4 = Quadrado();
self.figura = [quadrado1, quadrado2, quadrado3, quadrado4]
def girarDireita(self,i,j):
for k in self.figura:
k.girarDireita();
self.regularCoordenadas(i,j);
def regularCoordenadas(self,i,j):
#manter as coordenadas sempre positivas após uma rotação
i = i;
j = j;
minx = self.figura[self.acharPrimeiroQuadrado()].x;
miny = self.figura[self.acharPrimeiroQuadrado()].y;
if minx < j:
for k in self.figura:
k.x += j - minx;
if minx > j:
for k in self.figura:
k.x -= minx - j;
if miny < i:
for k in self.figura:
k.y += i - miny;
if miny > i:
for k in self.figura:
k.y -= miny - i;
def regular(self, i,j):
#coloca o quadrado mais abaixo da lista na posição verificado
for a in self.figura:
a.x += j;
a.y += i;
def deregular(self,i,j):
#retorna a peça para a posição original
for a in self.figura:
a.x -= j;
a.y -= i;
self.regularCoordenadas(0,0)
def acharPrimeiroQuadrado(self):
minx = 10;
miny = 10;
indice = 0;
for i in range(0, len(self.figura)):
if self.figura[i].y < miny:
miny = self.figura[i].y;
for i in range(0, len(self.figura)):
if self.figura[i].y == miny:
if self.figura[i].x < minx:
minx = self.figura[i].x;
indice = i;
return indice;
def inserirTabuleiro(self, tabuleiro):
z = 0;
giradas = 0;
for i in range(0, tabuleiro.lado):
for j in range(0, tabuleiro.lado):
if tabuleiro.spaceStatus(i,j):
#se o próximo espaço é vázio, o programa testa se a peça cabe, se não roda e testa novamente até esgotar as opções.
self.regular(i,j);
if (tabuleiro.spaceStatus(self.figura[0].y, self.figura[0].x) and tabuleiro.spaceStatus(self.figura[1].y, self.figura[1].x) and
tabuleiro.spaceStatus(self.figura[2].y, self.figura[2].x) and tabuleiro.spaceStatus(self.figura[3].y, self.figura[3].x)):
tabuleiro.ocuparSpace(self.figura[0].y, self.figura[0].x, z);
tabuleiro.ocuparSpace(self.figura[1].y, self.figura[1].x, z);
tabuleiro.ocuparSpace(self.figura[2].y, self.figura[2].x, z);
tabuleiro.ocuparSpace(self.figura[3].y, self.figura[3].x, z);
z += 1;
else:
self.girarDireita(i,j);
giradas +=1;
if (tabuleiro.spaceStatus(self.figura[0].y, self.figura[0].x) and tabuleiro.spaceStatus(self.figura[1].y, self.figura[1].x) and
tabuleiro.spaceStatus(self.figura[2].y, self.figura[2].x) and tabuleiro.spaceStatus(self.figura[3].y, self.figura[3].x)):
tabuleiro.ocuparSpace(self.figura[0].y, self.figura[0].x, z);
tabuleiro.ocuparSpace(self.figura[1].y, self.figura[1].x, z);
tabuleiro.ocuparSpace(self.figura[2].y, self.figura[2].x, z);
tabuleiro.ocuparSpace(self.figura[3].y, self.figura[3].x, z);
z += 1;
else:
self.girarDireita(i,j);
giradas +=1;
if (tabuleiro.spaceStatus(self.figura[0].y, self.figura[0].x) and tabuleiro.spaceStatus(self.figura[1].y, self.figura[1].x) and
tabuleiro.spaceStatus(self.figura[2].y, self.figura[2].x) and tabuleiro.spaceStatus(self.figura[3].y, self.figura[3].x)):
tabuleiro.ocuparSpace(self.figura[0].y, self.figura[0].x, z);
tabuleiro.ocuparSpace(self.figura[1].y, self.figura[1].x, z);
tabuleiro.ocuparSpace(self.figura[2].y, self.figura[2].x, z);
tabuleiro.ocuparSpace(self.figura[3].y, self.figura[3].x, z);
z += 1;
else:
self.girarDireita(i,j);
giradas +=1;
if (tabuleiro.spaceStatus(self.figura[0].y, self.figura[0].x) and tabuleiro.spaceStatus(self.figura[1].y, self.figura[1].x) and
tabuleiro.spaceStatus(self.figura[2].y, self.figura[2].x) and tabuleiro.spaceStatus(self.figura[3].y, self.figura[3].x)):
tabuleiro.ocuparSpace(self.figura[0].y, self.figura[0].x, z);
tabuleiro.ocuparSpace(self.figura[1].y, self.figura[1].x, z);
tabuleiro.ocuparSpace(self.figura[2].y, self.figura[2].x, z);
tabuleiro.ocuparSpace(self.figura[3].y, self.figura[3].x, z);
z += 1;
else:
self.girarDireita(i,j);
giradas+=1;
while giradas < 4:
self.girarDireita(i,j);
giradas +=1;
giradas = 0;
self.deregular(i,j);
if z > 5:
z = 0;
A classe Tetramino cria uma lista com 4 objetos do tipo Quadrado. A inserção do tabuleiro é feita da seguinte forma.
Nested Loop por i e j e se a célula está vazia ele verifica se a figura entra no tabuleiro. Se não, a figura gira. O programa gira a figura 3 vezes para verificar e depois gira mais uma para que a figura sempre comece a próxima iteração do loop na sua posição original. A variável giradas foi criada para voltar a figura para a posição original caso ela não complete o ciclo nos Ifs.