Как написать Tetris в Scala? (обзор кода)

Сегодня 25-летие Tetris. Я считаю, что писать клон Tetris - один из лучших способов познакомиться с новым языком или платформой. Это не совсем тривиально, и он хорошо подходит для изучения специфических для языка конструкций, таких как итераторы и замыкания.

Я слышал о Scala и, наконец, решил прочитать некоторые документы и написать клон Tetris. Итак, это мой первый Scala код. Я попытался использовать функциональные конструкции, но я уверен, что есть много вещей, которые я могу улучшить, чтобы сделать это больше Scala. Пожалуйста, дайте мне предложения, используя комментарий. Также приветствуются и другие представления клон Tetris в Scala.

Я знаю, что сам вопрос несколько субъективен, но я думаю, что это имеет какое-то значение, поскольку другие могут использовать это как примерный (или анти-примерный) код.

Изменить: Позвольте мне перефразировать вопрос. Что я могу сделать, чтобы сделать код более Scala -ish?

Ответ 1

Edit4

Переместил исходный (2009) код, который у меня был здесь, в .

Недавно (август 2012) я написал серию сообщений в блоге о написании тетрикса в Scala. Надеюсь, он ответил на некоторые из вопросов, которые я задал три года назад.

Изменить. Обновлен код для использования Scala Swing API, как предлагается @thatismatt. Кроме того, я обнаружил, что способ изучения кодировки стиля Scala заключается в том, чтобы прочитать книгу Мартина Одерски под названием Программирование в Scala, По существу, способ Scala постепенно смещается от императивного стиля к функциональному стилю, используя неизменную структуру данных, функции без побочных эффектов, сопоставление образцов, черты и т.д.

Edit2: обновлен код для использования неизменяемой структуры данных и т.д. Например, Block#rotate теперь возвращает новый объект Block вместо его модификации.

Edit3: обновлен код для работы с Scala 2.8 RC3.

Ответ 2

Небольшой комментарий, который я бы сделал, заключается в том, что вы используете java.swing вместо scala.swing. Перемещение может помочь вам получить более функциональный опыт, но это не идеально, поскольку это всего лишь обертка вокруг java-библиотек. И кривая обучения, очевидно, будет круче, если вы придете с фона Java... хотя, возможно, это и есть то, что вам нужно!