2010-04-20 6 views
0

Для университета мы должны написать игру (язык - это modula2, мало шансов, что вы это знаете). Каждое тетромино определяется через центральную часть и 3 относительные части, Теперь, когда дело доходит до вращения, я просто вращаю относительные блоки (линейную алгебру).tetris rotation

Я спрашиваю себя, как обращаться с поворотами, которые пользователь делает, когда кусок уже «приземлился», потому что у пользователя осталось немного времени, чтобы быстро переместить его скорлупу в нужную позицию, но в версиях тетриса в сети вы можете «вращать» другие части, но я, похоже, не получаю ее с моим вращением.

Какую часть мне нужно вращать? есть ли рекомендации? Спасибо

+4

Я не знаю Modula-2, но я не думаю, что для «поворота» части тетриса необходима линейная алгебра. – kennytm

+0

Я бы сказал, что другие версии сломаны. В «истинном» тетрисе у вас нет последней секунды секунды, чтобы повернуть, как только кусок приземлился. – meagar

+0

@Kenny: Возможно, это требование для этого конкретного проекта. – Pops

ответ

3

Если я правильно понял ваш вопрос, нет правильного ответа. Можете ли вы «переместиться» через другие части, зависит от рекомендаций для вашего конкретного задания; можно написать код, который позволяет это и код, который этого не делает.

9

Tetris Wiki определяет один способ эти так называемые wall kicks совершающиеся:

Стены удар происходит, когда игрок поворачивает кусок, когда нет места существует в квадратах, где что Tetromino обычно занимает после поворота. Чтобы компенсировать, игра устанавливает определенное количество альтернативных пространств для тетромино. [...] Простейший алгоритм ударения стены [...] - это попробуйте переместить тетромино на одно место справа, а затем одно место влево и провалиться, если ничего не сделать.

Есть и другие способы, например, один указанный Super Rotation System санкционированного Tetris Guideline. Эта система использует a set of tables, чтобы определить возможные удары по стене.

+0

+1 для обмена информацией о существовании Tetris Wiki. – Cheeso

0

Учитывая то, что поле в тетрис куски падают в матрицу,

1) Если вы хотите, чтобы дать немного времени для пользователя, чтобы вращать его и использовать свой алгоритм

  • Установите таймер, который запускается при ваш самый низкий блок находится на линии, смежной с линией, в той же колонке уже есть кусок.
  • Если пользователь попытается переместить эту деталь до окончания таймера, проверьте, есть ли блок на линии и столбе, на котором может быть место одного из блоков подвижной части. Если она уже заполнена, вы не можете переместить его

2) Если вы хотите, чтобы дать немного времени для пользователя, чтобы повернуть его и с помощью другого алгоритма

  • вы можете рассмотреть ваш блок, как 3x3 и повернуть его, хотя блок 2x2, даже если этого не существует на куске (например, на куске с форматом L). Поэтому вам просто нужно сделать то, что я сказал на 2-й кнопке (1), и все должно быть хорошо! Это более простой алгоритм ИМХО.
0

Прежде всего, вы можете уточнить условия в своем вопросе. В первом абзаце кажется, что «кусок» - это то, что другие могут назвать «плиткой»; т. е. каждый тетромино состоит из четырех «кусков» или «плиток». Но тогда в конце абзаца вы называете это «блоком».И затем во втором абзаце кажется, что «кусок» является синонимом «тетромино»: «кусок приземлился», «переместите его кусок». Итак, в вашем вопросе, что вы имеете в виду? Возможно, «Какая плитка должна вращаться вокруг тетромино?»

Если это действительно ваш вопрос, ответ будет определяться реализацией. Если вы попробуете разные версии игры, вы можете увидеть, что в некоторых части «I» будут раскачиваться влево-вправо или вверх-вниз, когда вы переносите их через два оборота (черепица вращения фиксируется на тетромино), а в другие это не будет (вращение переключается между двумя центральными плитами так, что поворот CW будет иметь тот же эффект, что и вращение CCW). Частицы «S» и «Z» также будут либо колебаться, либо нет. Однако, если они не будут качаться, вы можете обнаружить, что кусок будет способен вращаться, когда он находится напротив левой стены, но не в том случае, если он направлен вправо, хотя ситуации должны быть симметричными. И квадратный кусок, если вы оставите его с фиксированной черепицей, будет вращаться вокруг угла, когда вы, вероятно, хотите, чтобы он (по-видимому) не вращался вообще. Я никогда не видел реализации, которая по крайней мере не позаботится об этом!