暇すぎてbotとでも遊ぼうかと思っても、会話だけではすぐにつまらなくなってしまいます。
そんな時に備えて、botにサイコロを振らせてみましょう。
参考スクリプト
dice.coffeeを参考に、シンプルにしてみました。
サイコロふるよ
「サイコロ!」と叫ぶと、6面ダイスを2つ振るスクリプトを用意しました。
module.exports = (robot) ->
robot.hear /サイコロ/, (msg) ->
msg.send report roll 2, 6
report = (results) ->
"えいっ! #{results.join('と')} がでたよ!"
roll = (dice, sides) ->
rollOne(sides) for i in [0...dice]
rollOne = (sides) ->
1 + Math.floor(Math.random() * sides)
coffeeスクリプトのfor文の使い方とか、やはり他の人が書いたスクリプトは参考になります。
repot関数には、roll(2, 6)の結果が入ります。
roll関数は、diceに2(2個)、sidesに6(6面)をセットすると、diceの数だけ繰り返します。
繰り返されるのは、rollOne関数です。ここで6面ダイスを振ります。
逆からたどると、rollOneを2回呼び出した結果が配列になり、その配列がreport関数のresultsに入ります。resultsをjoinで繋いで返答を作成します。
前回学んだmsg.randomを使うよ
サイコロも何度も振ると、botの反応が同じなのでつまらなくなってきます。
そこで、前回のmsg.randomを使ってみましょう。
dicemes1 = [
"えいっ!",
"コロコロ..",
"いい目でてね〜"
]
dicemes2 = [
"だよっ",
"だねっ!",
"だったよ!"
]
module.exports = (robot) ->
robot.hear /(サイコロ|ダイス)/, (msg) ->
msg.send report msg, roll 2, 6
report = (msg, results) ->
msg1 = msg.random dicemes1
msg2 = msg.random dicemes2
"#{msg1} #{results.join('と')} #{msg2}"
roll = (dice, sides) ->
rollOne(sides) for i in [0...dice]
rollOne = (sides) ->
1 + Math.floor(Math.random() * sides)
ついでに、サイコロだけではなくて、ダイスでも反応するようにしました。
これで、
私:「運命のダイスロール!」
hubot:「いい目でてね〜 4と2 だよっ」
私:「サイコロ!」
hubot:「えいっ! 3と3 だったよ!」
私:「サイコロ投げて!」
hubot:「コロコロ.. 5と4 だったよ!」
ということができるようになります。
これで1人でも寂しくないですよね!