Это для собеседования. Что я хочу сделать, так это то, что после сдачи карты (снятой с экземпляра колоды дилера) эта карта становится доступной для экземпляра руки игрока.
class Card
attr_accessor :suite, :name, :value #specifiy that class attributes are both, readable and writable
#constructor
def initialize(suite, name, value)
@suite, @name, @value = suite, name, value #this looks odd
end
end
class Deck
attr_accessor :playable_cards
SUITES = [:hearts, :diamonds, :spades, :clubs] #constant
NAME_VALUES = {
:two => 2,
:three => 3,
:four => 4,
:five => 5,
:six => 6,
:seven => 7,
:eight => 8,
:nine => 9,
:ten => 10,
:jack => 10,
:queen => 10,
:king => 10,
:ace => [11, 1]}
def initialize #initialzing shuffles the deck
shuffle
end
def deal_card #removes card from deck
random = rand(@playable_cards.size) #returns an random int greater >= 0 & < max
@playable_cards.delete_at(random)
end
def shuffle
@playable_cards = [] #array of 52 cards
SUITES.each do |suite| #iterate over suites
NAME_VALUES.each do |name, value| #iterate, over card for that suite
@playable_cards << Card.new(suite, name, value) #add to end of array, new Card
end
end
end
end
class Hand
attr_accessor :cards
def initialize
@cards = []
end
end
class Player
def initialize
@player_hand = Hand.new
end
end
class Dealer
def initialize
@dealer_hand = Hand.new
@dealer_deck = Deck.new
end
def deal
card = @dealer_deck.deal_card
end
end
require 'test/unit'
class CardTest < Test::Unit::TestCase
def setup
@card = Card.new(:hearts, :ten, 10)
end
def test_card_suite_is_correct
assert_equal @card.suite, :hearts
end
def test_card_name_is_correct
assert_equal @card.name, :ten
end
def test_card_value_is_correct
assert_equal @card.value, 10
end
end
class DeckTest < Test::Unit::TestCase
def setup
@deck = Deck.new
end
def test_new_deck_has_52_playable_cards
assert_equal @deck.playable_cards.size, 52
end
def test_dealt_card_should_not_be_included_in_playable_cards
card = @deck.deal_card
assert(!@deck.playable_cards.include?(card)) #upon dealing card, card should be removed from deck
end
def test_shuffled_deck_has_52_playable_cards
@deck.shuffle
assert_equal @deck.playable_cards.size, 52
end
end
Все, что я сделал, это добавил классы Player
и Dealer
. Я думаю, что у игрока есть рука, поэтому при инициализации экземпляр руки сохраняется в @player_hand
, и то же самое относится и к дилеру. Дилер также имеет свой собственный экземпляр колоды, очевидно. Теперь, когда я звоню Dealer.new.deal
, карта удаляется из колоды, как мне добавить эту вновь удаленную карту в Player @player_hand
?
Я думал об использовании глобальных переменных, но это плохая практика. Я также не совсем уверен, что это даже правильный подход.