summaryrefslogtreecommitdiff
path: root/data/rbot/plugins/games
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2008-04-11 12:26:45 +0200
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2008-04-11 12:26:45 +0200
commit5aeef49abc6959b45989bc65d25357b16f062030 (patch)
treef4e5caa9ff0cd5a802efe39aeb10977aed0aea0f /data/rbot/plugins/games
parentac10728090f28a34593da1d125ebf0811d7d9691 (diff)
uno plugin: correct handling of drops and forced game ends
Diffstat (limited to 'data/rbot/plugins/games')
-rw-r--r--data/rbot/plugins/games/uno.rb36
1 files changed, 29 insertions, 7 deletions
diff --git a/data/rbot/plugins/games/uno.rb b/data/rbot/plugins/games/uno.rb
index 7a1477d2..f1573dc7 100644
--- a/data/rbot/plugins/games/uno.rb
+++ b/data/rbot/plugins/games/uno.rb
@@ -161,11 +161,15 @@ class UnoGame
@players = []
@dropouts = []
@discard = nil
+ @value = nil
+ @color = nil
make_base_stock
@stock = []
make_stock
@start_time = nil
@join_timer = nil
+ @picker = 0
+ @last_picker = 0
end
def get_player(user)
@@ -229,6 +233,14 @@ class UnoGame
@start_time = Time.now
end
+ def elapsed_time
+ if @start_time
+ Utils.secs_to_string(Time.now-@start_time)
+ else
+ _("no time")
+ end
+ end
+
def reverse_turn
if @players.length > 2
@players.reverse!
@@ -421,7 +433,7 @@ class UnoGame
if @start_time
announce _("This %{uno} game has been going on for %{time}") % {
:uno => UNO,
- :time => Utils.secs_to_string(Time.now - @start_time)
+ :time => elapsed_time
}
else
announce _("The game hasn't started yet")
@@ -551,12 +563,16 @@ class UnoGame
announce _("%{p} gives up this game of %{uno}") % {
:p => p, :uno => UNO
}
- if @players.length == 2
+ case @players.length
+ when 2
if p == @players.first
next_turn
end
end_game
return
+ when 1
+ end_game(true)
+ return
end
debug @stock.length
while p.cards.length > 0
@@ -593,13 +609,19 @@ class UnoGame
def end_game(halted = false)
if halted
- announce _("%{uno} game halted after %{time}") % {
- :time => Utils.secs_to_string(Time.now-@start_time),
- :uno => UNO
- }
+ if @start_time
+ announce _("%{uno} game halted after %{time}") % {
+ :time => elapsed_time,
+ :uno => UNO
+ }
+ else
+ announce _("%{uno} game halted before it could start") % {
+ :uno => UNO
+ }
+ end
else
announce _("%{uno} game finished after %{time}! The winner is %{p}") % {
- :time => Utils.secs_to_string(Time.now-@start_time),
+ :time => elapsed_time,
:uno => UNO, :p => @players.first
}
end