class BetweenTheSheets::Game

Attributes

card1[R]
card2[R]
card3[R]
jackpot[R]
play[R]

Public Class Methods

new(jackpot = STARTING_JACKPOT) click to toggle source
# File lib/between_the_sheets/game.rb, line 17
def initialize(jackpot = STARTING_JACKPOT)
  @rounds = 1
  @credits = STARTING_CREDITS
  @jackpot = jackpot
end

Public Instance Methods

draw_final_card() click to toggle source

Loads the 3rd card and checks for rules.

# File lib/between_the_sheets/game.rb, line 39
def draw_final_card
  @card3 = Card.draw(@card1.id, @card2.id)
  puts "The next card is the #{@card3}"

  # player wins if card is Joker
  raise Rules::Win::Joker if @card3.joker?
end
draw_initial_cards() click to toggle source

Loads the first 2 cards and checks rules.

# File lib/between_the_sheets/game.rb, line 24
def draw_initial_cards
  @card1 = Card.draw
  @card2 = Card.draw(@card1.id)

  # check for joker
  raise Rules::Bust::Joker if @card1.joker? || @card2.joker?

  # check for consecutive
  raise Rules::Bust::Consecutive if (@card1.value - @card2.value).abs == 1

  # player wins if the cards are the same
  raise Rules::Win::SameCards if @card1.value == @card2.value
end
execute() click to toggle source

The main game loop.

# File lib/between_the_sheets/game.rb, line 74
def execute
  loop do
    transition_screen if @rounds > 1

    # Show the intro screen
    intro_screen

    @rounds += 1
    @credits -= ANTE
    @jackpot += JACKPOT_ANTE

    puts "\nAfter ante you have #{@credits.to_s.colorize(:green)} credits"

    continue = begin
      draw_initial_cards
    rescue Rules::Bust::Joker
      puts "House drew a Joker "
      lose
    rescue Rules::Bust::Consecutive
      puts "House drew consecutive cards #{@card1} & #{@card2} "
      lose
    rescue Rules::Win::SameCards
      puts "House drew #{@card1} and #{@card2} "
      win_jackpot
    else
      true
    end

    next unless !!continue

    # Ask player if next card is between
    is_between_screen

    # Ask player for their wager
    wager = Wager.get(@credits, @jackpot)

    continue = begin
      draw_final_card
    rescue Rules::Win::Joker
      puts "You drew a #{@card3}"
      win wager
    else
      true
    end

    next unless !!continue

    # check the between rules
    if is_between?
      win wager
    else
      lose wager
    end
  end
end
is_between?() click to toggle source

Bool whether card 3 is between cards 1 & 2

# File lib/between_the_sheets/game.rb, line 48
def is_between?
  is_between = @card3.value.between?(@card1.value, @card2.value)

  is_between && @play == "y" || !is_between && @play == "n"
end
lose(credits=nil) click to toggle source

Prints the lost message and decrements the players credits.

# File lib/between_the_sheets/game.rb, line 68
def lose(credits=nil)
  @credits -= credits if credits
  puts self.class.message(:lose).colorize :red
end
win(credits=nil) click to toggle source

Prints the win message and increments the players credits.

# File lib/between_the_sheets/game.rb, line 55
def win(credits=nil)
  @credits += credits if credits
  puts self.class.message(:win).colorize :green
end
win_jackpot() click to toggle source

Prints the jackpot message and increments the players credits.

# File lib/between_the_sheets/game.rb, line 61
def win_jackpot
  @credits += @jackpot
  @jackpot = STARTING_JACKPOT
  puts self.class.message(:jackpot).colorize :green
end