#==============================================================================
# ■ Baccarat vol.1.30
#------------------------------------------------------------------------------
# ※『Window_digits_number 5.90以上』(必須)
# ※『Picture_Blink_Cursor 1.60以上』(必須)
# ※『Window_Play_Cards 1.00以上』(必須)
# ※『Coin_Base 5.00以上』(必須)より下に挿入
# 12/04/22
#==============================================================================
module HIDE_BACCARAT
  #==============================================================================
  # ■ デバッグ(開発者用)
  #==============================================================================
  DEBUG = false                    # [true/false]
  #==============================================================================
  # ■ イベントコマンド『スクリプト』に以下を追加
  #------------------------------------------------------------------------------
  #   make_baccarat(type)
  #------------------------------------------------------------------------------
  #   type=バカラタイプの設定を参照
  #==============================================================================
  # ■ ゲーム設定
  #==============================================================================
  MAX_BET = 15                     # 一箇所に賭けられるコイン最大数(1〜15)
  MIN_BET = 3                      # 一箇所に賭けられるコイン最小数(1〜15)※初期値
  #==============================================================================
  # ■ グラフィック設定 ※Windowskinsフォルダ内のファイル名を指定
  #==============================================================================
  BACK = "coin_background1"        # バカラの背景画像
  TOP = "baccarat_table"           # バカラの背景画像
  BET = "bet_coin"                 # コイン画像
  CHIP = "chip"                    # チップ画像
  SELECT = "cursor_back"           # カーソル画像
  CURSOR = "cursor_anim"           # カーソルアイコン画像
  BACCARAT_HIT = "flash_circle"    # 当たり効果画像
  #==============================================================================
  # ■ 選択肢とヘルプの設定
  #==============================================================================
  GAME_COMS = ["Bet","Deal","Clear","End"]
  GAME_HELPS = ["賭け金を決めます。","ゲームを開始します。",
  "全てのbetを戻します。","ゲームを終了します。"]
  PLAY_COMS = ["Player","Banker","Tie"]
  PLAY_HELPS = ["Playerに賭けます。","Bankerに賭けます。",
  "Tie(引き分け)に賭けます。"]
  #==============================================================================
  # ■ 音の設定 ※ファイル名を指定 ※Audioフォルダ内 #()のファイル名
  #==============================================================================
  BGM = "019-Field02"              # バカラ実行中のBGM(BGM)
  DECISION_SE = "002-System02"     # 決定キーの効果音(SE)
  CANCEL_SE = "003-System03"       # キャンセルキーの効果音(SE)
  BUZZER_SE = "004-System04"       # ブザー音の効果音(SE)
  HIT_ME_MAX = "009-Fanfare03"     # 大当りの効果音(ME)
  HIT_ME = "007-Fanfare01"         # 当りの効果音(ME)
  
  ME_MAX_TIME = 12                 # 大当りの待ち時間(HIT_ME_MAXの演奏時間(秒))
  ME_TIME = 4                      # 当りの待ち時間(HIT_MEの演奏時間(秒))
  #==============================================================================
  # ■ バカラタイプの設定(COIN,JOKER,RATE,ME_RATE_MAX)
  # COIN[n] = value　※n=タイプ番号($game_temp.baccarat_type から参照される)
  #==============================================================================
  COIN = [] # value=消費コイン数(賭けるコイン枚数)
  COIN[0] = 300 #300枚賭け
  COIN[1] = 100
  COIN[2] = 10
  # □大当りの効果音(HIT_ME_MAX)を演奏する獲得コイン数(n以上)
  ME_RATE_MAX = []
  ME_RATE_MAX[0] = 6000
  ME_RATE_MAX[1] = 3000
  ME_RATE_MAX[2] = 60
  #==============================================================================
  # ■ 文字色設定
  #==============================================================================
  A_COLOR = Color.new(255,255,255,255)     # 通常色
  B_COLOR = Color.new(0,0,0,255)           # 影色
  S_COLOR = Color.new(255,255,0,255)       # システム色
  N_COLOR = Color.new(100,100,100,255)     # 無効色
  #==============================================================================
  # ■ メニュー文字設定
  #==============================================================================
  WORD1 = "Coin"
  WORD2 = "Bet"
  WORD3 = "Payout"
  WORD4 = "Max Bet"
  WORD5 = "Win!"
  WORD6 = "Lose!"
  WORD7 = "Tie!"
  WORD8 = "Natural"
  WORD9 = "Stand"
  #--------------------------------------------------------------------------
  # 選択肢 の文字設定
  #--------------------------------------------------------------------------
  S_SIZE = 22                              # 文字サイズ
  S_BOLD = true                            # 太文字フラグ[true/false]
  S_ITALIC = false                         # 斜め文字フラグ[true/false]
  S_SHADOW = true                          # 影文字フラグ[true/false]
  S_ROUND = false                          # 囲み文字フラグ[true/false]
  S_NAME = ["Georgia","ＭＳ ゴシック"]     # フォント名
  #--------------------------------------------------------------------------
  # Help の文字設定
  #--------------------------------------------------------------------------
  H_SIZE = 16                              # 文字サイズ
  H_BOLD = false                           # 太文字フラグ[true/false]
  H_ITALIC = false                         # 斜め文字フラグ[true/false]
  H_SHADOW = false                         # 影文字フラグ[true/false]
  H_ROUND = false                          # 囲み文字フラグ[true/false]
  H_NAME = ["ＭＳ ゴシック"]               # フォント名
  #--------------------------------------------------------------------------
  # コイン の文字設定
  #--------------------------------------------------------------------------
  C_SIZE = 26                              # 文字サイズ
  C_BOLD = true                            # 太文字フラグ[true/false]
  C_ITALIC = false                         # 斜め文字フラグ[true/false]
  C_SHADOW = false                         # 影文字フラグ[true/false]
  C_ROUND = false                          # 囲み文字フラグ[true/false]
  C_NAME = ["Arial","ＭＳ ゴシック"]       # フォント名
  #--------------------------------------------------------------------------
  # システム の文字設定
  #--------------------------------------------------------------------------
  T_SIZE = 18                              # 文字サイズ
  T_BOLD = true                            # 太文字フラグ[true/false]
  T_ITALIC = false                         # 斜め文字フラグ[true/false]
  T_SHADOW = false                         # 影文字フラグ[true/false]
  T_ROUND = false                          # 囲み文字フラグ[true/false]
  T_NAME = ["Arial","ＭＳ ゴシック"]       # フォント名
  #==============================================================================
  
  #==============================================================================
  S_FONT = Copy_Font.new(S_SIZE,S_BOLD,S_ITALIC,S_SHADOW,S_ROUND,S_NAME,A_COLOR,B_COLOR)
  C_FONT = Copy_Font.new(C_SIZE,C_BOLD,C_ITALIC,C_SHADOW,C_ROUND,C_NAME,A_COLOR,B_COLOR)
  H_FONT = Copy_Font.new(H_SIZE,H_BOLD,H_ITALIC,H_SHADOW,H_ROUND,H_NAME,A_COLOR,B_COLOR)
  T_FONT = Copy_Font.new(T_SIZE,T_BOLD,T_ITALIC,T_SHADOW,T_ROUND,T_NAME,S_COLOR,B_COLOR)
  A_FONT = Copy_Font.new(18,true,false,false,false,["Georgia","ＭＳ ゴシック"],S_COLOR,B_COLOR)
  M_FONT = Copy_Font.new(18,true,false,false,false,["Arial","ＭＳ ゴシック"],A_COLOR,B_COLOR)
end

#==============================================================================
# ■ Scene_Baccarat
#==============================================================================
class Scene_Baccarat
  include HIDE_BACCARAT
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    game_reset?
    # □マップ BGM を記憶し、BGM を停止
    $game_temp.map_bgm = $game_system.playing_bgm
    $game_system.bgm_stop
    # □バカラ BGM を演奏
    $game_system.bgm_play(RPG::AudioFile.new(HIDE_BACCARAT::BGM))
  end
  #--------------------------------------------------------------------------
  # ■ 競合対策(初期化)
  #--------------------------------------------------------------------------
  def format?
    if $game_party.baccarat_data == nil
      $game_party.baccarat_data = []
    end
  end
  #--------------------------------------------------------------------------
  # ■ バカラの初期化
  #--------------------------------------------------------------------------
  def game_reset?
    @baccarat_step = 0
    # □ゲーム実行中フラグをOFF
    @playing = false
  end
  #--------------------------------------------------------------------------
  # ■ メイン処理
  #--------------------------------------------------------------------------
  def main
    # □競合対策(初期化)
    format?
    # □タイプを取得
    t = $game_temp.baccarat_type
    # □掛け金を取得
    @coin_rate = HIDE_BACCARAT::COIN[t]
    @chain = HIDE_BACCARAT::MIN_BET - 1
    @chain_count = 0
    @bet_point = [0,0,0]
    @natural = HIDE_BACCARAT::WORD8
    @stand = HIDE_BACCARAT::WORD9
    #…………………………………………………………………………………………………
    # ■bet画像を取得
    #…………………………………………………………………………………………………
    @bet_pic = RPG::Cache.windowskin(HIDE_BACCARAT::BET)
    @bet_chip = RPG::Cache.windowskin(HIDE_BACCARAT::CHIP)
    #…………………………………………………………………………………………………
    # ■文字装飾を取得
    #…………………………………………………………………………………………………
    s_font = HIDE_BACCARAT::S_FONT ; h_font = HIDE_BACCARAT::H_FONT
    c_font = HIDE_BACCARAT::C_FONT ; t_font = HIDE_BACCARAT::T_FONT
    @a_font = HIDE_BACCARAT::A_FONT ; @m_font = HIDE_BACCARAT::M_FONT
    #…………………………………………………………………………………………………
    # ■バカラウィンドウ背景を作成
    #…………………………………………………………………………………………………
    @baccarat_window_back = Picture_Blink_Cursor.new(RPG::Cache.windowskin(HIDE_BACCARAT::BACK))
    #…………………………………………………………………………………………………
    # ■当たり演出ウィンドウを作成
    #…………………………………………………………………………………………………
    @baccarat_window_under = Picture_Blink_Cursor.new
    @baccarat_window_under.start(100)
    #…………………………………………………………………………………………………
    # ■バカラウィンドウ背景(上)を作成
    #…………………………………………………………………………………………………
    @baccarat_window_top = Picture_Blink_Cursor.new(RPG::Cache.windowskin(HIDE_BACCARAT::TOP))
    @baccarat_window_top.z = 100 + 2
    #…………………………………………………………………………………………………
    # ■文字を描画
    #…………………………………………………………………………………………………
    @baccarat_window_top.bitmap.draw_cache_text(438,446,320,32,HIDE_BACCARAT::WORD1,0,t_font)
    @baccarat_window_top.bitmap.draw_cache_text(438,367,320,32,HIDE_BACCARAT::WORD2,0,t_font)
    @baccarat_window_top.bitmap.draw_cache_text(24,403,320,32,HIDE_BACCARAT::WORD3,0,t_font)
    @baccarat_window_top.bitmap.draw_cache_text(504,405,320,32,HIDE_BACCARAT::WORD4,0,t_font)
    @baccarat_window_top.bitmap.draw_cache_text(595,1,320,32,@coin_rate.to_s,0,t_font)
    @baccarat_window_top.bitmap.blt(555,0,@bet_pic,Rect.new(7*32,0,32,24))
    #…………………………………………………………………………………………………
    # ■バカラ表示ウィンドウを作成
    #…………………………………………………………………………………………………
    @baccarat_window_chain = Picture_Blink_Cursor.new(Bitmap.new(640,480))
    @baccarat_window_chain.z = 100 + 3
    #…………………………………………………………………………………………………
    # ■BET数ウィンドウを作成
    #…………………………………………………………………………………………………
    bet = [""]
    for i in 1...16
      bet.push("x " + sprintf("%02d",i))
    end
    @bets = []
    @bets[0] = Window_digits_number.new(92,310,100,@bet_point[0],10,bet,@m_font)
    @bets[1] = Window_digits_number.new(92+208,310,100,@bet_point[1],10,bet,@m_font)
    @bets[2] = Window_digits_number.new(92+208*2,310,100,@bet_point[2],10,bet,@m_font)
    #…………………………………………………………………………………………………
    # ■カードウィンドウを作成
    #…………………………………………………………………………………………………
    @card_window = Window_Play_Cards.new(6)
    for i in 0...6
      y = 80
      cx = 48+2 ; cn = 320
      case i
      when 0
        x = cx
        @card_window.play_card[i].visible = true
      when 1
        x = cx+112
        @card_window.play_card[i].visible = true
      when 2 # □Player3枚目
        x = cx+112
      when 3
        x = cx+cn
        @card_window.play_card[i].visible = true
      when 4
        x = cx+cn+112
        @card_window.play_card[i].visible = true
      when 5# □banker3枚目
        x = cx+cn+112
      end
      # □カードZ座標を指定
      @card_window.z = 100 + 2
      # □カード座標を指定
      @card_window.position(i,x,y)
    end
    #…………………………………………………………………………………………………
    # ■コイン数値ウィンドウを作成
    #…………………………………………………………………………………………………
    @coin_window = Window_digits_number.new(500-13,427,100,$game_party.coin,10,10,c_font)
    #…………………………………………………………………………………………………
    # ■BETコイン数値ウィンドウを作成
    #…………………………………………………………………………………………………
    @bet_coin = 0
    @total_bet_coin_window = Window_digits_number.new(500-13,427-79,100,@bet_coin,10,10,c_font)
    #…………………………………………………………………………………………………
    # ■配当コイン数値ウィンドウを作成
    #…………………………………………………………………………………………………
    @payout = 0
    @payout_coin_window = Window_digits_number.new(47+26,325+60,100,@payout,10,10,c_font)
    #…………………………………………………………………………………………………
    # ■ゲーム開始選択ウィンドウを作成
    #…………………………………………………………………………………………………
    pic = RPG::Cache.windowskin(HIDE_BACCARAT::SELECT)
    icon = RPG::Cache.windowskin(HIDE_BACCARAT::CURSOR)
    com = HIDE_BACCARAT::GAME_COMS
    helps = HIDE_BACCARAT::GAME_HELPS
    @game_select_window = Picture_Blink_Cursor.new(16,420+16,96,32,2,0,4,4)
    @game_select_window.draw_cursor(pic,com,s_font,icon)
    @game_select_window.start
    # □ヘルプウィンドウの関連付け
    @game_select_window.make_helps(16+4,356+16,helps,h_font)
    #…………………………………………………………………………………………………
    # ■BET選択ウィンドウを作成
    #…………………………………………………………………………………………………
    pic = RPG::Cache.windowskin(HIDE_BACCARAT::SELECT)
    icon = RPG::Cache.windowskin(HIDE_BACCARAT::CURSOR)
    com = HIDE_BACCARAT::PLAY_COMS
    helps = HIDE_BACCARAT::PLAY_HELPS
    @bet_select_window = Picture_Blink_Cursor.new(16,420+16,96,32,16,0,3,3)
    @bet_select_window.draw_cursor(pic,com,s_font,icon)
    # □ヘルプウィンドウの関連付け
    @bet_select_window.make_helps(16+4,356+16,helps,h_font)
    @exchange = [false]*3
    
    # □初期化
    refresh
    # □選択肢の文字色を初期化
    exchange_colors?
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @baccarat_window_back.dispose
    @baccarat_window_top.dispose
    @baccarat_window_under.dispose
    @game_select_window.dispose
    @bet_select_window.dispose
    @baccarat_window_chain.dispose
    @bets.each{|a| a.dispose}
    @coin_window.dispose
    @total_bet_coin_window.dispose
    @payout_coin_window.dispose
    @card_window.dispose
  end
  #--------------------------------------------------------------------------
  # ■ 初期化
  #--------------------------------------------------------------------------
  def refresh
    @numbers = [0,0]
    @player = ""
    @banker = ""
    # □Max_Betの描画
    draw_max_bet?
    # □ナンバーの描画
    draw_numbers?
    # □ナンバー名の描画
    draw_stand?
  end
  #--------------------------------------------------------------------------
  # ■ 選択肢の色更新
  #--------------------------------------------------------------------------
  def exchange_colors?
    @game_select_window.exchange[0] = $game_party.coin < @coin_rate
    @game_select_window.exchange[1] = @bet_coin == 0
    @game_select_window.exchange[2] = @bet_coin == 0
    @game_select_window.refresh
  end
  #--------------------------------------------------------------------------
  # ■ BET選択肢の色更新
  #--------------------------------------------------------------------------
  def bet_select_colors?
    if @bet_point[0] == 0 && @bet_point[1] == 0
      n = @bet_point[2] > 0 && $game_party.coin <= @bet_coin
      @bet_select_window.exchange[0] = n
      @bet_select_window.exchange[1] = n
      @bet_select_window.exchange[2] = false
    end
    if @bet_point[0] > 0 or @bet_point[1] > 0
      n = @bet_point[2] == 0 && $game_party.coin <= @bet_coin
      @bet_select_window.exchange[2] = n
    end
    @bet_select_window.refresh
  end
  #--------------------------------------------------------------------------
  # ■ 連鎖の処理
  #--------------------------------------------------------------------------
  def chain?(chain)
    max = HIDE_BACCARAT::MAX_BET - 1
    min = HIDE_BACCARAT::MIN_BET - 1
    if @old_chain == true && chain
      @chain = [[@chain + 1,min].max,max].min
      @chain_count = 1
    elsif @old_chain == false && chain == false
      @chain = [[@chain - 1,min].max,max].min
      @chain_count = 2
    else
      @chain_count = 0
    end
    @old_chain = chain
    # □BETの描画
    bet?(0,0) ; bet?(1,0) ; bet?(2,0)
  end
  #--------------------------------------------------------------------------
  # ■ Max_Betの描画
  #--------------------------------------------------------------------------
  def draw_max_bet?
    t = $game_temp.baccarat_type
    if $game_party.baccarat_data[t] == nil
      $game_party.baccarat_data[t] = [0]*3
    end
    # □PLAYER/BANKERの勝率を描画
    all = $game_party.baccarat_data[t][0]
    a = $game_party.baccarat_data[t][1] * 1.00
    b = $game_party.baccarat_data[t][2] * 1.00
    m_font = Copy_Font.new(16,true)
    m_font.name = ["Arial","ＭＳ ゴシック"]
    n1 = (all == 0 or a == 0) ? "0.00%" : sprintf("%.2f",((a/all)*100)) + "%"
    n2 = (all == 0 or b == 0) ? "0.00%" : sprintf("%.2f",((b/all)*100)) + "%"
    @baccarat_window_top.draw_text(96+96,220,80,0,n1,2,m_font)
    @baccarat_window_top.draw_text(96+96+320,220,80,0,n2,2,m_font)
    # □Max_Betの描画
    @baccarat_window_chain.bitmap.fill_rect(Rect.new(446+128,407-2,32,24),Color.new(0,0,0,0))
    @baccarat_window_chain.bitmap.blt(446+128,407-2,@bet_pic,Rect.new(32 * @chain_count,24 * @chain,32,24))
  end
  #--------------------------------------------------------------------------
  # ■ ナンバーの描画
  #--------------------------------------------------------------------------
  def draw_numbers?
    n_font = Copy_Font.new(36,true)
    n_font.name = ["Arial","ＭＳ ゴシック"]
    @baccarat_window_chain.draw_text(160,28,32,32,@numbers[0].to_s,0,n_font)
    @baccarat_window_chain.draw_text(160+320,28,32,32,@numbers[1].to_s,0,n_font)
  end
  #--------------------------------------------------------------------------
  # ■ ナンバー名の描画
  #--------------------------------------------------------------------------
  def draw_stand?
    @baccarat_window_chain.draw_text(200,36,120,32,@player,0,@a_font)
    @baccarat_window_chain.draw_text(200+320,36,120,32,@banker,0,@a_font)
  end
  #--------------------------------------------------------------------------
  # ■ キーヘルプを描画
  #--------------------------------------------------------------------------
  def draw_key?(d = true)
    pic = RPG::Cache.windowskin(HIDE_BACCARAT::BET)
    for i in 0..3
      @baccarat_window_chain.bitmap.fill_rect(Rect.new(16+i*32,456,32,24),Color.new(0,0,0,0))
      if d
        @baccarat_window_chain.bitmap.blt(16+i*32,456,pic,Rect.new(7*32,24*5+i*24,32,24))
      end
    end
  end
  #--------------------------------------------------------------------------
  # ■ BETの描画
  #--------------------------------------------------------------------------
  def bet?(id,n)
    # □選択肢の文字色を初期化
    exchange_colors?
    max = HIDE_BACCARAT::MAX_BET
    if @chain+1 >= @bet_point[id] + n
      @bet_point[id] = [[@bet_point[id]+ n,0].max,max].min
    elsif n == 0
      if $game_party.coin >= @coin_rate * @bet_point[id]
        max = @chain+1
      else
        max = [[$game_party.coin/@coin_rate,0].max,@chain].min
      end
      @bet_point[id] = [[@bet_point[id]+ n,0].max,max].min
    else
      @bet_point[id] = 0
    end
    @bet_coin = 0
    # □Betの描画
    for i in 0...@bet_point.size
      @bet_coin += @bet_point[i]*@coin_rate
      @baccarat_window_chain.bitmap.fill_rect(Rect.new(84+i*208,300-12,48,48),Color.new(0,0,0,0))
      @baccarat_window_chain.bitmap.fill_rect(Rect.new(84+i*208+24,300-24,48,48),Color.new(0,0,0,0))
      @baccarat_window_chain.bitmap.fill_rect(Rect.new(84+i*208-24,300-24,48,48),Color.new(0,0,0,0))
      if @bet_point[i] > 0
        n = (@bet_point[i]-1)
        if n > 9 && n < 15
          @baccarat_window_chain.bitmap.blt(84+i*208+24,300-24,@bet_chip,Rect.new(0,48 * 4,48,48))
          @baccarat_window_chain.bitmap.blt(84+i*208-24,300-24,@bet_chip,Rect.new(0,48 * (n%10),48,48))
          @baccarat_window_chain.bitmap.blt(84+i*208,300-12,@bet_chip,Rect.new(0,48 * 4,48,48))
        end
        if n > 4 && n < 10
          @baccarat_window_chain.bitmap.blt(84+i*208+24,300-24,@bet_chip,Rect.new(0,48 * (n%5),48,48))
          @baccarat_window_chain.bitmap.blt(84+i*208,300-12,@bet_chip,Rect.new(0,48 * 4,48,48))
        end
        if n < 5
          @baccarat_window_chain.bitmap.blt(84+i*208,300-12,@bet_chip,Rect.new(0,48 * n,48,48))
        end
      end
    end
    # □選択肢の文字色を初期化
    exchange_colors?
  end
  #--------------------------------------------------------------------------
  # ■ WIN/LOSEの描画
  #--------------------------------------------------------------------------
  def draw_win?(draw = true)
    a_font = @a_font.dup
    b_font = @a_font.dup
    a_font.size = 22 ; b_font.size = 22
    if draw
      t = $game_temp.baccarat_type
      $game_party.baccarat_data[t][0] += 1
      
      if @numbers[0] > @numbers[1]
        $game_party.baccarat_data[t][1] += 1
        player = HIDE_BACCARAT::WORD5
        banker = HIDE_BACCARAT::WORD6
        b_font.color = HIDE_BACCARAT::N_COLOR
      elsif @numbers[0] < @numbers[1]
        $game_party.baccarat_data[t][2] += 1
        player = HIDE_BACCARAT::WORD6
        banker = HIDE_BACCARAT::WORD5
        a_font.color = HIDE_BACCARAT::N_COLOR
      else
        player = HIDE_BACCARAT::WORD7
        banker = HIDE_BACCARAT::WORD7
        a_font.color = HIDE_BACCARAT::A_COLOR
        b_font.color = HIDE_BACCARAT::A_COLOR
      end
    else
      player = "" ; banker = ""
    end
    @baccarat_window_chain.draw_text(100,220,100,32,player,1,a_font)
    @baccarat_window_chain.draw_text(100+320,220,100,32,banker,1,b_font)
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新(ゲーム開始)
  #--------------------------------------------------------------------------
  def update_select
    #…………………………………………………………………………………………………
    # ■ C ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::C)
      unless @card_window.move
        case @game_select_window.index
        when 0 #□賭け金を設定
          if $game_party.coin < @coin_rate
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::BUZZER_SE))
            return
          end
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::DECISION_SE))
          bet_select_colors?
          @game_select_window.active = false
          @game_select_window.visible = false
          @bet_select_window.index = 0
          @bet_select_window.active = true
          @bet_select_window.visible = true
          # □キーヘルプを表示
          draw_key?(true)
          return
        when 1 #□ゲーム開始
          if @bet_coin == 0
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::BUZZER_SE))
            return
          end
          @game_select_window.active = false
          @baccarat_step = 1
          return
        when 2 # Clear
          if @bet_coin == 0
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::BUZZER_SE))
            return
          end
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::DECISION_SE))
          @bet_point = [0,0,0]
          @bet_coin = 0
          bet?(0,0)
          return
        when 3 #□ゲーム終了
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::DECISION_SE))
          baccarat_end
          return
        end
      end
      return
    end
    #…………………………………………………………………………………………………
    # ■ B ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::B)
      # □キャンセルSEを演奏
      $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::CANCEL_SE))
      baccarat_end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新(BET選択)
  #--------------------------------------------------------------------------
  def update_bet_select
    #…………………………………………………………………………………………………
    # ■ C ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.repeat?(Input::C)
      bet_key?(1)
      return
    end
    #…………………………………………………………………………………………………
    # ■ A ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.repeat?(Input::A)
      if @bet_point[@bet_select_window.index] == 0
        # □ブザー SE を演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::BUZZER_SE))
        return
      end
      bet_key?(-1)
      return
    end
    #…………………………………………………………………………………………………
    # ■ L ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::L)
      id = @bet_select_window.index
      if @bet_point[id] == 0
        # □ブザー SE を演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::BUZZER_SE))
        return
      end
      # □決定SEを演奏
      $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::DECISION_SE))
      @bet_point[id] = 0
      bet?(id,0)
      bet_select_colors?
      return
    end
    #…………………………………………………………………………………………………
    # ■ R ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::R)
      id = @bet_select_window.index
      max = [[$game_party.coin/@coin_rate,0].max,@chain+1].min
      if @bet_point[id] == max
        # □ブザー SE を演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::BUZZER_SE))
        return
      end
      # □決定SEを演奏
      $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::DECISION_SE))
      @bet_point[id] = 0
      bet_key?(max)
      return
    end
    #…………………………………………………………………………………………………
    # ■ B ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::B)
      # □キャンセルSEを演奏
      $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::CANCEL_SE))
      @bet_select_window.index = -1
      @bet_select_window.active = false
      @bet_select_window.visible = false
      @game_select_window.active = true
      @game_select_window.visible = true
      # □キーヘルプを表示
      draw_key?(false)
      return
    end
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新(BET選択)
  #--------------------------------------------------------------------------
  def bet_key?(num)
    case @bet_select_window.index
    when 0 # Player
      if @bet_point[1] > 0
        @bet_point[1] = 0
      elsif $game_party.coin < @coin_rate * (@bet_point[0]+@bet_point[2] + num)
        if @bet_point[0] > 0
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::DECISION_SE))
        else
          # □ブザー SE を演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::BUZZER_SE))
        end
        @bet_point[0] = 0
        bet?(0,0)
        bet_select_colors?
        return
      end
      bet?(0,num)
    when 1 # Banker
      if @bet_point[0] > 0
        @bet_point[0] = 0
      elsif $game_party.coin < @coin_rate * (@bet_point[1]+@bet_point[2] + num)
        if @bet_point[1] > 0
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::DECISION_SE))
        else
          # □ブザー SE を演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::BUZZER_SE))
        end
        @bet_point[1] = 0
        bet?(1,0)
        bet_select_colors?
        return
      end
      bet?(1,num)
    when 2 # Tie
      if $game_party.coin < @coin_rate * (@bet_point[0]+@bet_point[1]+@bet_point[2] + num)
        if @bet_point[0] > 0 or @bet_point[1] > 0
          if @bet_point[2] > 0
            # □決定SEを演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::DECISION_SE))
          else
            # □ブザー SE を演奏
            $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::BUZZER_SE))
          end
        else
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::DECISION_SE))
        end
        @bet_point[2] = 0
        bet?(2,0)
        bet_select_colors?
        return
      end
      bet?(2,num)
    end
    
    bet_select_colors?
    # □決定SEを演奏
    $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::DECISION_SE))
    return
  end
  #--------------------------------------------------------------------------
  # ■ 当たりの処理
  #--------------------------------------------------------------------------
  def baccarat_hit
    hits = [false]*3
    gain = 0
    if @numbers[0] > @numbers[1]
      # □PLAYER
      if @bet_point[0] > 0
        hits[0] = true
        chain?(true)
        gain = @bet_point[0]*@coin_rate*2
        @payout = [gain - @bet_coin,0].max
      else
        # □ハズレ
        @payout = 0
        bet?(0,0) ; bet?(1,0) ; bet?(2,0)
        chain?(false)
      end
    elsif @numbers[0] < @numbers[1]
      # □BANKER
      if @bet_point[1] > 0
        hits[1] = true
        chain?(true)
        gain = @bet_point[1]*@coin_rate*1.95
        # □小数点切捨て
        gain = gain.floor
        @payout = [gain - @bet_coin,0].max
      else
        # □ハズレ
        @payout = 0
        bet?(0,0) ; bet?(1,0) ; bet?(2,0)
        chain?(false)
      end
    elsif @numbers[0] == @numbers[1]
      # □TIE
      if @bet_point[2] > 0
        hits[2] = true
        chain?(true)
        gain == (@bet_point[2]*@coin_rate*8)
        @payout = [gain - @bet_coin,0].max
      else
        # □払い戻し
        gain = @bet_coin
        @payout = @bet_coin
      end
    end
    @payout = gain
    
    @payout_coin_window.refresh(@payout)
    #…………………………………………………………………………………………………
    # ■ 所持コインを増やす
    #…………………………………………………………………………………………………
    $game_party.gain_coin(gain)
    time_up = 0
    if gain > 0 && gain != @bet_coin
      # □大当たりの場合
      if gain >= HIDE_BACCARAT::ME_RATE_MAX[$game_temp.baccarat_type]
        $game_system.me_play(RPG::AudioFile.new(HIDE_BACCARAT::HIT_ME_MAX))
        # □次のゲーム開始まで待つ(MEの演奏時間)
        time_up = HIDE_BACCARAT::ME_MAX_TIME
      else
        $game_system.me_play(RPG::AudioFile.new(HIDE_BACCARAT::HIT_ME))
        # □次のゲーム開始まで待つ(MEの演奏時間)
        time_up = HIDE_BACCARAT::ME_TIME
      end
    end
    # □当たりの出たレートを点滅
    @baccarat_window_under.bitmap.clear
    flash = RPG::Cache.windowskin(HIDE_BACCARAT::BACCARAT_HIT)
    # □Betの描画
    for i in 0...@bet_point.size
      if @bet_point[i] > 0 && hits[i] && gain != @bet_coin
        @baccarat_window_under.bitmap.blt(42+i*208,277,flash,Rect.new(0,0,132,80))
        # □連鎖をON
        @old_chain = true
      end
    end
    #…………………………………………………………………………………………………
    # ■ 所持コインがBETを下回った場合初期化
    #…………………………………………………………………………………………………
    if $game_party.coin < @bet_coin
      @bet_point = [0,0,0]
      @bet_coin = 0
      bet?(0,0) ; bet?(1,0) ; bet?(2,0)
    end
    #…………………………………………………………………………………………………
    # ■ 次の開始まで待つ
    #…………………………………………………………………………………………………
    time = 0
    @baccarat_window_under.blink_start
    while @baccarat_window_under.blink_active
      # □ゲーム画面を更新
      coin_update? ; Graphics.update
      # □回転数値の更新(所持コイン)
      @coin_window.update($game_party.coin)
      # □当りの演出を更新
      if time < time_up
        if @baccarat_window_under.count?
          time += 1
        end
        @baccarat_window_under.update
      else
        @baccarat_window_under.blink_end
      end
    end
    # □選択色を変更
    exchange_colors?
    @baccarat_step = 10
  end
  #--------------------------------------------------------------------------
  # ■ ゲームの終了
  #--------------------------------------------------------------------------
  def baccarat_end
    unless @playing
      # □バカラ開始前の BGM に戻す
      $game_system.bgm_play($game_temp.map_bgm)
      # マップ画面に切り替え
      $scene = Scene_Map.new
      return
    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数ウィンドウの更新
    @bets[0].refresh(@bet_point[0])
    @bets[1].refresh(@bet_point[1])
    @bets[2].refresh(@bet_point[2])
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新
  #--------------------------------------------------------------------------
  def update
    #…………………………………………………………………………………………………
    # ■ 更新
    #…………………………………………………………………………………………………
    coin_update?
    #…………………………………………………………………………………………………
    # ■ 当りの演出を更新
    #…………………………………………………………………………………………………
    @baccarat_window_under.update
    #…………………………………………………………………………………………………
    # ■ ゲーム開始ウィンドウの更新
    #…………………………………………………………………………………………………
    if @bet_select_window.active
      @bet_select_window.update
      update_bet_select
      return
    end
    #…………………………………………………………………………………………………
    # ■ ゲーム開始ウィンドウの更新
    #…………………………………………………………………………………………………
    if @game_select_window.active
      @game_select_window.update
      update_select
      return
    end
    #…………………………………………………………………………………………………
    # ■ ゲームの流れ
    #…………………………………………………………………………………………………
    case @baccarat_step
    when 1
      # □コインを減らす(賭け金)
      if $game_party.coin >= @bet_coin
        $game_party.lose_coin(@bet_coin)
        # □カード選択色を変更
        exchange_colors?
        @playing = true
        @baccarat_step = 2
        return
      else
        # □ブザー SE を演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_BACCARAT::BUZZER_SE))
        @baccarat_step = 0
        @playing = false
        return
      end
    when 2
      # □裏向きカードを表向きに変更
      @card_window.keys = {0=>true,1=>true,2=>false,3=>true,4=>true,5=>false}
      if @card_window.card_anim?
        @game_select_window.active = false
        @time = 12
        @baccarat_step = 3
        return
      end
    when 3
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      # □PLAYER/BANKERのスコアを計算(2枚)
      n = @card_window.numbers
      n0 = n[0] > 9 ? 0 : n[0]
      n1 = n[1] > 9 ? 0 : n[1]
      n3 = n[3] > 9 ? 0 : n[3]
      n4 = n[4] > 9 ? 0 : n[4]
      @numbers[0] = (n0+n1)%10
      @numbers[1] = (n3+n4)%10
      # □PLAYERのスコアを計算(2枚)
      case @numbers[0]
      when 8,9
        @player = @natural
      when 6,7
        @player = @stand
      end
      # □BANKERのスコアを計算(2枚)
      case @numbers[1]
      when 8,9
        @banker = @natural
      when 7
        @banker = @stand
      end
      # □ナンバーの描画
      draw_numbers?
      # □ナンバー名の描画
      draw_stand?
      # □Naturalの判定
      if @player == @natural or @banker == @natural
        if @player == ""
          @player = @stand
        end
        if @banker == ""
          @banker = @stand
        end
        # □ナンバーの描画
        draw_numbers?
        # □ナンバー名の描画
        draw_stand?
        @time = 12
        @card_window.count_zero?(0)
        @baccarat_step = 8
        return
      # □Standの判定
      elsif @player == @stand && (@banker == @stand or @numbers[1] == 6)
        @banker = @stand
        # □ナンバーの描画
        draw_numbers?
        # □ナンバー名の描画
        draw_stand?
        @time = 12
        @card_window.count_zero?(0)
        @baccarat_step = 8
        return
      else
        @time = 14
        @baccarat_step = 4
        return
      end
    when 4
      # □PLAYERの3枚目
      p3 = @card_window.numbers[2] > 9 ? 0 : @card_window.numbers[2]
      # □BANKERのスコアを計算(2枚)
      case @numbers[1]
      when 3
        case p3
        when 8
          @banker = @player == @stand ? "" : @stand
        end
      when 4
        case p3
        when 0,1,8,9
          @banker = @player == @stand ? "" : @stand
        end
      when 5
        case p3
        when 0,1,2,3,8,9
          @banker = @player == @stand ? "" : @stand
        end
      when 6
        case p3
        when 0,1,2,3,4,5,8,9
          @banker = @player == @stand ? @stand : ""
        end
      end
      if @banker == @stand
        # □ナンバーの描画
        draw_numbers?
        # □ナンバー名の描画
        draw_stand?
      end
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
        # □2枚目のカードを左に移動
        if @player == ""
          @card_window.play_card[1].viewport.rect.x -= 4
        end
        if @banker == ""
          @card_window.play_card[4].viewport.rect.x -= 4
        end
      end
      @time = 6
      @baccarat_step = 5
      return
    when 5
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      # □3枚目のカードの可視化
      if @player == ""
        @card_window.play_card[2].visible = true
      end
      if @banker == ""
        @card_window.play_card[5].visible = true
      end
      @card_window.count_zero?
      @time = 12
      @baccarat_step = 6
      return
    when 6
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      # □裏向きカードを表向きに変更
      @card_window.keys = {0=>false,1=>false,2=>@card_window.play_card[2].visible,
      3=>false,4=>false,5=>@card_window.play_card[5].visible}
      if @card_window.card_anim?
        @time = 12
        @baccarat_step = 7
      end
      return
    when 7
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      # □PLAYER/BANKERのスコアを計算(3枚)
      n = @card_window.numbers
      n0 = n[0] > 9 ? 0 : n[0]
      n1 = n[1] > 9 ? 0 : n[1]
      n2 = n[2] > 9 ? 0 : n[2]
      n3 = n[3] > 9 ? 0 : n[3]
      n4 = n[4] > 9 ? 0 : n[4]
      n5 = n[5] > 9 ? 0 : n[5]
      # □PLAYERのスコアを計算(3枚)
      if @player == ""
        @numbers[0] = (n0+n1+n2)%10
        @player = @stand
      end
      # □BANKERのスコアを計算(3枚)
      if @banker == ""
        @numbers[1] = (n3+n4+n5)%10
        @banker = @stand
      end
      # □ナンバーの描画
      draw_numbers?
      # □ナンバー名の描画
      draw_stand?
      @card_window.count_zero?(0)
      @time = 12
      @baccarat_step = 8
      return
    when 8
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      # □WIN/LOSEの描画
      draw_win?
      # □Max_Betの描画
      draw_max_bet?
      @baccarat_step = 9
      return
    when 9
      # □当たりの処理
      baccarat_hit
    when 10
      # □Max_Betの描画
      draw_max_bet?
      # □表向きカードを裏向きに変更
      @card_window.keys = {0=>true,1=>true,2=>true,3=>true,4=>true,5=>true}
      if @card_window.card_anim?(false)
        @time = 12
        @baccarat_step = 11
        return
      end
    when 11
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      # □3枚目のカードの不可視化
      if @card_window.play_card[2].visible
        @time = 14
      end
      if @card_window.play_card[5].visible
        @time = 14
      end
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
        # □2枚目のカードを右に移動
        if @card_window.play_card[2].visible
          @card_window.play_card[1].viewport.rect.x += 4
        end
        if @card_window.play_card[5].visible
          @card_window.play_card[4].viewport.rect.x += 4
        end
      end
      @baccarat_step = 12
      return
    when 12
      # □バカラの初期化
      baccarat_reset?
    end
  end
  #--------------------------------------------------------------------------
  # ■ バカラの初期化
  #--------------------------------------------------------------------------
  def baccarat_reset?
    @payout = 0
    if $game_party.coin < @coin_rate
      @bet_point = [0,0,0]
      @bet_coin = 0
      bet?(0,0)
    end
    # □BETの描画
    bet?(0,0) ; bet?(1,0) ; bet?(2,0)
    # □選択肢の文字色を初期化
    exchange_colors?
    # □3枚目のカードの不可視化
    @card_window.play_card[2].visible = false
    @card_window.play_card[5].visible = false
    # □初期化
    refresh
    # □WIN/LOSEの描画
    draw_win?(false)
    @card_window.count_zero?
    @card_window.card_clear
    @card_window.card_select?
    @baccarat_step = 0
    @playing = false
    @game_select_window.active = true
  end
end