OSDN Git Service

Add a command, %%RATING, to show a ranking sorted by rates.
authorbeatles <beatles@b8c68f68-1e22-0410-b08e-880e1f8202b4>
Mon, 31 Jul 2006 23:20:49 +0000 (23:20 +0000)
committerbeatles <beatles@b8c68f68-1e22-0410-b08e-880e1f8202b4>
Mon, 31 Jul 2006 23:20:49 +0000 (23:20 +0000)
changelog
shogi-server

index 246d9c4..6077b64 100644 (file)
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+2006-08-01  Daigo Moriwaki <daigo at debian dot org>
+
+       * Add a command, %%RATING, to show a ranking sorted by rates.
+
 2006-07-31  Daigo Moriwaki <daigo at debian dot org>
 
        * Add a simple rating system.
index c4b8673..eed64c6 100755 (executable)
@@ -141,8 +141,24 @@ class League
     end
     hash
   end
+
+  def rated_players
+    players = []
+    @db.transaction(true) do
+      @db.roots.each do |id|
+        players << id
+      end
+    end
+    return players.collect do |id|
+      p = RatedPlayer.new(id, nil, nil)
+      self.load(p)
+      p
+    end
+  end
 end
 
+class RatedPlayer < Struct.new(:id, :name, :rate); end
+
 class Player
   def initialize(str, socket)
     @name = nil
@@ -326,6 +342,11 @@ class Player
           end
         when /^%%HELP/
           write_help
+        when /^%%RATING/
+          players = LEAGUE.rated_players
+          players.sort {|a,b| b.rate <=> a.rate}.each do |p|
+            write_safe("%s (%s) \t %4d\n" % [p.name, p.id, p.rate])
+          end
         when /^%%GAME\s*$/
           if ((@status == "connected") || (@status == "game_waiting"))
             @status = "connected"