Draw クラス

Draw クラス

Draw クラスには、以下のメソッドがあります。

  • run
  • change

class Draw < Poker#ドロー・ポーカーはポーカーのサブクラス
  #定数
  NDECK = 1#実際のカジノでは、6 デックを 1 スタックとすることが多い
           #(ブラックジャックの場合)
  M     = 5#手札の枚数
  N     = 5#交換可能な枚数

  #クラス変数
  #なし

  #クラスメソッド
  #ドロー・ポーカーを行う
  def self.run()
    stack  = Stack.new(NDECK)#カードの山
    player = Array.new       #プレーヤーの手札

    super(stack)

    #カードを配る
    0.upto(M - 1) do
      player.push(stack.next())
    end

    #カードを画面に表示する
    display(player)

    #カードを交換する
    change(player, stack)

    #カードを画面に表示する
    display(player)

    #役を確認する
    STDERR.printf "%s\n", HANDS[check(player)]
  end

  #カードを交換する
  def self.change(player, stack)
    nflag = 0                            #真の flag の数
    flag  = Array.new(player.size, false)#カードの交換フラグ

    #交換するカードを決定する
    loop do
      STDERR.print "Please select the card(s) you want to change (1 - 5). "
      STDERR.print "To finish, input 0.\n"
      i = gets.chomp

      if    (i =~ /^[1-M]$/)
        if (flag[i.to_i - 1])
          next
        else
          flag[i.to_i - 1] = true
        end

        nflag += 1
        break if (nflag == N)
#      elsif (i =~ /^0$/)
      elsif (i == '0')#正規表現より処理が早い
        break
      else
        STDERR.print "Input Error!\n"
      end
    end

    #カードを交換する
    0.upto(player.size - 1) do |i|
      player[i] = stack.next() if (flag[i])
    end
  end

  #インスタンスメソッド
  #なし

  #アクセスメソッド(アクセサ)
  #なし
end