Помогите пожалуйста, этот код из игры тетрис, по идее в конце этого кода создается временная матрица tempShape, для поворота игрового поля, то есть поворачивается не фигура, а игровое поле, я не могу понять каким образом происходит поворот, извините но я чайник. Поворот линий и кубов ясен, а остальных фигур?
class Shape
{
public:
boolcells[4][4]; // 4×4 matrix that conatains the shape
ShapeTypecurType; // current type of shape
voidNewShape( ShapeType );
voidRotate();
voidClearShape( bool c[4][4] ); // clear the 4×4 matrix
};
void Shape::ClearShape( bool c[4][4] )
{
for( int i=0; i<4; i++)
for( int j=0; j<4; j++)
c[i][j]=false;
}
void Shape::NewShape( ShapeType type )
{
ClearShape(cells);
int i;
curType=type;
switch(type)
{
case line:for(i=0; i<4; i++)
cells[0][i]=true;
break;
case square:for(i=0; i<2; i++)
for(int j=0; j<2; j++)
cells[i][j]=true;
break;
case leftL:for(i=0; i<3; i++)
cells[0][i]=true;
cells[1][2]=true;
break;
case rightL:for(i=0; i<3; i++)
cells[0][i]=true;
cells[1][0]=true;
break;
case pyramide:for(i=0; i<3; i++)
cells[1][i]=true;
cells[0][1]=true;
break;
case leftZ:cells[0][0]=true; cells[1][0]=true;
cells[1][1]=true; cells[2][1]=true;
break;
case rightZ:cells[0][1]=true; cells[1][0]=true;
cells[1][1]=true; cells[2][0]=true;
break;
}
}
void Shape::Rotate()
{
switch(curType)
{
case line:
{
int k;
if(cells[0][0]==true)
{
ClearShape(cells);
for(k=0; k<4; k++)
cells[k][1]=true;
}
else
{
ClearShape(cells);
for(k=0; k<4; k++)
cells[0][k]=true;
}
}
case square: return;
}
bool tempShape[4][4];
ClearShape(tempShape);
for(int j=3-1 , c=0; j>=0 ; j– , c++)
for(int i=0; i<3; i++)
tempShape[c][i]=cells[i][j];
ClearShape(cells);
for(int f=0; f<3; f++)
for(int d=0; d<3; d++)
cells[f][d]=tempShape[f][d];
}