Zrp200/99_game

View on GitHub
lib/hand.rb

Summary

Maintainability
A
1 hr
Test Coverage
require_relative "card.rb"
$deck = Deck.new(jokers: true).cards.shuffle!
class Hand # Creates an object that holds and can play cards. Interacts with Deck objects.
    @@deck = Deck.new.cards.shuffle!
        attr_accessor :cards # @return [Array<CardDeck::Card>]
        def initialize
        @cards = Array.new(3) {$deck.shift}
    end
    
# @param card [CardDeck::Card] the card played
# @return [void]
# @note Gameplay method
    def play(card)
        raise "Card not found" unless @cards.include? card 
        if card.num == "King"
            $value = 99
        elsif card.num == "Joker"
            $value = 0
        else
            $value += card.value
        end
        i, done = 0, false
        for index in @cards
            if index.num == card.num and not done
                discard = @cards[i]
                @cards.delete_at i
                @cards.push $deck.shift
                $deck.push discard
                done = true
                $deck.shuffle!
            end
            i += 1
        end
        card
    end
        
# @return [void]
# Displays cards
        def view_cards
        print "These are your cards:  "
            @cards.each {|card| print "#{card}  "}
        end
        alias inspect cards
# @return [Array<Integer>]
# @note Used by the CPU to determine which card to play. Parameter card needs to be an instance of Card.
    def test_outcomes
        outcomes = Array.new
        @cards.each do |card| 
            test_value = case card.num
            when "King"
                if (@cards - [card]).any? {|card| [4, 9, "Jack", "Queen", "King", "Joker"].include? card.num} || rand < 0.1 
                    99
                else -99
                end
                when "Joker" then 0
                else
                $value + card.value
                end
                test_value = -100 if test_value > 99
            outcomes << test_value
        end
        return outcomes
        end
end