連続してじゃんけんを行い,その結果を保存する方法を考えてみましょう.
[_p:'request-hand' loop:ループ回数]
(「ループ回数」は0~9)[_p:'hand' show:'rock']
: グー[_p:'hand' show:'paper']
: パー[_p:'hand' show:'scissors']
: チョキ[_p:'result' win:勝った回数 lose:負けた回数]
class GameServer3 extends TAG { def players = [] // 参加者のリスト def winlist = [] // n番目の要素はn回目の勝利者の名前, 引き分けの場合は"" def loop(msg) { if (msg._p=='request-join') { players.add(msg._f) reply(msg, [_p:'acknowledge']) if (players.size() == 2) { winlist = [] repeat10() def win0 = winlist.count{it == players[0]} // players[0]の勝利数 def win1 = winlist.count{it == players[1]} // players[1]の勝利数 send(players[0], [_p:'result', win:win0, lose:win1]) send(players[1], [_p:'result', win:win1, lose:win0]) players = [] } } } def repeat10() { for (i in 0..9) { def replies = request(players, [_p:'request-hand', loop:i]) println replies def hand0 = replies[0].show def hand1 = replies[1].show println "0:"+hand0+" 1:"+hand1 def winner = players[0] // 勝者をwinnerに格納する winlist.add(winner) // 勝者リストにwinnerを追加する } } }
winlist
を空にします.repeat10()
を呼び出し,じゃんけんを10回繰り返します.winlist
の要素のうちplayers[0]
と等しい要素の数を数えます.repeat10()
の定義です.i
を0~9まで変化させながら,23~29行を10回繰り返します.players[0]
を勝利者にしています.本来はhand0
とhand1
を比較して勝利者を決めます.class Player2 extends TAG { def loop(msg) { if (msg._p == 'start') { def ack = request('GameServer3', [_p:'request-join']) } else if (msg._p == 'request-hand') { reply(msg, [_p:'hand', show:'rock']) } } }
class Player3 extends TAG { def loop(msg) { if (msg._p == 'start') { def ack = request('GameServer3', [_p:'request-join']) } else if (msg._p == 'request-hand') { reply(msg, [_p:'hand', show:'paper']) } } }
GameServer3
のみが異なります.[_p:'start']
を送信します.WebUIは複数のエージェント名を送信先として指定できます.