0

カードのデッキのハッシュを作成しようとしていますが、いつそれをエースにするかを決めることができません。私のキーはどれもエースとして表示されず、まだ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

カードのデッキを生成する簡単な方法がありますが、メソッドを機能させるには、2番目のcaseステートメントを変更する必要があります。1から始めて、さまざまなループで52に進むので、13枚ごとのカードがキングになりますx % 13 == 0。他のフェイスカードについても同じことを言うことができます。例:ジャック: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

あなたが尋ねたので、ここにもっと簡単なバージョンがあります。これにより、スーツとカードの値の2つのコレクションが繰り返され、各組み合わせがハッシュに挿入されます。

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 に答える