вращение тетриса - PullRequest
       23

вращение тетриса

0 голосов
/ 20 апреля 2010

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

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

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

Ответы [ 4 ]

9 голосов
/ 20 апреля 2010

В Tetris Wiki указан один из способов выполнения так называемых настенных ударов :

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

Существуют и другие способы, например, указанный в Super Rotation System , предписанной Tetris Guideline . Эта система использует набор таблиц для определения возможных ударов по стене.

3 голосов
/ 20 апреля 2010

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

0 голосов
/ 21 апреля 2010

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

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

0 голосов
/ 20 апреля 2010

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

1) Если вы хотите дать пользователю немного времени для его поворота и использования вашего алгоритма

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

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

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