2009-06-06 7 views
11

今日の25歳の誕生日はTetrisです。 私はテトリスクローンを書くことは、新しい言語やプラットフォームに慣れ親しむ最良の方法の1つだと信じています。それは完全に自明ではなく、イテレータやクロージャのような言語固有の構文を学習することにも適しています。Scalaにテトリスを書くには?

私はScalaについて聞いており、最終的にはいくつかのドキュメントを読んでテトリスクローンを書くことに決めました。これが私の最初のScalaコードです。私は機能的な構造を使用しようとしましたが、スカラの方法をさらに進めるために改善できることがたくさんあると確信しています。コメントを使って私に提案してください。また、Scalaのテトリスクローンの他の提出も歓迎します。

私は実際の質問自体は幾分主観的であることを知っていますが、他の人がこれを例(または反例)コードとして使用できるので、これは価値があると思います。

編集:私は質問を言い換えることができます。コードをより多く作るために私は何ができますか?Scala-ish?

+1

あなたの質問は何ですか? SOはコードレビューサイトではありません。 –

+4

私はこれがrefactormycode.comに属していると思う。 – finnw

+0

テトリスの基準を守って、良いテトリスのクローンを書くことはあまり簡単ではない。たとえば、標準スキームでは、グリッドの交点を中心に回転するブロックや、セルの中心を中心に回転するブロックがあります。 – ziggystar

答えて

19

Edit4

は、私がgistにここに持っていた、元(2009)のコードを移動しました。

最近(2012年8月)Scalaでテトリスを書く際の一連のブログ記事を書きました。 3年前に私が尋ねたいくつかの質問に答えることを願っています。

編集@thatismattによって示唆されているようにScalaのSwing APIを使用するコードを更新しました。また、Scalaスタイルのコーディングを学ぶ方法は、Martin Oderskyの書籍Programming in Scalaを読むことです。本質的には、Scalaの道は徐々にEDIT2、不変のデータ構造を使用して機能的なスタイルに不可欠なスタイルからシフト副作用なしに機能し、パターンマッチング、特徴など

です:不変のデータ構造を使用するために、コードを更新しました例えば、Block#rotateは、自身を変更する代わりに新しいBlockオブジェクトを返すようになりました。

Edit3:Scala 2.8 RC3で動作するようにコードが更新されました。

+1

+1スカラーに関するほとんどの質問にお答えします。 – stacker

+0

Scala 2.8 RC2ではコンパイルされません。残念なことに、このような素晴らしい例があります。 –

+1

@ŁukaszLew、今すぐお試しください。それはRC3で動作するはずです。 –

3

小さなコメントは、scala.swingの代わりにjava.swingを使用していることです。上に移動すると、より機能的な体験を得るのに役立つかもしれませんが、それは完璧ではありません。java libsのラッパーです。そして、あなたがJavaのバックグラウンドから来ているならば、学習曲線は明らかに急であろう。

+0

javax.swingを使用すると、コンパイルに役立ちます。 – AlBlue

関連する問題