def genDeck
return (["Hearts", "Spades", "Diamonds", "Clubs"].map do |suit|
(1..13).map do |rank|
{
"suit" => suit,
"rank" => rank
}
end
end).flatten.shuffle
end
def dealCards cards, players
players.map do |player|
{
"name" => player,
"hand" => (0...5).map do |j| cards.pop end
}
end
end
def cards_match? player_card, pile_card
player_card["rank"] == pile_card["rank"] or player_card["suit"] == pile_card["suit"] or player_card["rank"] == 8
end
def print_card card
if card["rank"] == 1
print "Ace"
elsif card["rank"] == 11
print "Jack"
elsif card["rank"] == 12
print "Queen"
elsif card["rank"] == 13
print "King"
else
print card["rank"]
end
puts " of " + card["suit"]
end
deck = genDeck
players = dealCards deck, ["Spencer", "Sam", "Nick", "Charls"]
pile = deck.pop
running = true
while running
match = false
(0...players[0]["hand"].length).each do |i|
if cards_match? players[0]["hand"][i], pile
match = i
end
end
if not match
while not cards_match? players[0]["hand"].last, pile
if deck.empty?
puts "Deck Empty!"
running
else
players[0]["hand"] << deck.pop
match = players[0]["hand"].length - 1
end
end
end
if match
pile = players[0]["hand"].delete_at(match)
if players[0]["hand"].empty?
puts players[0]["name"] + " wins!"
running = false
else
players.push players.shift
end
else
running = false
end
end