Class: Bridge::Play

Inherits:
Object
  • Object
show all
Defined in:
lib/bridge/play.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(deal_id, contract, cards) ⇒ Play

Returns a new instance of Play.



5
6
7
8
9
# File 'lib/bridge/play.rb', line 5

def initialize(deal_id, contract, cards)
  @deal_id = deal_id
  @contract = contract
  @cards = cards.map { |card| Card.new(card.to_s) }
end

Instance Attribute Details

#cardsObject (readonly)

Returns the value of attribute cards.



3
4
5
# File 'lib/bridge/play.rb', line 3

def cards
  @cards
end

#contractObject (readonly)

Returns the value of attribute contract.



3
4
5
# File 'lib/bridge/play.rb', line 3

def contract
  @contract
end

#deal_idObject (readonly)

Returns the value of attribute deal_id.



3
4
5
# File 'lib/bridge/play.rb', line 3

def deal_id
  @deal_id
end

Instance Method Details

#card_allowed?(card) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
40
41
42
43
44
# File 'lib/bridge/play.rb', line 37

def card_allowed?(card)
  card = Card.new(card.to_s)
  case
  when !contract, cards.include?(card), !deal[next_direction].include?(card) then false
  when tricks.none?, tricks.last.complete? then true
  else (deal[next_direction] - cards).map(&:suit).uniq.include?(last_lead.suit) ? card.suit == last_lead.suit : true
  end
end

#dealObject



62
63
64
# File 'lib/bridge/play.rb', line 62

def deal
  @deal ||= Deal.from_id(deal_id)
end

#declarerObject



15
16
17
# File 'lib/bridge/play.rb', line 15

def declarer
  contract[-1] if contract
end

#declarer_tricks_numberObject



58
59
60
# File 'lib/bridge/play.rb', line 58

def declarer_tricks_number
  tricks.map { |trick| deal.owner(trick.winner(trump)) }.count { |direction| [declarer, dummy].include?(direction) }
end

#directionsObject



46
47
48
# File 'lib/bridge/play.rb', line 46

def directions
  @directions ||= tricks.map { |trick| trick.cards }.flatten.map { |card| deal.owner(card) }
end

#dummyObject



19
20
21
# File 'lib/bridge/play.rb', line 19

def dummy
  Bridge.partner_of(declarer) if contract
end

#finished?Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/bridge/play.rb', line 11

def finished?
  cards.length == 52
end

#left_hand_opponentObject Also known as: lho



23
24
25
# File 'lib/bridge/play.rb', line 23

def left_hand_opponent
  Bridge.next_direction(declarer) if contract
end

#next_directionObject



50
51
52
53
54
55
56
# File 'lib/bridge/play.rb', line 50

def next_direction
  case
  when tricks.none? then Bridge.next_direction(declarer)
  when tricks.last.complete? then deal.owner(tricks.last.winner(trump))
  else Bridge.next_direction(directions.last)
  end
end

#right_hand_opponentObject Also known as: rho



28
29
30
# File 'lib/bridge/play.rb', line 28

def right_hand_opponent
  Bridge.partner_of(left_hand_opponent) if contract
end

#tricksObject



66
67
68
69
70
71
72
# File 'lib/bridge/play.rb', line 66

def tricks
  @tricks ||= begin
    tricks = []
    cards.each_slice(4) { |trick| tricks << Trick.new(*trick) }
    tricks
  end
end

#trumpObject



33
34
35
# File 'lib/bridge/play.rb', line 33

def trump
  contract[1] if Bridge.trump?(contract[1])
end