lib/bridge/score.rb in bridge-0.0.13 vs lib/bridge/score.rb in bridge-0.0.14
- old
+ new
@@ -1,50 +1,39 @@
module Bridge
class Score
- attr_reader :tricks, :contract, :declarer, :modifier, :vulnerable
+ attr_reader :tricks, :contract, :declarer, :vulnerable
# Creates new score object
#
# ==== Example
- # Bridge::Score.new(:contract => "7SXX", :declarer => "S", :vulnerable => "NONE", :tricks => 13)
+ # Bridge::Score.new(:contract => "7SXX", :declarer => "S", :vulnerable => "BOTH", :tricks => 13)
def initialize(options = {})
options[:vulnerable] ||= "NONE"
options[:contract].gsub!(/(X+)/, "")
@modifier = $1.nil? ? 1 : $1.to_s.size * 2
@tricks = options[:tricks]
@contract = Bridge::Bid.new(options[:contract])
@vulnerable = options[:vulnerable] if Bridge::VULNERABILITIES.include?(options[:vulnerable].upcase)
@declarer = options[:declarer] if Bridge::DIRECTIONS.include?(options[:declarer].upcase)
end
+ # Returns nr of overtricks or undertricks. 0 if contract was made without them
def result
tricks - tricks_to_make_contract
end
- def tricks_to_make_contract
- contract.level.to_i + 6
- end
-
- def doubled?
- @modifier == 2
- end
-
- def redoubled?
- @modifier == 4
- end
-
+ # Returns true if contract was made, false otherwise
def made?
result >= 0
end
- def small_slam?
- contract.level.to_i == 6
+ # Returns points achieved by declarer: + for made contract - if conctract wasn't made
+ def points
+ made? ? (made_contract_points + overtrick_points + bonus) : undertrick_points
end
- def grand_slam?
- contract.level.to_i == 7
- end
+ #private
def vulnerable?
case vulnerable
when "BOTH"
true
@@ -53,14 +42,30 @@
else
vulnerable.split('').include?(declarer)
end
end
- def points
- made? ? (made_contract_points + overtrick_points + bonus) : undertrick_points
+ def small_slam?
+ contract.level.to_i == 6
end
+ def grand_slam?
+ contract.level.to_i == 7
+ end
+
+ def tricks_to_make_contract
+ contract.level.to_i + 6
+ end
+
+ def doubled?
+ @modifier == 2
+ end
+
+ def redoubled?
+ @modifier == 4
+ end
+
def bonus
game_bonus + grand_slam_bonus + small_slam_bonus + doubled_bonus + redoubled_bonus
end
def game_bonus
@@ -108,11 +113,11 @@
def undertrick_points
vulnerable? ? vulnerable_undertrick_points : not_vulnerable_undertrick_points
end
def made_contract_points
- first_trick_points * modifier + (contract.level.to_i - 1) * single_trick_points * modifier
+ first_trick_points * @modifier + (contract.level.to_i - 1) * single_trick_points * @modifier
end
def overtrick_points
if doubled?
vulnerable? ? result * 200 : result * 100
@@ -121,24 +126,14 @@
else
result * single_trick_points
end
end
- def not_vulnerable_overtrick_points
- if doubled?
- result * 200
- elsif redoubled?
- result * 400
- else
- result * single_trick_points
- end
- end
-
# TODO: do some refactoring
def vulnerable_undertrick_points
if !made?
- p = -100 * modifier
+ p = -100 * @modifier
if result < -1
return p += (result + 1) * 300 if doubled?
return p += (result + 1) * 600 if redoubled?
return p += (result + 1) * 100
end
@@ -148,10 +143,10 @@
end
end
def not_vulnerable_undertrick_points
if !made?
- p = -50 * modifier
+ p = -50 * @modifier
if [-3, -2].include?(result)
return p += (result + 1) * 200 if doubled?
return p += (result + 1) * 400 if redoubled?
return p += (result + 1) * 50 if (!doubled? and !redoubled?)
elsif result < -3
\ No newline at end of file