class Bcalc::Calculator

Constants

MAX_TRICKS
PLAYERS
SUITS

Attributes

deal[R]
declarer[R]
suit[R]

Public Class Methods

new(deal:, declarer:, suit:) click to toggle source
# File lib/bcalc/calculator.rb, line 21
def initialize(deal:, declarer:, suit:)
  PLAYERS.keys.include?(declarer) || raise(ArgumentError, "Wrong declarer value: #{declarer}")
  SUITS.keys.include?(suit) || raise(ArgumentError, "Wrong suit value: #{suit}")

  @deal = deal
  @declarer = declarer
  @suit = suit
end

Public Instance Methods

tricks() click to toggle source

Returns number of tricks that declarer can take

# File lib/bcalc/calculator.rb, line 31
def tricks
  solver = Bcalc::Lib.bcalcDDS_new("PBN", deal, SUITS[suit], leader)
  raise_on_error(solver)
  result = Bcalc::Lib.bcalcDDS_getTricksToTake(solver)
  MAX_TRICKS - result
ensure
  Bcalc::Lib.bcalcDDS_delete(solver)
end

Private Instance Methods

leader() click to toggle source
# File lib/bcalc/calculator.rb, line 48
def leader
  index = (PLAYERS.keys.index(declarer) + 1) % 4
  PLAYERS[PLAYERS.keys[index]]
end
raise_on_error(solver) click to toggle source
# File lib/bcalc/calculator.rb, line 42
def raise_on_error(solver)
  if (error = Bcalc::Lib.bcalcDDS_getLastError(solver))
    raise StandardError, error
  end
end