こんにちは夏です。takada-atです。 夏こそ純粋関数型言語ですね(謎)。 みなさまどうぶつしょうぎというゲームをごぞんじでしょうか? http://ja.wikipedia.org/wiki/どうぶつしょうぎ 子どもへの将棋普及のために考えられた簡易版の将棋風ゲームです。 以前社内でこのゲームが流行していた時期に、HaskellによるAIを開発しました。 今回はそのAIとIRC上で対戦できるようにしました。 なんとIRC上でどうぶつしょうぎの対戦ができてしまうゲームAIボットです。アスキーアートによるインターフェースがあまりに素朴なので、思わず昔をなつかしんで故郷の両親に電話をかけてしまう、などの効果もあるのではないかと自負しています。 盤面はこういう感じで表示されます。
21:03 (takada-at) !ds-start
21:03 (dshogi) __A__B__C_
21:03 (dshogi) 1-KR-LI-ZO
21:03 (dshogi) 2 * -HY * 
21:03 (dshogi) 3 * +HY * 
21:03 (dshogi) 4+ZO+LI+KR
21:03 (dshogi) []
21:03 (dshogi) []
!ds-move XXX という発言で、自分の手を操作します。 たとえば、C4にある駒をC3に動かしてみましょう。
21:04 (takada-at) !ds-move C4C3
21:04 (dshogi) __A__B__C_
21:04 (dshogi) 1-KR-LI-ZO
21:04 (dshogi) 2 * -HY * 
21:04 (dshogi) 3 * +HY+KR
21:04 (dshogi) 4+ZO+LI * 
21:04 (dshogi) []
21:04 (dshogi) []
21:04 (dshogi) __A__B__C_
21:04 (dshogi) 1 * -LI-ZO
21:04 (dshogi) 2-KR-HY * 
21:04 (dshogi) 3 * +HY+KR
21:04 (dshogi) 4+ZO+LI * 
21:04 (dshogi) []
21:04 (dshogi) []
すぐにAIが対抗する手を打ってきます。 すべてのコマンドは、!ds- というプレフィックスではじまります。 !ds-help と発言すれば、ヘルプを表示します。 実装の詳細には踏み込みませんが、AIは深さ優先探索です。 Haskellをつかったことないと意味不明だと思いますが、盤面の状態、乱数の種などなどをStateモナドで持ち回す感じの実装になってます。 HaskellによるIRCボットの実装については以下を参考にしました。 http://www.haskell.org/haskellwiki/Roll_your_own_IRC_bot あとIRCメッセージのパーサーライブラリを利用しています。 http://hackage.haskell.org/package/irc

■使い方

dshogi.conf を適当に編集して、サーバーとかチャンネルを指定します。 以下のコマンドで実行します。 念のためWindows環境でビルドしたexeファイルとLinux環境でビルドしたバイナリの両方をつけました。 ./DshogiIRC dshogi.conf

■ビルド方法

万が一ビルドしてみたい方がいれば以下の方法でお願いします。 ちなみに手元の環境では、ghcのバージョンは6.12.1。ircライブラリだけインストールすればビルドできました。
runhaskell Setup.hs configure
runhaskell Setup.hs build
cp dist/build/DshogiIRC/DshogiIRC .
ソースコードは以下にあります。 http://lab.klab.org/young/wp-content/uploads/data/code/dshogi.tar.gz