hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

Scalaでライフゲームを作りました

はてなの京都オフィスで行われているScala Hackathonに参加しています.
昨日はFizzBuzzを作るところまではできたので,今日はコンソール上で動作するライフゲームを作りました.

http://gyazo.com/1a24a30681beb8f9157410982f24fd21.png

特徴

セルが広がると,フィールドの広さが動的に変化します.従って,実行前にフィールドの広さを指定したり,セルが画面外に出たときにどうするか,などと気にする必要がありません.
セルが生存している付近のみ表示することができます.このことによって,フィールドが無限に広がって,表示ができなくなる,という事故を防ぎます.
http://gyazo.com/1dd9237b8c2076d3cb1d99a21c95df78.png
この例では,フィールドの(3,3)から(7,7)までの領域が表示されています.

実行方法

% fsc LifeGame.scala
% scala LifeGame glider

これでグライダーが出ます.
起動時にオプションを渡すと,少しいろいろできます.

blinker
ブリンカーを出す
glider
グライダーを出す
glidergun
グライダーガンを出す
use_cut_field
セルが生存している付近のみ切り出して表示する

感想

ライフゲームという実用的なアプリケーションを構成することができました.
新たな言語なので,書き方や言語仕様などで混乱することが予想されていましたが,普通のオブジェクト指向だと思って書くと,普通に書くことができました.
また,オブジェクト指向でありながら,mapやcountといった,関数的な操作を織り交ぜて書くことができるので,複雑なデータ処理も自然に記述することができました.

今回は期限内に動かすことを第一に作ったので,あまり言語を深く学ぶことはできませんでしたが,Scalaはおもしろそうなので,今後も引き続き勉強していきたいと思います.


Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)

Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)