hubotと戯れてみる #3 slackとhubotでオセロゲーム。とりあえず石を置いてみる

hubotと戯れてみる #3 slackとhubotでオセロゲーム。とりあえず石を置いてみる

slack上でhubotを利用してオセロゲームを作っています。今回は石を置いてターンを変更するまでを実装します。前回はslack上からオセロゲームを始めるまでを実装しました。

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

slackとhubotでオセロゲーム編

石を置けると、ぐっとオセロゲーム感が出てきます。

まずは、石を置くメッセージを認識するようにします。

これで、navico set [A-H][1-8]というメッセージに反応するようになります。

処理の流れはこんな感じー

  1. ボードの状態とターンの状態を取得します。
  2. メッセージから指示された石を置く座標を抜き取ります。
  3. 盤上に石を置きます。
  4. ターンをチェンジします。
  5. 盤上の情報とターン情報を保存します。
  6. メッセージを返します。

では、実装します。

1.ボードの状態とターンの状態を取得します。簡単です。

robot.brain.setで保存した情報をrobot.brain.getで取得できます。

2.メッセージから指示された盤上の位置を抜き取ります。

point = msg.match[1]について
msg.match[0]は、全メッセージ
msg.match[1]は、正規表現で抽出されたメッセージが入ってきます。

x = parseInt(point[2],10) – 1について
point[2]で抽出したメッセージの2番目の文字を指定
文字列を数値に変換
数値から-1をしています。これは、盤上が1~8までなのに対して、 hubotが記憶している配列が0~7のため -1をしています。

y = point[1].charCodeAt(0) – 65
point[2]で抽出したメッセージの1番目の文字を指定
文字[A~H]を文字コードに変換。
変換すると65~72となるので、-65することにより配列にマッピングしています。
y = parseInt(point[1],16) – 10について
point[2]で抽出したメッセージの1番目の文字を指定
文字列を数値に変換。
文字列を16進数から10進数の数値に変換。
数値から-10をしています。これは、盤上がA~Hに対してhubotが記憶している配列が0~7のため、A~Hを16進数として扱い10進数に変換することにより10~17を得ます。そこから-10をすることにより配列にマッピングしています。

* 2015.6.4 誤りがありましたので修正致しました。

これで、指定されたx,yの値を得ることができました。簡単です。

3.盤上に石を置きます。

正確には、ボード情報を格納している配列を更新します。

updateBord関数も簡単です。
※引数のlistは、ひっくり返す石の座標が入る予定です。今回は利用しません。

4.ターンをチェンジします。

changeTurn関数は、1行で終わり。

5.盤上の情報とターン情報を保存します。

robot.brain.setで、情報を保存するだけです。

6.メッセージを返します。

outputBord関数は、前回作成しました。

↓前回と同じURLでいいです。
本日作成したファイルは、こちらに置いてあります。

次回は、石をはさんでひっくり返していきます。

後に

先日、社内でChatopsのプレゼンを行う機会があり、 one more thing のパートでこの連載のhubotを披露しました。なかなかいい笑いが取れて満足です。笑いって大事ですよね。

コメント