Os Tetris-Tiles são armazenados como uma matriz booleana 4x4. Cada etapa de rotação tem sua própria matriz, a representação do T- Block seria assim:
[
0, 0, 0, 0,
0, 1, 1, 1,
0, 0, 1, 0,
0, 0, 0, 0
],
[
0, 0, 1, 0,
0, 0, 1, 1,
0, 0, 1, 0,
0, 0, 0, 0
],
[
0, 0, 1, 0,
0, 1, 1, 1,
0, 0, 0, 0,
0, 0, 0, 0
],
[
0, 0, 1, 0,
0, 1, 1, 0,
0, 0, 1, 0,
0, 0, 0, 0
]
Estou tentando encontrar uma maneira de calcular a posição do bloco quando ele está sendo girado e colide com a placa (a placa também é uma matriz). O Tetris original simplesmente não permitiria a rotação de um bloco quando a rotação resultaria em uma colisão. As variantes modernas do jogo resolverão a colisão e moverão o bloco para uma posição válida.
Aqui estão algumas situações que devem ser resolvidas. O cartão é 6x6, vermelho = bloco ativo, cinza = blocos colocados / ocupados. A cada vez, uma rotação no sentido anti-horário deve ser realizada. A sobreposição verde indica a matriz para o bloco. A seta indica a correção resultante para resolver a rotação:
- O bloco está no lado esquerdo do tabuleiro. Como o bloco não pode sair do tabuleiro, ele deve ser movido de volta para dentro após uma rotação.
- O bloco atinge o "solo", mas ainda não foi colocado / confirmado. Nesse caso, o bloco deve ser movido para cima para resolver a colisão (no caso de um bloco "I", o movimento seria 2 células acima).
- O bloco atingirá os blocos ocupados, deve ser movido para a esquerda para resolver a colisão.
- O bloco não pode ser girado.
Qual seria a melhor abordagem para resolver este problema? Idealmente, a solução deve ser genérica, por exemplo. trabalhe com blocos de matriz 4x4 arbitrários em uma placa de tamanho e população arbitrariamente.