連載目次
- 第0回: 概要 (この記事)
- 第1回: Gameモナドの基本
先ほど、free-gameというライブラリをアップロードしました。free-gameは、世界で一番柔軟かつ簡単にゲームなどのGUIを作れるライブラリを目指しています。
Freeモナドとは
Freeモナドは、Functorを与えると自動的にモナドを生成してくれる構造で、これを使うことで、アクションをデータの一つとして柔軟に扱えるようになります。去年の10月ごろからにわかに日本のHaskeller間で流行り始めた、今一番熱いモナドです[要出典]。Freeモナドそのものに関してはこれらの記事を読みましょう。
- Haskell for all: Why free monads matter
- そろそろFreeモナドに関して一言いっとくか
- 型クラスとモナドと Free モナド - あどけない話
- Freeモナドって何なのさっ!? - capriccioso String Creating(Object something){ return My.Expression(something); }
free-gameの軌跡
私はしばらく前から、Haskellでゲームを作るためのライブラリとしてglossを推していたのだが…
DXLibに さよならバイバイ オレはGlossと 旅に出る
— 高階 文(ふみ)さん (@fumieval) 8月 22, 2012
@myuon_myon Glossです。世界で一番柔軟かつ簡単にグラフィックや入出力ができるライブラリだと思います hackage.haskell.org/package/gloss-…
— 高階 文(ふみ) (@fumieval) Septembre 15, 2012
glossの仕様に結構不満を抱いていた。
Glossの入力がものすごいクソ。Shiftキー単体の状態を取得できないとか…
— 高階 文(ふみ)さん (@fumieval) 8月 23, 2012
Glossの、状態の更新と出力の生成を完全に分離してしまう仕様は実はあんまり好きではない
— 高階 文(ふみ)さん (@fumieval) 9月 25, 2012
そんなある日、私はFreeモナドと出会う。
"cabal install free" 哲学的なコマンドだな…
— 高階 文(ふみ)さん (@fumieval) 10月 10, 2012
FunctorをFreeモナドにシュウウゥゥゥゥーーッ!超!エキサイティン!
— 高階 文(ふみ)さん (@fumieval) 10月 11, 2012
そして私は、その記述力をゲーム開発に生かそうとライブラリの開発に取り掛かった。
Freeモナドでゲームを記述するライブラリを作っている。打倒Gloss
— 高階 文(ふみ)さん (@fumieval) 10月 13, 2012
そして…ついにプロトタイプが完成した。
Freeモナドで作りました twitter.com/fumieval/statu…
— 高階 文(ふみ) (@fumieval) Novembre 1, 2012
紆余曲折を経てOpenGLに対応し、今のfree-gameができたのである。
Haskellでゲームを作るならfree-game!と胸を張って言えるようなものにしていきたい
— 高階 文(ふみ)さん (@fumieval) 11月 6, 2012
今なら胸を張って言える。「Haskellでゲームを作るならfree-game!」と。
インストール
cabal update
cabal install free-game
これだけ。
補足
- Windows環境においてLexical Errorが発生した場合、set LANG=Cとしてからリトライするとうまくいく。
- Ubuntuに入れる際に必要になったもの: libgl-mesa-dev, libglu1-mesa-dev, zlib1g-dev, libxrandr-dev
次回から、free-gameでどのようにしてゲームを作るのかをコードを交えて解説していきたいと思います。