#==============================================================================
# ■ BlackJack vol.1.40 (分割定義2)
#------------------------------------------------------------------------------
# ※『Window_digits_number 5.90以上』(必須)
# ※『Picture_Blink_Cursor 1.00以上』(必須)
# ※『Window_Play_Cards 1.00以上』(必須)
# ※『Coin_Base 1.00以上』(必須)より下に挿入
# 12/04/08
#==============================================================================
class Scene_BlackJack
  include HIDE_BLACKJACK
  #--------------------------------------------------------------------------
  # ■ 勝者の取得
  #--------------------------------------------------------------------------
  def blackjack_winner
    type = @split_active ? [1,2] : [1]
    winner = []
    for i in type
      insurance = 0
      win = false
      #…………………………………………………………………………………………………
      # ■ DEALERのナンバーを取得
      #…………………………………………………………………………………………………
      if @numbers[0] > 21
        dealer = @numbers[1]
      elsif @numbers[1] > 21
        dealer = @numbers[0]
      else
        dealer = @numbers[1] > @numbers[0] ? @numbers[1] : @numbers[0]
      end
      #…………………………………………………………………………………………………
      # ■ PLAYERのナンバーを取得
      #…………………………………………………………………………………………………
      n = (i-1)*2
      if @numbers[2+n] > 21
        player = @numbers[3+n]
      elsif @numbers[3+n] > 21
        player = @numbers[2+n]
      else
        player = @numbers[3+n] > @numbers[2+n] ? @numbers[3+n] : @numbers[2+n]
      end
      #…………………………………………………………………………………………………
      # ■ 勝者の確認(burst)
      #…………………………………………………………………………………………………
      if @burst_s[0] == @burst && @burst_s[i] == @burst
        # □TIE
        win = nil
      elsif @burst_s[0] == @burst
        # □WIN
        win = true
      elsif @burst_s[i] == @burst
        # □DEALERがBJの場合(Insurance)
        if  dealer == 21 && @card_nums[0].size == 2 && @bet_insurance != 0
          # □WIN
          win = true
          insurance = @bet_insurance
        else
          # □LOSE
          win = false
        end
      else
      #…………………………………………………………………………………………………
      # ■ 勝者の確認
      #…………………………………………………………………………………………………
        if player > dealer
          # □WIN
          win = true
        elsif player < dealer
          # □DEALERがBJの場合(Insurance)
          if  dealer == 21 && @card_nums[0].size == 2 && @bet_insurance != 0
            # □WIN
            win = true
            insurance = @bet_insurance
          else
            # □LOSE
            win = false
          end
        else
          win = nil
          # □PLAYERがBJの場合
          if player == 21 && @card_nums[i].size == 2
            # □DEALERがBJの場合
            if  dealer == 21 && @card_nums[0].size == 2
              if @evenmoney && @game_select_window.index == 7
                win = true
              else
                # □TIE
                win = nil
              end
            else
              # □WIN
              win = true
            end
          # □PLAYERが21の場合
          elsif player == 21
            # □DEALERがBJの場合(LOSE)
            if  dealer == 21 && @card_nums[0].size == 2
              win = false
            end
          end
        end
      end
      winner[i-1] = win
    end
    # □BJ役の取得
    blackjack_hand?(winner,insurance)
  end
  #--------------------------------------------------------------------------
  # ■ BJ役の取得
  #--------------------------------------------------------------------------
  def blackjack_hand?(winner,insurance)
    bj_gains = [] ; bj_hits = [] ; bj_marks = []; bj_flushs = []
    bj_s = [] ; bet_coin = [@bet_point[0]*@coin_rate,@bet_point[1]*@coin_rate]
    chain = false
    for i in 0...winner.size
      gain = 0 ; payout = 0
      win = winner[i]
      id_s = [] ; marks = [] ; numbers = []
      m = marks[0] ; mark = 1.0
      flush = 1 ; hit = nil ; bj = nil
      #…………………………………………………………………………………………………
      # ■ 勝ちの場合
      #…………………………………………………………………………………………………
      if win == true
        if @burst_s[0] != @burst
          @burst_s[0] = @lose
        end
        if @burst_s[i+1] != @burst
          @burst_s[i+1] = @win
        end
        # □カードID/マーク/ナンバーの取得
        for n in @card_nums[i+1]
          id_s.push(@card_window.card[n])
          marks.push(@card_window.marks[n])
          numbers.push(@card_window.numbers[n])
        end
        # □Flush
        m = marks[0]
        for v in 1...marks.size
          if m == marks[v]
            flush += 1
          end
        end
        # □FLUSHレートの書き換え
        if flush == marks.size
          mark = (@scores[0]/2)*flush
          hit = 0
          @premium_window.bitmap.fill_rect(Rect.new(180,194,32,20),Color.new(0,0,0,0))
          @premium_window.draw_text(180,194,32,0,mark.to_s,2,@bj_font)
        else
          mark = 1.0
        end
        id_s = id_s.sort
        numbers = numbers.sort
        rate = 1.0 + mark
        num = (i)*2
        case @card_nums[i+1].size
        when 2
          # □BlackJack
          if @numbers[3+num] == 21
            # □EvenMoneyの判別
            if @evenmoney && @game_select_window.index == 7
              bj = 1.0
            else
              bj = @scores[1]
              hit = 1
            end
            rate = bj + mark
            # □Pure BlackJack(スペードA + スペードJ)
            if (id_s & [1,11]).size == ([1,11] & [1,11]).size
              rate = @scores[4] + mark + bj ; hit = 4
            end
            # □QueenJack(スペードA + スペードQ)
            if (id_s & [15,26]).size == ([15,26] & [15,26]).size
              rate = @scores[3] + mark + bj ; hit = 3
            end
          end
        when 3
          # □Six to Eight
          if numbers == [6,7,8]
            rate = @scores[2] + mark ; hit = 2
          end
          # □777
          if numbers == [7,7,7]
            rate = @scores[5] + mark ; hit = 5
          end
        when 6
          # □Six Under
          if @numbers[2+num] < 21 or @numbers[3+num] < 21
            rate = @scores[6] + mark ; hit = 6
          end
          # □Six Card 21
          if @numbers[2+num] == 21 or @numbers[3+num] == 21
            rate = @scores[8] + mark ; hit = 8
          end
          # □Ace to Six
          if numbers == [1,2,3,4,5,6]
            rate = @scores[10] + mark ; hit = 10
          end
        when 7
          # □Seven Under
          if @numbers[2+num] < 21 or @numbers[3+num] < 21
            rate = @scores[7] + mark ; hit = 7
          end
          # □Seven Card 21
          if @numbers[2+num] == 21 or @numbers[3+num] == 21
            rate = @scores[9] + mark ; hit = 9
          end
        when 11
          # □Eleven Card
          if @numbers[2+num] == 21 or @numbers[3+num] == 21
            rate = @scores[11] + mark ; hit = 11
          end
        end
        # □Insurance
        if insurance != 0
          gain = (@bet_point[0]+@bet_point[1]+@bet_double) * @coin_rate
          gain += insurance 
        else
          gain = (@bet_point[i]+@bet_double) * @coin_rate * rate
        end
        bet_coin[i] = @bet_point[i]*@coin_rate
        # □小数点切捨て
        gain = gain.floor
        payout = [gain - bet_coin[i],0].max
        chain |= true
        @time = 10
        # □連鎖の処理
        chain?(chain)
      #…………………………………………………………………………………………………
      # ■ 負けの場合
      #…………………………………………………………………………………………………
      elsif win == false
        if @burst_s[0] != @burst
          @burst_s[0] = @win
        end
        if @burst_s[i+1] != @burst
          @burst_s[i+1] = @lose
        end
        chain |= false
        # □連鎖の処理
        chain?(chain)
      #…………………………………………………………………………………………………
      # ■ 引き分けの場合
      #…………………………………………………………………………………………………
      else
        if @burst_s[0] != @burst && @burst_s[i+1] != @burst
          @burst_s[0] = @tie
          @burst_s[i+1] = @tie
        end
        @time = 48
        gain = bet_coin[i]
        payout = bet_coin[i]
        chain |= false
      end
      bj_gains[i] = gain
      bj_hits[i] = hit
      bj_marks[i] = marks
      bj_flushs[i] = flush
      bj_s[i] = bj
    end
    #…………………………………………………………………………………………………
    # ■ BET1/BET2(split)共通の処理
    #…………………………………………………………………………………………………
    draw_win?(@burst_s[0],@burst_s[1],@burst_s[2])
    @payout = 0
    gain = 0
    for i in 0...winner.size
      gain += bj_gains[i]
      win |= winner[i]
    end
    if HIDE_BLACKJACK::DEBUG
      p "PLAYER=" + bj_gains[0].to_s + " PLAYER(split)=" + bj_gains[1].to_s
    end
    @payout = gain
    #…………………………………………………………………………………………………
    # ■ payoutの取得
    #…………………………………………………………………………………………………
    @payout_coin_window.refresh(@payout)
    #…………………………………………………………………………………………………
    # ■ 所持コインを増やす
    #…………………………………………………………………………………………………
    $game_party.gain_coin(gain)
    time_up = 0
    #…………………………………………………………………………………………………
    # ■ 当たり効果音の取得
    #…………………………………………………………………………………………………
    if gain > 0 && gain != @bet_coin && win == true
      # □大当たりの場合
      if gain >= HIDE_BLACKJACK::ME_RATE_MAX[$game_temp.blackjack_type]
        $game_system.me_play(RPG::AudioFile.new(HIDE_BLACKJACK::HIT_ME_MAX))
        # □次のゲーム開始まで待つ(MEの演奏時間)
        time_up = HIDE_BLACKJACK::ME_MAX_TIME
      else
        $game_system.me_play(RPG::AudioFile.new(HIDE_BLACKJACK::HIT_ME))
        # □次のゲーム開始まで待つ(MEの演奏時間)
        time_up = HIDE_BLACKJACK::ME_TIME
      end
    end
    #…………………………………………………………………………………………………
    # ■ 当たり点滅とBJ役を描画
    #…………………………………………………………………………………………………
    @blackjack_window_under.bitmap.clear
    bet_flash = RPG::Cache.windowskin(HIDE_BLACKJACK::BET_HIT)
    flash = RPG::Cache.windowskin(HIDE_BLACKJACK::BJ_HIT)
    for i in 0...winner.size
      premium = ""
      if bj_gains[i] > 0 && bj_gains[i] != bet_coin[i] && winner[i] == true
        if @premium_window.visible
          # □当たりの出たレートを点滅
          if bj_s[i] == @scores[1] && bj_s[i] != 0 && bj_s[i] != nil
            @blackjack_window_under.draw_flash(flash,20,198+19,200,24,12)
          end
          # □Flushの点滅
          if bj_flushs[i] == bj_marks[i].size
            @blackjack_window_under.draw_flash(flash,20,198,200,24,12)
          end
          # □BJ役の点滅
          if bj_hits[i] != nil
            @blackjack_window_under.draw_flash(flash,20,198+bj_hits[i]*19,200,24,12)
          end
        end
        # □BJ役名の取得
        if bj_hits[i] != nil
          premium = @hand[bj_hits[i]]
        end
        # □EvenMoneyの判別
        if @evenmoney && @game_select_window.index == 7
          premium = @command[7]
        end
        # □Insuranceの判別
        if insurance != 0
          premium = @command[6]
        end
        # □BJ役の描画(カード下)
        draw_hand(premium,i*259)
        #　□BJ役の点滅描画(カード下)
        if premium != ""
          @blackjack_window_under.draw_flash(flash,280-22-(i*259),330+3,200,24,12)
        end
      end
      # □Bet点滅の描画
      if @bet_point[i] > 0 && gain != bet_coin[i] && winner[i] == true
        @blackjack_window_under.bitmap.blt(292-i*256,357,bet_flash,Rect.new(0,0,132,80))
        # □連鎖をON
        @old_chain = true
      end
    end
    #…………………………………………………………………………………………………
    # ■ 所持コインがBETを下回った場合初期化
    #…………………………………………………………………………………………………
    if $game_party.coin < @bet_coin
      @bet_double = 0
      @bet_point = [0,0]
      @bet_coin = 0
      # □BETの描画
      bet?(0,0) ; bet?(1,0)
    end
    #…………………………………………………………………………………………………
    # ■ 次の開始まで待つ
    #…………………………………………………………………………………………………
    time = 0
    @blackjack_window_under.blink_start
    while @blackjack_window_under.blink_active
      # □ゲーム画面を更新
      coin_update? ; Graphics.update
      # □回転数値の更新(所持コイン)
      @coin_window.update($game_party.coin)
      # □当りの演出を更新
      if time < time_up
        if @blackjack_window_under.count?
          time += 1
        end
        @blackjack_window_under.update
      else
        @blackjack_window_under.blink_end
      end
    end
    # □選択色を変更
    exchange_colors?
    @blackjack_step = 17
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新(ゲーム開始)
  #--------------------------------------------------------------------------
  def update_select
    unless @card_window.move
      #…………………………………………………………………………………………………
      # ■ キーヘルプを描画
      #…………………………………………………………………………………………………
      if @blackjack_step == 0 && @game_select_window.index == 0
        draw_key?
      else
        draw_key?(false)
      end
      #…………………………………………………………………………………………………
      # ■ A ボタンが押された場合
      #…………………………………………………………………………………………………
      if Input.repeat?(Input::A) && @game_select_window.index == 0
        if @blackjack_step != 0
          # □ブザー SE を演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
          return
        end
        if @bet_point[0] == 0
          # □ブザー SE を演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
          return
        end
        # □決定SEを演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
        bet?(0,-1)
        exchange_colors?
        return
      end
      #…………………………………………………………………………………………………
      # ■ L ボタンが押された場合
      #…………………………………………………………………………………………………
      if Input.trigger?(Input::L) && @game_select_window.index == 0
        if @blackjack_step != 0
          # □ブザー SE を演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
          return
        end
        if @bet_point[0] == 0
          # □ブザー SE を演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
          return
        end
        # □決定SEを演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
        @bet_point[0] = 0
        bet?(0,0)
        exchange_colors?
        return
      end
      #…………………………………………………………………………………………………
      # ■ R ボタンが押された場合
      #…………………………………………………………………………………………………
      if Input.trigger?(Input::R) && @game_select_window.index == 0
        if @blackjack_step != 0
          # □ブザー SE を演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
          return
        end
        max = [[$game_party.coin/@coin_rate,0].max,@chain+1].min
        if @bet_point[0] == max
          # □ブザー SE を演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
          return
        end
        # □決定SEを演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
        @bet_point[0] = 0
        bet?(0,max)
        exchange_colors?
        return
      end
      #…………………………………………………………………………………………………
      # ■ C ボタンが押された場合
      #…………………………………………………………………………………………………
      if Input.trigger?(Input::C)
        case @game_select_window.index
        when 0 #□Bet(賭け金を設定)
          if @blackjack_step != 0
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
            return
          end
          if $game_party.coin < @coin_rate * (@bet_point[0] + 1)
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
            @bet_point[0] = 0
            bet?(0,0)
            exchange_colors?
            return
          end
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
          exchange_colors?
          bet?(0,1)
        when 1 #□Deal(ゲーム開始)
          if @bet_coin == 0 or @blackjack_step != 0
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
            return
          end
          @game_select_window.active = false
          @blackjack_step = 1
          return
        when 2 # □Hit
          if @bet_coin == 0 or @blackjack_step == 0
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
            return
          end
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
          @hit = true
          # □カード選択色を変更
          exchange_colors?
          # □カードを引く
          @next_card += 1
          @cards_n = @split_step == 1 ? @card_nums[2] : @card_nums[1]
          px = @split_step == 1 ? 195 : 261
          sx = @split_step == 1 ? 98 : 357
          # □カードを追加
          @card_window.plus_card(px,198)
          @cards_n.push(@next_card)
          @new_x = @card_window.x_es.dup
          @new_y = @card_window.y_es.dup
          @card_window.position(@next_card,sx,198)
          @game_select_window.active = false
          @blackjack_step = 5
          return
        when 3 #□Stsnd
          if @bet_coin == 0 or @blackjack_step == 0
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
            return
          end
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
          @game_select_window.active = false
          @card_window.count_zero?
          @time = 10
          @blackjack_step = 9
          return
        when 4 #□Double
          if @double == false or @hit or @split_active
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
            return
          end
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
          @cards_n = @split_step == 1 ? @card_nums[2] : @card_nums[1]
          @double = false
          @surrender = false
          # □コインを減らす(賭け金)
          $game_party.lose_coin(@bet_coin)
          # □BETの再描画
          @bet_double = @bet_point[0]
          bet?(0,0)
          # □カード選択色を変更
          exchange_colors?
          # □カードを引く
          @next_card += 1
          # □カードを追加
          @card_window.plus_card(261,198)
          @card_nums[1].push(@next_card)
          @new_x = @card_window.x_es.dup
          @new_y = @card_window.y_es.dup
          @card_window.position(@next_card,357,198)
          @game_select_window.active = false
          @blackjack_step = 5
          return
        when 5 #□Split
          if @split == false or @hit or @split_active or @bet_insurance != 0
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
            return
          end
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
          # □コインを減らす(賭け金)
          $game_party.lose_coin(@bet_coin)
          @surrender = false
          @premium_window.visible = false
          @split_window.visible = true
          @player_select_window.visible = false
          @player2_select_window.visible = true
          # □カードを引く
          @next_card += 1
          # □カードを追加
          @card_window.plus_card(261,198)
          # □カードを引く
          @next_card += 1
          # □カードを追加
          @card_window.plus_card(195,198)
          @card_nums[1] = [2,4]
          @card_nums[2] = [3,5]
          card_position?(261,198,@card_nums[1])
          draw_card?(454,222,@card_nums[1])
          card_position?(2,198,@card_nums[2])
          draw_card?(195,222,@card_nums[2])
          @card_window.position(@next_card,357,198)
          @card_window.position(@next_card,98,198)
          @new_x = @card_window.x_es.dup
          @new_y = @card_window.y_es.dup
          @bet_point[1] = @bet_point[0]
          @split_active = true
          @split_step = 1
          # □選択肢の文字色を初期化
          exchange_colors?
          bet?(1,0)
          # □ナンバーの描画
          draw_numbers?
          @game_select_window.active = false
          @card_window.count_zero?
          @time = 10
          @blackjack_step = 20
          return
        when 6 #□Insurance
          if @insurance == false or @bet_insurance != 0 or @split_active
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
            return
          end
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
          @bet_insurance = @bet_coin/2
          @surrender = false
          # □コインを減らす(賭け金)
          $game_party.lose_coin(@bet_insurance)
          # □選択肢の文字色を初期化
          exchange_colors?
          return
        when 7 #□EvenMoney
          if @evenmoney == false or @split_active
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
            return
          end
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
          @game_select_window.active = false
          @card_window.count_zero?
          @time = 10
          @blackjack_step = 9
          return
        when 8 #□Surrender
          if @surrender == false or @hit or @split_active
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
            return
          end
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
          # □コインを増やす(賭け金の半分)
          $game_party.gain_coin(@bet_coin/2)
          # □カード選択色を変更
          exchange_colors?
          @card_window.count_zero?
          chain?(false)
          @payout = @bet_coin/2
          @game_select_window.active = false
          @time = 48
          @blackjack_step = 17
          return
        when 9 #□End
          if @playing
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
            return
          end
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
          blackjack_end
          return
        end
        return
      end
      #…………………………………………………………………………………………………
      # ■ B ボタンが押された場合
      #…………………………………………………………………………………………………
      if Input.trigger?(Input::B)
        if @playing
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::DECISION_SE))
          @game_select_window.active = false
          @card_window.count_zero?
          @time = 10
          @blackjack_step = 9
          return
        end
        # □キャンセルSEを演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::CANCEL_SE))
        blackjack_end
        return
      end
    end
  end
  #--------------------------------------------------------------------------
  # ■ 更新
  #--------------------------------------------------------------------------
  def coin_update?
    # □ 回転数値の更新(所持コイン)の更新
    @coin_window.update($game_party.coin)
    # □配当コイン数値ウィンドウの更新
    @payout_coin_window.refresh(@payout)
    # □BETコイン数値ウィンドウの更新
    @total_bet_coin_window.refresh(@bet_coin+@bet_insurance)
    # □BET数ウィンドウの更新
    @bets[0].refresh(@bet_point[0]+@bet_double)
    @bets[1].refresh(@bet_point[1])
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新
  #--------------------------------------------------------------------------
  def update
    #…………………………………………………………………………………………………
    # ■ 更新
    #…………………………………………………………………………………………………
    coin_update?
    #…………………………………………………………………………………………………
    # ■ 当りの演出を更新
    #…………………………………………………………………………………………………
    @blackjack_window_under.update
    #…………………………………………………………………………………………………
    # ■ ゲーム開始ウィンドウの更新
    #…………………………………………………………………………………………………
    if @game_select_window.active
      @game_select_window.update
      @player_select_window.update
      @player2_select_window.update
      update_select
      return
    end
    #…………………………………………………………………………………………………
    # ■ ゲームの流れ
    #…………………………………………………………………………………………………
    case @blackjack_step
    when 1
      # □コインを減らす(賭け金)
      if $game_party.coin >= @bet_coin
        $game_party.lose_coin(@bet_coin)
        @playing = true
        @card_window.count_zero?
        # □倍賭け可能な場合
        @double = $game_party.coin >= @bet_coin
        @blackjack_step = 2
      else
        # □ブザー SE を演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_BLACKJACK::BUZZER_SE))
        @blackjack_step = 0
        @playing = false
      end
      return
    when 2
      # □裏向きカードを表向きに変更
      @card_window.keys = {0=>true,1=>false,2=>true,3=>true}
      if @card_window.card_anim?
        @game_select_window.active = false
        @time = 10
        @blackjack_step = 3
        return
      end
      return
    when 3
      # □カード描画の更新
      @card_nums[0] = [0,1]
      draw_card?(454,56,@card_nums[0])
      @card_nums[1] = [2,3]
      draw_card?(454,222,@card_nums[1])
      draw_deck?(0,72,@card_nums[0]+@card_nums[1]+@card_nums[2])
      # □PLAYERのスコアを計算(2枚)
      player = 0 ; ace = false
      for i in @card_nums[1]
        n = @card_window.numbers[i]
        s = n > 9 ? 10 : n
        player += s
        ace |= n == 1
      end
      @numbers[3] = ace ? player + 10 : 0
      @numbers[2] = player
      # □同じ数値の場合
      @split = @card_window.numbers[2] == @card_window.numbers[3] && $game_party.coin >= @bet_coin
      # □BJの場合(DEALERの1枚目がA(1)の場合)
      @evenmoney = @numbers[3] == 21 && @card_window.numbers[0] == 1 && $game_party.coin >= @bet_coin
      # □DEALERの1枚目がA(1)の場合(Evenmoney以外)
      @insurance = @card_window.numbers[0] == 1 && $game_party.coin >= @bet_coin && @evenmoney == false
      # □降参の場合
      @surrender = true
      # □ナンバーの描画
      draw_numbers?
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      @game_select_window.index = 2
      @game_select_window.active = true
      # □カード選択色を変更
      exchange_colors?
      @blackjack_step = 4
      return
    when 4
      # □KEY入力
      return
    when 5
      mx = @split_step == 1 ? 2 : 261
      # □カードの移動
      pos = move_position?(mx,198,@cards_n)
      new_x = pos[0] ; new_y = pos[1]
      if @card_window.card_move?(@cards_n,new_x,new_y)
        @time = 10
        # □カード選択色を変更
        exchange_colors?
        @blackjack_step = 6
        return
      end
      return
    when 6
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      @card_window.play_card[@next_card].visible = true
      @card_window.count_zero?
      @time = 10
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      @blackjack_step = 7
      return
    when 7
      dx = @split_step == 1 ? 195 : 454
      # □裏向きカードを表向きに変更
      @card_window.all_hash?(@card_window.keys,false)
      @card_window.keys[@next_card] = true
      if @card_window.card_anim?
        @game_select_window.active = false
        @time = 10
        # □カード描画の更新
        draw_card?(dx,222,@cards_n)
        draw_deck?(0,72,@card_nums[0]+@card_nums[1]+@card_nums[2])
        @blackjack_step = 8
        return
      end
      return
    when 8
      nums = @split_step == 1 ? [4,5] : [2,3]
      burst = @split_step == 1 ? 2 : 1
      # □PLAYERのスコアを計算(3枚以上)
      player = 0 ; ace = false
      for i in @cards_n
        n = @card_window.numbers[i]
        s = n > 9 ? 10 : n
        player += s
        ace |= n == 1
      end
      @numbers[nums[1]] = ace ? player + 10 : 0
      @numbers[nums[0]] = player
      # □ナンバーの描画
      draw_numbers?
      # □Bustedの場合
      if (ace && @numbers[nums[1]] > 21 && @numbers[nums[0]] > 21) or (! ace && @numbers[nums[0]] > 21)
        @burst_s[burst] = @burst
        draw_win?(@burst_s[0],@burst_s[1],@burst_s[2])
        @card_window.count_zero?
        @time = 10
        @blackjack_step = 9
      # □Doubleの場合
      elsif @bet_double != 0
        @card_window.count_zero?
        @time = 10
        @blackjack_step = 9
      # □Hitの場合
      else
        @game_select_window.active = true
        @blackjack_step = 4
      end
      return
    when 9
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      @blackjack_step = @split_step == 1 ? 24 : 10
      return
    when 10
      # □裏向きカードを表向きに変更
      @card_window.all_hash?(@card_window.keys,false)
      @card_window.keys[1] = true
      if @card_window.card_anim?
        @time = 10
        # □カード描画の更新
        draw_card?(454,56,@card_nums[0])
        draw_deck?(0,72,@card_nums[0]+@card_nums[1]+@card_nums[2])
        # □DEALERのスコアを計算(2枚)
        dealer = 0 ; ace = false
        for i in @card_nums[0]
          n = @card_window.numbers[i]
          s = n > 9 ? 10 : n
          dealer += s
          ace |= n == 1
        end
        @numbers[1] = ace ? dealer + 10 : 0
        @numbers[0] = dealer
        # □ナンバーの描画
        draw_numbers?
        # □Bustedの場合
        if (ace && @numbers[1] > 21 && @numbers[0] > 21) or (! ace && @numbers[0] > 21)
          @burst_s[0] = @burst
          draw_win?(@burst_s[0],@burst_s[1],@burst_s[2])
          @blackjack_step = 16
          return
        end
        @card_window.count_zero?
        @blackjack_step = 11
        return
      end
      return
    when 11
      # □DEALERのスコアを計算(3枚以上)
      dealer = 0 ; ace = false
      for i in @card_nums[0]
        n = @card_window.numbers[i]
        s = n > 9 ? 10 : n
        dealer += s
        ace |= n == 1
      end
      @numbers[1] = ace ? dealer + 10 : 0
      @numbers[0] = dealer
      # □ナンバーの描画
      draw_numbers?
      # □16以下の場合カードを引く
      if (ace && @numbers[1] < 17 && @numbers[0] < 17) or (! ace && @numbers[0] < 17) or 
        ace && @numbers[1] > 21 && @numbers[0] < 17
        # □カードを引く
        @next_card += 1
        # □カードを追加
        @card_window.plus_card(261,32)
        @card_nums[0].push(@next_card)
        @new_x = @card_window.x_es.dup
        @new_y = @card_window.y_es.dup
        @card_window.position(@next_card,357,32)
        @blackjack_step = 12
      else
        @blackjack_step = 16
      end
      return
    when 12
      # □カードの移動
      pos = move_position?(261,32,@card_nums[0])
      new_x = pos[0] ; new_y = pos[1]
      if @card_window.card_move?(@card_nums[0],new_x,new_y)
        @time = 10
        @blackjack_step = 13
        return
      end
      return
    when 13
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      @time = 10
      @card_window.play_card[@next_card].visible = true
      @card_window.count_zero?
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      @blackjack_step = 14
      return
    when 14
      # □裏向きカードを表向きに変更
      @card_window.all_hash?(@card_window.keys,false)
      @card_window.keys[@next_card] = true
      if @card_window.card_anim?
        @time = 10
        # □カード描画の更新
        draw_card?(454,56,@card_nums[0])
        draw_deck?(0,72,@card_nums[0]+@card_nums[1]+@card_nums[2])
        # □DEALERのスコアを計算(3枚以上)
        dealer = 0 ; ace = false
        for i in @card_nums[0]
          n = @card_window.numbers[i]
          s = n > 9 ? 10 : n
          dealer += s
          ace |= n == 1
        end
        @numbers[1] = ace ? dealer + 10 : 0
        @numbers[0] = dealer
        # □ナンバーの描画
        draw_numbers?
        # □Bustedの場合
        if (ace && @numbers[1] > 21 && @numbers[0] > 21) or (! ace && @numbers[0] > 21)
          @burst_s[0] = @burst
          draw_win?(@burst_s[0],@burst_s[1],@burst_s[2])
          @blackjack_step = 16
          return
        end
        @card_window.count_zero?
        @blackjack_step = 15
        return
      end
    when 15
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      @blackjack_step = 11
      return
    when 16
      # □勝者の取得
      blackjack_winner
      return
    when 17
      # □カードの移動
      if @split_active
        new_x = {0=>261,2=>261,3=>2}
        new_y = {0=>32,2=>198,3=>198}
      else
        new_x = {0=>261,2=>261}
        new_y = {0=>32,2=>198}
      end
      for i in 1...@card_nums[0].size
        new_x[@card_nums[0][i]] = 357
        new_y[@card_nums[0][i]] = 32
      end
      for i in 1...@card_nums[1].size
        new_x[@card_nums[1][i]] = 357
        new_y[@card_nums[1][i]] = 198
      end
      for i in 1...@card_nums[2].size
        new_x[@card_nums[2][i]] = 98
        new_y[@card_nums[2][i]] = 198
      end
      if @card_window.card_move?(@card_nums[0]+@card_nums[1]+@card_nums[2],new_x,new_y)
        @blackjack_step = 18
        return
      end
      return
    when 18
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      @card_window.count_zero?(0)
      @blackjack_step = 19
      return
    when 19
      # □裏向きカードを表向きに変更
      @card_window.all_hash?(@card_window.keys,true)
      if @card_window.card_anim?(false)
        @card_window.play_card.each{|a| a.visible = false }
        @card_window.play_card[0].visible = true
        @card_window.play_card[1].visible = true
        @card_window.play_card[2].visible = true
        @card_window.play_card[3].visible = true
        # □ブラックジャックの初期化
        blackjack_reset?
      end
      return
    #…………………………………………………………………………………………………
    # ■Splitの処理
    #…………………………………………………………………………………………………
    when 20
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      @blackjack_step = 21
      return
    when 21
      # □裏向きカードを表向きに変更
      @card_window.all_hash?(@card_window.keys,false)
      @card_window.keys = {0=>false,1=>false,2=>false,3=>false,4=>true,5=>true}
      if @card_window.card_anim?
        @blackjack_step = 22
        return
      end
      return
    when 22
      draw_card?(454,222,@card_nums[1])
      draw_card?(195,222,@card_nums[2])
      draw_deck?(0,72,@card_nums[0]+@card_nums[1]+@card_nums[2])
      # □PLAYER1のスコアを計算(2枚)
      player = 0 ; ace = false
      for i in @card_nums[1]
        n = @card_window.numbers[i]
        s = n > 9 ? 10 : n
        player += s
        ace |= n == 1
      end
      @numbers[3] = ace ? player + 10 : 0
      @numbers[2] = player
      # □PLAYER2のスコアを計算(2枚)
      player = 0 ; ace = false
      for i in @card_nums[2]
        n = @card_window.numbers[i]
        s = n > 9 ? 10 : n
        player += s
        ace |= n == 1
      end
      @numbers[5] = ace ? player + 10 : 0
      @numbers[4] = player
      # □ナンバーの描画
      draw_numbers?
      @game_select_window.index = 2
      @game_select_window.active = true
      # □カード選択色を変更
      exchange_colors?
      @blackjack_step = 23
      return
    when 23
      # □KEY入力
      return
    when 24
      @split_step = 2
      @player_select_window.visible = true
      @player2_select_window.visible = false
      @game_select_window.index = 2
      @game_select_window.active = true
      @blackjack_step = 25
    when 25
      # □KEY入力
      return
    end
  end
end