]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/roshambo.rb
More minor plugin optimizations
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / roshambo.rb
index 4f20fb155ca64f74d61e6766ff5ea353ce1ef176..7f776c398bee9292cb947ad33f3dc4ad78f89ba2 100644 (file)
@@ -1,54 +1,56 @@
+#-- vim:sw=2:et
+#++
 # Play the game of roshambo (rock-paper-scissors)
 # Copyright (C) 2004 Hans Fugal
 # Distributed under the same license as rbot itself
+
 require 'time'
+
 class RoshamboPlugin < Plugin
+
   def initialize
     super 
     @scoreboard = {}
+    @plays = [:rock, :paper, :scissor]
+    @beats = { :rock => :scissors, :paper => :rock, :scissors => :paper}
   end
+
   def help(plugin, topic="")
-    "roshambo <rock|paper|scissors> => play roshambo"
+    "roshambo <rock|paper|scissors> or rps <rock|paper|scissors> => play roshambo"
   end
-  def privmsg(m)
+
+  def rps(m, params)
     # simultaneity
-    choice = choose
+    choice = @plays.pick_one
 
     # init scoreboard
-    if (not @scoreboard.has_key?(m.sourcenick) or (Time.now - @scoreboard[m.sourcenick]['timestamp']) > 3600)
-      @scoreboard[m.sourcenick] = {'me'=>0,'you'=>0,'timestamp'=>Time.now}
+    if not @scoreboard.has_key?(m.sourcenick) or (Time.now - @scoreboard[m.sourcenick]['timestamp']) > 3600
+      @scoreboard[m.sourcenick] = { 'me' => 0, 'you' => 0, 'timestamp' => Time.now }
     end
-    case m.params
-    when 'rock','paper','scissors'
-      s = score(choice,m.params)
-      @scoreboard[m.sourcenick]['timestamp'] = Time.now
-      myscore=@scoreboard[m.sourcenick]['me']
-      yourscore=@scoreboard[m.sourcenick]['you']
-      case s
-      when 1
-       yourscore=@scoreboard[m.sourcenick]['you'] += 1
-       m.reply "#{choice}. You win. Score: me #{myscore} you #{yourscore}"
-      when 0
-       m.reply "#{choice}. We tie. Score: me #{myscore} you #{yourscore}"
-      when -1
-       myscore=@scoreboard[m.sourcenick]['me'] += 1
-       m.reply "#{choice}! I win! Score: me #{myscore} you #{yourscore}"
-      end
-    else
-      m.reply "incorrect usage: " + help(m.plugin)
+    play = params[:play].to_sym
+    s = score(choice, play)
+    @scoreboard[m.sourcenick]['timestamp'] = Time.now
+    myscore=@scoreboard[m.sourcenick]['me']
+    yourscore=@scoreboard[m.sourcenick]['you']
+    case s
+    when 1
+      yourscore = @scoreboard[m.sourcenick]['you'] += 1
+      m.reply "#{choice}. You win. Score: me #{myscore} you #{yourscore}"
+    when 0
+      m.reply "#{choice}. We tie. Score: me #{myscore} you #{yourscore}"
+    when -1
+      myscore = @scoreboard[m.sourcenick]['me'] += 1
+      m.reply "#{choice}! I win! Score: me #{myscore} you #{yourscore}"
     end
   end
-      
-  def choose
-    ['rock','paper','scissors'][rand(3)]
-  end
-  def score(a,b)
-    beats = {'rock'=>'scissors', 'paper'=>'rock', 'scissors'=>'paper'}
-    return -1 if beats[a] == b
-    return 1 if beats[b] == a
+
+  def score(a, b)
+    return -1 if @beats[a] == b
+    return 1 if @beats[b] == a
     return 0
   end
 end
+
 plugin = RoshamboPlugin.new
-plugin.register("roshambo")
-plugin.register("rps")
+plugin.map "roshambo :play", :action => :rps, :requirements => { :play => /rock|paper|scissors/ }
+plugin.map "rps :play", :action => :rps, :requirements => { :play => /rock|paper|scissors/ }