Tetris-плитки зберігаються як булева матриця 4x4. Кожен крок обертання має власну матрицю, представлення T -Block буде виглядати так:
[
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
]
Я намагаюся знайти спосіб обчислити положення блоку, коли він обертається і стикається з дошкою (дошка також є матрицею). Оригінальний тетріс просто не дозволяв би обертати блок, коли обертання призведе до зіткнення. Сучасні варіанти гри вирішать зіткнення та перемістять блок у дійсну позицію.
Ось кілька ситуацій, які слід вирішити. Дошка 6x6, червоний = активний блок, сірий = розміщені / зайняті блоки. Щоразу слід здійснювати обертання проти годинникової стрілки. Зелене накладення позначає матрицю для блоку. Стрілка вказує отриману корекцію для вирішення обертання:
- Блок знаходиться в лівій частині дошки. Оскільки блок не може залишити плату, її слід перемістити назад всередину після обертання.
- Блок потрапляє "земля", але ще не розміщена / здійснена. У цьому випадку плитку потрібно перемістити вгору, щоб вирішити зіткнення (у випадку блоку "Я" рух буде на 2 комірки вгору).
- Плитка потрапила б в окуповані блоки, її слід перемістити вліво, щоб вирішити зіткнення.
- Плитку не можна обертати.
Який найкращий підхід для вирішення цієї проблеми? Оптимально рішення має бути загальним, наприклад. робота з довільними блоками матриць 4x4 на дошці розміром із будь-яким розміром