0

我正在尝试为一副纸牌创建散列,但我无法确定何时工作以使其成为王牌。我的所有密钥都没有显示为 A,仍在使用 JQK。显然我不明白红宝石中的开关是如何工作的。

def generateDeck
  d1 = Hash.new
  ['C', 'D', 'H', 'S'].each do |suite|
    case suite
    when 'D'
      loopStart = 14
      loopEnd   = 26
    when 'H'
      loopStart = 27
      loopEnd   = 39
    when 'S'
      loopStart = 40
      loopEnd   = 52
    else    
      loopStart = 1
      loopEnd   = 13
    end # of switch

    loopStart.upto(loopEnd) do |loop|
      puts("CurrentLoop: #{loop}")
      puts("Should Be Ace: #{loop % 13 == 1}")

      case loop
      when (loop % 13 == 1)
        d1['A' + suite] = loop
      when 11
        d1['J' + suite] = loop
      when 12
        d1['Q' + suite] = loop
      when 13
        d1['K' + suite] = loop
      else
        d1["#{loop}#{suite}"] = loop
      end # of switch
    end # of do
  end # of do

  d1['JA'] = 53
  d1['JB'] = 54
  return d1
end # of generateDecks

d1 = generateDeck
4

1 回答 1

1

有一些更简单的方法可以生成一副纸牌,但要使您的方法有效,您的第二个案例陈述需要修改。由于您在各种循环中从 1 开始并转到 52,因此每第 13 张牌将是一张 K,因此无论何时x % 13 == 0。您可以对其他面卡做出相同的陈述,例如 Jack: x % 13 == 11。王牌是x % 13 == 1。常见的测试是x % 13,所以这就是你放在后面的内容case

case loop % 13 
when 1
  d1['A' + suite] = loop
when 11
  d1['J' + suite] = loop
when 12
  d1['Q' + suite] = loop
when 0
  d1['K' + suite] = loop
else
  d1["#{loop % 13}#{suite}"] = loop
end

既然你问了,这里有一个更简单的版本。这会迭代两个集合 - 套装和卡片值 - 并将每个组合插入到哈希中:

deck = {"JA" => 53, "JB" => 54}
%w(C D S H).each_with_index do |suit, s_index|
  %w(A 2 3 4 5 6 7 8 9 10 J Q K).each_with_index do |card, c_index|
    deck["#{card}#{suit}"] = 13 * s_index + 1 + c_index
  end
end
于 2013-02-11T18:51:36.737 回答