hubotと戯れてみる #2 slackとhubotを利用したオセロゲームを作ってみる(動画付き)

hubotと戯れてみる #2 slackとhubotを利用したオセロゲームを作ってみる(動画付き)

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

今回はslackとhubotを利用してオセロゲームを作ってみます。

#1 slackと連携するhubotを3分でインストールする。(動画付き)
#2 slackとhubotを利用してオセロゲームを作ってみる。 ← 今ここ
#3 slackとhubotでオセロゲーム。とりあえず石を置いてみる。
#4 slackとhubotでオセロゲーム。石をひっくり返す。
#5 slackとhubotでオセロゲーム。華麗なるエンディング? 

オセロにしようと思った理由

hubotをインストールしたのはいいけど、何に使うか結構悩みました。色々と仕事に役立てようと考えたのですが、なぜかモチベーションが上がらず?(なぜでしょう?不思議です。)

もんもんとしていたのですが、発想の転換ということで、特に仕事に役立たなくてもいいものにしようと考えたらすぐに思いつきました。(なぜでしょう?不思議です。)

出来上がりは、こんな感じになります。

※ぼっちなため、一人対戦しているの事は見逃してください。

image02

今回はオセロゲーム自体を作成することが目的なので、コンピュータ対戦は実装しません。コンピュータ対戦は、アルゴリズムのお話がほとんどになるので・・・難しいことは考えたり調べたくありません。

プレイヤーをhubotにしたい場合は、別のスクリプトを作成し今回作成するhubotに反応させれば良いかと思います。

スクリプトの作成方法を簡単に説明してみる

hubotは、以下のメッセージに反応するように作ります。
[sh]

navico game start – オセロゲーム開始する

navico game echo – ゲームの状況を報告する

navico set 位置 – 石を置く

navico game end – オセロゲーム終了する

[/sh]

hubotに命令を追加するには、xxxxx.coffeeファイルを用意して、
scriptsディレクトリに放り込むだけで良いです。簡単ですね!
scriptsディレクトリ内にあるファイルは、hubot起動時に読み込んでくれます。

以下が、スクリプトの雛形です。
[js] module.exports = (robot) ->
robot.hear /(鮪|マグロ|マグロ|まぐろ|tuna|Tuna|TUNA)/i, (msg) ->
msg.send “あるよっ:sushi:”
[/js]

とりあえず、othello.coffeeというファイル名で、scriptsディレクトリに放り込みます。

image07

robot.hearで、メッセージを監視します。今回は、鮪の言葉に反応して鮪を返してくれます。

image06

放り込んだscriptがうまく動いている事を確認できたので、オセロゲームを作っていきます。

# navico game start を作ってみる

[js] robot.hear /navico game start/i, (msg) ->
[/js]

これで、navico game startというメッセージに反応するようになります。
後は、この中にロジックを組み込んでいきます。

オセロは8 × 8のマスがあります。それをそのまま配列に落とし込みます。
□・・・空いている / ●・・・黒石 / ○・・・白石

こんな感じ、みたまんまオセロのボード。簡単です。

[js] bordArray = [
[“□”,”□”,”□”,”□”,”□”,”□”,”□”,”□”],
[“□”,”□”,”□”,”□”,”□”,”□”,”□”,”□”],
[“□”,”□”,”□”,”□”,”□”,”□”,”□”,”□”],
[“□”,”□”,”□”,”○”,”●”,”□”,”□”,”□”],
[“□”,”□”,”□”,”●”,”○”,”□”,”□”,”□”],
[“□”,”□”,”□”,”□”,”□”,”□”,”□”,”□”],
[“□”,”□”,”□”,”□”,”□”,”□”,”□”,”□”],
[“□”,”□”,”□”,”□”,”□”,”□”,”□”,”□”] ] [/js]

次は、ターン情報を変数に持ちます。
先行は黒石なので、 black を入れておきます。

turn = “black”

この情報をhubotに記憶させます。

[js] robot.brain.set(“ba”,bordArray)
robot.brain.set(“turn”,turn)
[/js]

記憶させておくと、以下のようにkeyを指定して後から値を引き出すことができます。

[js] bordArray = robot.brain.get(“ba”)
turn = robot.brain.get(“turn”)
[/js]

最後にボード情報とターン情報をメッセージさせます。

[js] msg.send outputBord(bordArray)
msg.send outputTurn(turn) + “からスタートです。”
[/js]

outputBord関数とoutputTurn関数は、記憶している情報を装飾する関数です。
[js] outputBord = (ba) ->
 中身省略・・・

outputTurn = (turn) ->
if turn == “black” then “黒” else “白”
[/js]

とりあえず、これだけです。

今回作成したファイルは、こちらに置いておきます。

最後に

実は、オセロゲームは新人の頃にエクセルで作ったことがあります。盤はエクセルのセルを利用し、石は文字の●と○で表してました。

プログラムはVBAで作りこみ、対戦できるように作りましたが、このコンピュータ弱いよー。と無邪気に言われて凹んだのを思い出しました。

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

【週刊bitWave】(メルマガ)始めました!

登録はこちらからメールアドレスを入力してお申込みください。

ご登録いただいたメールアドレスは 【週刊bitWave】の更新情報の配信にのみ使用します。

個人情報の取扱いに関しては、「プライバシーポリシー」をご確認ください。解除はいつでもこちらから行うことが可能です。

あなたにおすすめ