]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blob - data/rbot/plugins/roshambo.rb
7f776c398bee9292cb947ad33f3dc4ad78f89ba2
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / roshambo.rb
1 #-- vim:sw=2:et
2 #++
3 # Play the game of roshambo (rock-paper-scissors)
4 # Copyright (C) 2004 Hans Fugal
5 # Distributed under the same license as rbot itself
6
7 require 'time'
8
9 class RoshamboPlugin < Plugin
10
11   def initialize
12     super 
13     @scoreboard = {}
14     @plays = [:rock, :paper, :scissor]
15     @beats = { :rock => :scissors, :paper => :rock, :scissors => :paper}
16   end
17
18   def help(plugin, topic="")
19     "roshambo <rock|paper|scissors> or rps <rock|paper|scissors> => play roshambo"
20   end
21
22   def rps(m, params)
23     # simultaneity
24     choice = @plays.pick_one
25
26     # init scoreboard
27     if not @scoreboard.has_key?(m.sourcenick) or (Time.now - @scoreboard[m.sourcenick]['timestamp']) > 3600
28       @scoreboard[m.sourcenick] = { 'me' => 0, 'you' => 0, 'timestamp' => Time.now }
29     end
30     play = params[:play].to_sym
31     s = score(choice, play)
32     @scoreboard[m.sourcenick]['timestamp'] = Time.now
33     myscore=@scoreboard[m.sourcenick]['me']
34     yourscore=@scoreboard[m.sourcenick]['you']
35     case s
36     when 1
37       yourscore = @scoreboard[m.sourcenick]['you'] += 1
38       m.reply "#{choice}. You win. Score: me #{myscore} you #{yourscore}"
39     when 0
40       m.reply "#{choice}. We tie. Score: me #{myscore} you #{yourscore}"
41     when -1
42       myscore = @scoreboard[m.sourcenick]['me'] += 1
43       m.reply "#{choice}! I win! Score: me #{myscore} you #{yourscore}"
44     end
45   end
46
47   def score(a, b)
48     return -1 if @beats[a] == b
49     return 1 if @beats[b] == a
50     return 0
51   end
52 end
53
54 plugin = RoshamboPlugin.new
55 plugin.map "roshambo :play", :action => :rps, :requirements => { :play => /rock|paper|scissors/ }
56 plugin.map "rps :play", :action => :rps, :requirements => { :play => /rock|paper|scissors/ }