slackで将棋を指したい
@at_grandpa です。
この記事はVOYAGE GROUP エンジニアブログ : Advent Calendar 2014の10日目の記事になります。
今回のテーマ
最近、将棋がマイブームです。 マイブーム過ぎて、こんなイベントを開催するくらいです。
将棋現状確認会 将棋現状確認会#2 〜第二回 AJITO王決定戦〜
いずれも白熱した闘いが繰り広げられ、とても盛り上がりました。やはり実戦は勉強になりますね。
#3も開催する予定なので、ご興味ある方は是非。zusaarで呼びかけを行う予定です。
さて、今回のテーマは Slack x 将棋 です。
発端は、
- とにかくサクッと指したかった
- 今まで社内の方と指すことが多かった
- 社内LT大会(今から約3ヶ月前)の発表が近かった(今回のものは3ヶ月前に作ったものです)
です。
「よし、slackで将棋を指せるネタにしよう」
ということで、hubotを使って実装することにしました。
そして出来上がったのがこちらです。(画像は Public Domain のものを利用させていただきました。)
powered by hubot
helpは次のようになっています。
slack上で at_grandma help
、もしくは ag h
と打てばhelpを見ることができます。
--------------------------------------------- Shogi on Slack Bot 'at_grandma' ver 0.2 --------------------------------------------- at_grandma commands are: at_grandma (help|h) ag (help|h) このhelp at_grandma shogi <command> ags <command> - (req|re|r) 対戦リクエストを発信する - (ok|o) 対戦リクエストを受け付ける - (board|bo|b) 現在の盤面情報を表示する - (kifu|ki|k) 直近の棋譜を表示する - (init|ini|i) すべてを初期化する - <持つ座標> <打つ座標><打つ駒>[成] 動かしたい駒の座標を指定し、次に指定した場所に打つ ex1) ags 77 76歩 ex2) ags 74 73歩成 (成る場合は「成」をつける) ex3) ags 00 52金 (持ち駒は00指定) - (help|h) 最善手っぽいものを教えてくれる 使える駒: 歩 と 香 杏 桂 圭 銀 全 金 角 馬 飛 龍 玉 ※注 このシステムはBonanzaとは一切関係ありません。 (いずれ関係は持ちたい)
一連の操作を追ってみる
ちょっと対局を見てみましょう。 (自分対自分です。対grandmaではありません。grandmaは仕切り役です。)
優しく語りかけてくれますね。
それでは指してみましょう。
なんと優しい声掛け。やる気も出ますね。
しかもちゃんとキレイな図を表示してくれます。
局面は進んで、このようになりました。
「あたしは読んでたわよ。」
さすが grandma 。将棋も嗜んでいらっしゃる。
さて、ここまでくると現状の棋譜を出力したいですよね。
そんな時も grandma に聞けばよいのです。
このようにしっかり教えてくれます。(「直」や「右」がないのはご愛嬌)
さてさて、局面はさらに進み以下のようになりました。
次は先手番(手前側)です。
ここでちょっとズルをしてみましょう。
いきなり玉を取っちゃう作戦!(・ω<)
読まれてるぅぅぅ
しかも、それを許してしまうなんて、なんて優しいんだ grandma 。
(ちなみに、対局者じゃない人が勝手に指そうとしたりすると、そこはちゃんと怒ってくれたります。)
実はまだ移動可能位置のバリデーションが未実装なのです。
つまり 先手必勝(1手目から玉を取れる) なんですよね。
(・ω<) テヘペロ
実装
局面図生成について
今回の実装について、便利なサイトがあったので紹介します。
将棋局面図WebAPI です。決まったフォーマットでURLを作れば、その局面図を取得できます。 hubotとの相性抜群! 詳しくはリンク先をご参照ください。
hubotスクリプト
githubで公開しています。
github.com/at-grandpa/at_grandma
遊んだり改良したりしたい方はどうぞ。
最後に
結論、全然サクサク指せませんでした。
これが原因で社内には全く広まりませんでした。
でも、grandma が悪いわけじゃないです。
at_grandma、仲良くしてやってください。
明日は @sinamon129 です。
キュートな記事を書いてくれることでしょう!