Я пытаюсь создать копию Go Fish, чтобы помочь мне узнать больше о массивах и хешах, а также о том, как структурировать данные.Я на второй день, и у меня есть то, что выглядит намного ближе к конечной цели.Имейте в виду, я новичок в этом.В любом случае, вот проблема, с которой я сталкиваюсь:
=> gofish.rb: 21: в `player_turn ': нет неявного преобразования String в Integer (TypeError)
Я понимаю, почему я получаю ошибку, но я не могу понять, как использовать метод .shift без указания номера индекса.Я хотел бы выбрать объект для смещения вместо этого на основе значения.Итак, если я правильно угадаю, есть ли у вас «туз пик», карта удаляется из массива cpu_hand и добавляется в массив my_hand.С учетом сказанного, я просто хотел бы узнать, как лучше всего это сделать.
Вот мой сценарий:
card_values = ['ace', 'two', 'three', 'four', 'five', 'six', 'seven',
'eight', 'nine', 'ten', 'jack', 'queen', 'king']
suits = ['spades', 'diamonds', 'hearts', 'clubs']
# creates array objects with every value and suit possible (full deck)
card_deck = card_values.product(suits).collect{|card, suit| "#{card} of #{suit}"}
def print_hand
puts "Your hand: #{@my_hand.join(', ')}."
end
def player_turn
puts "You go first!"
puts "Do you have a..."
puts @cpu_hand.join(', ')
print "> "
@card = $stdin.gets.chomp.downcase
# if cpu has the card requested give it to the player and add to their array
if @cpu_hand.include?(@card)
puts "Ahhh...you got me. Here you go!"
@my_hand.shift(@cpu_hand[@card]) # ****Here's the error(line:21)
print_hand
else
puts "Go fish!"
@my_hand.shift(@card_deck[1])
print_hand
end
end
puts "There are #{card_deck.length} cards in this deck."
puts "Welcome to Go-Fish."
print "Your name please: "
player_name = $stdin.gets.chomp.capitalize
puts "Ok #{player_name}, lets get this deck shuffled..."
#sleep(1)
# shuffles card_deck using .shuffle method
card_deck = card_deck.shuffle
puts "Cards are perfectly shuffled!"
#sleep(1)
puts "Dealing cards..."
#sleep(1)
# assigns first 7 cards to user, removes from card_deck
@my_hand = Array.new
@my_hand = card_deck.shift(7)
# assigns next 7 cards to CPU, removes from card_deck
@cpu_hand = Array.new
@cpu_hand = card_deck.shift(7)
print_hand
until card_deck.length < 1 || @cpu_hand.length < 1 || @my_hand.length < 1
player_turn
end
puts "GAME OVER!"