#==============================================================================
# ■ Coin_Shop vol.2.00
#------------------------------------------------------------------------------
# ※『Window_digits_number 5.40以上』(必須)
# ※『Picture_Blink_Cursor 1.00以上』(必須)
# ※『Coin_Base 1.00以上』(必須)より下に挿入
# 11/12/03
#==============================================================================
module HIDE_C_SHOP
  #==============================================================================
  # ■ イベントコマンド『スクリプト』に以下を追加
  #------------------------------------------------------------------------------
  #   make_coin_shop(type,pattern)
  #------------------------------------------------------------------------------
  #   type=0 コイン交換(コインの購入) pattern=n 景品リスト
  #   type=1 景品交換(コインを払いアイテムに交換) pattern=n コイン交換レート
  #==============================================================================
  # ■ 音の設定 ※ファイル名を指定 ※Audioフォルダ内 #()のファイル名
  #==============================================================================
  S_BGM = "019-Field02"            # 景品交換所実行中のBGM(BGM)
  C_BGM = "019-Field02"            # コイン交換所実行中のBGM(BGM)
  #==============================================================================
  # ■ 景品交換パターンを設定(手動設定)
  #==============================================================================
  # ITEMS[n] = [ value, ... ](n = $game_temp.coin_shop_pattern から参照される)
  # ※valueを必ず8個指定する
  #--------------------------------------------------------------------------
  # "i(ID)"      …i=アイテム,ID=アイテムID
  # "w(ID)"      …w=武器,ID=武器ID
  # "a(ID)"      …a=防具,ID=防具ID
  #==============================================================================
  ITEMS = {}
  ITEMS[0] = ["i1","w5","a9","w13","w17","i21","w25","w29"]
  ITEMS[1] = ["w1","w5","w9","w13","w17","w21","w25","w29"]
  ITEMS[2] = ["w1","w5","w9","w13","w17","w21","w25","w29"]
  #--------------------------------------------------------------------------
  # ITEMS[n]の景品交換に必要なコイン数(n = $game_temp.coin_shop_pattern から参照される)
  # ※valueを必ず8個指定する
  #--------------------------------------------------------------------------
  RATE = []
  RATE[0] = [300,500,900,1500,3000,8000,12000,30000]
  RATE[1] = [300,500,900,1500,3000,8000,12000,30000]
  RATE[2] = [300,500,900,1500,3000,8000,12000,30000]
  #==============================================================================
  # ■ コイン購入パターンを設定(手動設定)
  #==============================================================================
  #--------------------------------------------------------------------------
  # コイン数1枚を購入できる金額(n = $game_temp.coin_shop_pattern から参照される)
  #--------------------------------------------------------------------------
  C_RATE = []
  C_RATE[0] = 20 # コイン1枚は20G
  C_RATE[1] = 10
  C_RATE[2] = 40
  #==============================================================================
  # ■ 文字設定
  #==============================================================================
  AN_COLOR = Color.new(255,255,255,255)    # 通常色
  BN_COLOR = Color.new(0,0,0,200)          # 影色(SHADOW/ROUND)
  AD_COLOR = Color.new(255,255,255,128)    # 無効色
  BD_COLOR = Color.new(0,0,0,200)          # 無効色(SHADOW/ROUND)
  AS_COLOR = Color.new(192,224,255,255)    # システム色
  BS_COLOR = Color.new(0,128,128,255)      # システム影色(SHADOW/ROUND)
  #--------------------------------------------------------------------------
  # ■ 数値表示の設定
  #--------------------------------------------------------------------------
  N_SIZE = 22                              # 文字サイズ
  N_BOLD = false                           # 太文字フラグ[true/false]
  N_ITALIC = false                         # 斜め文字フラグ[true/false]
  N_SHADOW = false                         # 影文字フラグ[true/false]
  N_ROUND = false                          # 囲み文字フラグ[true/false]
  N_NAME = ["ＭＳ Ｐゴシック"]             # フォント名
  #--------------------------------------------------------------------------
  # ■ 文字表示の設定
  #--------------------------------------------------------------------------
  W_SIZE = 22                              # 文字サイズ
  W_BOLD = false                           # 太文字フラグ[true/false]
  W_ITALIC = false                         # 斜め文字フラグ[true/false]
  W_SHADOW = false                         # 影文字フラグ[true/false]
  W_ROUND = false                          # 囲み文字フラグ[true/false]
  W_NAME = ["ＭＳ Ｐゴシック"]             # フォント名
  #==============================================================================
  # ■ メニュー文字設定
  #==============================================================================
  WORD1 = "景品リスト/交換に必要なコイン"
  WORD2 = "交換数"
  WORD3 = "所持数"
  WORD4 = "COIN"
  WORD5 = "PRICE"
  WORD6 = "RATE x"
  WORD7 = "コイン購入数"
  WORD8 = "合計金額"
  WORD9 = "所持金"
  WORD10 = "数値を入力します。"
  WORD11 = "コインを購入します。"
  WORD12 = "入力を取り消します。"
  KEY0 = ["0","=","C"]
  KEY1 = ["1","2","3"]
  KEY2 = ["4","5","6"]
  KEY3 = ["7","8","9"]  
  HELP = "→:1増やす ←:1減らす ↑:10増やす ↓:10減らす"
  #==============================================================================
  # ■ コイン購入グラフィック設定 ※Windowskinsフォルダ内のファイル名を指定
  #==============================================================================
  BACK = "coin_background"         # COIN購入の背景画像
  SELECT = "cursor_back"           # COIN購入のカーソル画像
  CURSOR = "cursor_anim"           # カーソルアイコン画像
  #==============================================================================
  
  
  #--------------------------------------------------------------------------
  # ■ 通常文字
  #--------------------------------------------------------------------------
  def normal_font?
    fonts = Copy_Font.new(HIDE_C_SHOP::W_SIZE,HIDE_C_SHOP::W_BOLD,
    HIDE_C_SHOP::W_ITALIC,HIDE_C_SHOP::W_SHADOW,HIDE_C_SHOP::W_ROUND,
    HIDE_C_SHOP::W_NAME,HIDE_C_SHOP::AN_COLOR,HIDE_C_SHOP::BN_COLOR)
    return fonts
  end
  #--------------------------------------------------------------------------
  # ■ 無効文字
  #--------------------------------------------------------------------------
  def disabled_font?
    fonts = Copy_Font.new(HIDE_C_SHOP::W_SIZE,HIDE_C_SHOP::W_BOLD,
    HIDE_C_SHOP::W_ITALIC,HIDE_C_SHOP::W_SHADOW,HIDE_C_SHOP::W_ROUND,
    HIDE_C_SHOP::W_NAME,HIDE_C_SHOP::AD_COLOR,HIDE_C_SHOP::BD_COLOR)
    return fonts
  end
  #--------------------------------------------------------------------------
  # ■ システム文字
  #--------------------------------------------------------------------------
  def system_font?
    fonts = Copy_Font.new(HIDE_C_SHOP::W_SIZE,HIDE_C_SHOP::W_BOLD,
    HIDE_C_SHOP::W_ITALIC,HIDE_C_SHOP::W_SHADOW,HIDE_C_SHOP::W_ROUND,
    HIDE_C_SHOP::W_NAME,HIDE_C_SHOP::AS_COLOR,HIDE_C_SHOP::BS_COLOR)
    return fonts
  end
  #--------------------------------------------------------------------------
  # ■ 数値文字
  #--------------------------------------------------------------------------
  def number_font?
    fonts = Copy_Font.new(HIDE_C_SHOP::N_SIZE,HIDE_C_SHOP::N_BOLD,
    HIDE_C_SHOP::N_ITALIC,HIDE_C_SHOP::N_SHADOW,HIDE_C_SHOP::N_ROUND,
    HIDE_C_SHOP::N_NAME,HIDE_C_SHOP::AN_COLOR,HIDE_C_SHOP::BN_COLOR)
    return fonts
  end
  #--------------------------------------------------------------------------
  # ■ 数値文字
  #--------------------------------------------------------------------------
  def d_number_font?
    fonts = Copy_Font.new(HIDE_C_SHOP::N_SIZE,HIDE_C_SHOP::N_BOLD,
    HIDE_C_SHOP::N_ITALIC,HIDE_C_SHOP::N_SHADOW,HIDE_C_SHOP::N_ROUND,
    HIDE_C_SHOP::N_NAME,HIDE_C_SHOP::AD_COLOR,HIDE_C_SHOP::BD_COLOR)
    return fonts
  end
  #--------------------------------------------------------------------------
  # ■ 景品リストを取得
  #--------------------------------------------------------------------------
  def item_list?(n)
    items = []
    for i in HIDE_C_SHOP::ITEMS[n]
      i.scan(/([iwa])([0-9]+)/)
      type = $1 ; id = $2.to_i
      case type
      when "i"
        items.push($data_items[id])
      when "w"
        items.push($data_weapons[id])
      when "a"
        items.push($data_armors[id])
      else
        items.push(nil)
      end
    end
    return items
  end
  #--------------------------------------------------------------------------
  # ■ 交換に必要なコイン数を取得
  #--------------------------------------------------------------------------
  def coin_list?(n)
    return HIDE_C_SHOP::RATE[n]
  end
end
#==============================================================================
# ■ Window_coin_item_help
#==============================================================================
class Window_coin_item_help < Window_Base
  include HIDE_C_SHOP
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0,64,640,64)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # ■ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.draw_cache_text(4+28,0,320,32,HIDE_C_SHOP::WORD1,0,system_font?)
    self.contents.draw_cache_text(4+384,0,320,32,HIDE_C_SHOP::WORD2,0,system_font?)
    self.contents.draw_cache_text(4+384+128,0,320,32,HIDE_C_SHOP::WORD3,0,system_font?)
  end
end
#==============================================================================
# ■ Window_Have_Coin
#==============================================================================
class Window_Have_Coin < Window_Base
  include HIDE_C_SHOP
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(320,288+128,320,64)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # ■ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.draw_cache_text(4,0,120,32,HIDE_C_SHOP::WORD4,0,system_font?)
  end
end
#==============================================================================
# ■ Window_price
#==============================================================================
class Window_price < Window_Base
  include HIDE_C_SHOP
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(n = 0)
    super(0,288+128,320,64)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh(n)
  end
  #--------------------------------------------------------------------------
  # ■ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(n)
    self.contents.clear
    self.contents.draw_cache_text(4,0,120,32,HIDE_C_SHOP::WORD5,0,system_font?)
    self.contents.draw_cache_text(160+4+4,0,120,32,n.to_s,2,normal_font?)
  end
end
#==============================================================================
# ■ Window_Coin_Number
#==============================================================================
class Window_Coin_Number < Window_Base
  include HIDE_C_SHOP
  
  attr_reader   :help_window              # ヘルプウィンドウ
  #--------------------------------------------------------------------------
  # ■ ヘルプウィンドウの設定
  #--------------------------------------------------------------------------
  def help_window=(help_window)
    @help_window = help_window
    # ヘルプテキストを更新
    if self.active && @help_window != nil
      update_help
    end
  end
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(368,128,136,288)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.active = false
    @item = nil
    @max = 1
    @number = 1
  end
  #--------------------------------------------------------------------------
  # ■ アイテム、最大個数
  #--------------------------------------------------------------------------
  def set(item,max,price,index)
    @item = item
    @max = max
    @number = 1
    @price = price
    @index = index
    refresh
  end
  #--------------------------------------------------------------------------
  # ■ 入力された個数の設定
  #--------------------------------------------------------------------------
  def number
    return @number
  end
  #--------------------------------------------------------------------------
  # ■ 消去
  #--------------------------------------------------------------------------
  def clear
    self.cursor_rect.set(0,0,0,0)
    self.contents.clear
  end
  #--------------------------------------------------------------------------
  # ■ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.cursor_rect.set(32,@index*32, 32, 32)
    self.contents.clear
    self.contents.draw_cache_text(4,@index*32,24,32,"×",0,normal_font?)
    self.contents.draw_cache_text(36,@index*32,24,32,@number.to_s,2,number_font?)
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    if self.active
      # カーソル右 (+1)
      if Input.repeat?(Input::RIGHT) and @number < @max
        $game_system.se_play($data_system.cursor_se)
        @number += 1
        refresh
      end
      # カーソル左 (-1)
      if Input.repeat?(Input::LEFT) and @number > 1
        $game_system.se_play($data_system.cursor_se)
        @number -= 1
        refresh
      end
      # カーソル上 (+10)
      if Input.repeat?(Input::UP) and @number < @max
        $game_system.se_play($data_system.cursor_se)
        @number = [@number + 10, @max].min
        refresh
      end
      # カーソル下 (-10)
      if Input.repeat?(Input::DOWN) and @number > 1
        $game_system.se_play($data_system.cursor_se)
        @number = [@number - 10, 1].max
        refresh
      end
      # ヘルプテキストを更新 (update_help は継承先で定義される)
      if self.active && @help_window != nil
        update_help
      end
    end
  end
  #--------------------------------------------------------------------------
  # ■ ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(HIDE_C_SHOP::HELP)
  end
end
#==============================================================================
# ■ Window_coin_Item
#==============================================================================
class Window_coin_Item < Window_Selectable
  include HIDE_C_SHOP
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(n)
    super(0,128,368,288)
    @n = n
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ■ アイテムの取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ■ 必要なコイン数の取得
  #--------------------------------------------------------------------------
  def price
    return coin_list?(@n)[self.index].to_i
  end
  #--------------------------------------------------------------------------
  # ■ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = item_list?(@n)
    # 項目数が 0 でなければビットマップを作成し、全項目を描画
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ■ 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if coin_list?(@n)[index] > $game_party.coin or number >= 99
      font = disabled_font?
      font2 = d_number_font?
      opacity = 128
    else
      font = normal_font?
      font2 = number_font?
      opacity = 255
    end
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_cache_text(x + 28, y, 212, 32, item.name, 0,font)
    self.contents.draw_cache_text(x + 240, y,88, 32,coin_list?(@n)[index].to_s, 2,font2)
  end
  #--------------------------------------------------------------------------
  # ■ ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end
#==============================================================================
# ■ Window_coin_Item_number
#==============================================================================
class Window_coin_Item_number < Window_Selectable
  include HIDE_C_SHOP
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(n)
    super(368+136,128,136,288)
    @n = n
    refresh
    self.index = -1
  end
  #--------------------------------------------------------------------------
  # ■ アイテムの取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ■ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = item_list?(@n)
    # 項目数が 0 でなければビットマップを作成し、全項目を描画
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ■ 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    x = 64
    y = index * 32
    self.contents.draw_cache_text(x,y,24,32,number.to_s,2,number_font?)
  end
end
#==============================================================================
# ■ Scene_Coin_shop
#==============================================================================
class Scene_Coin_shop
  include HIDE_C_SHOP
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    # □マップ BGM を記憶し、BGM を停止
    $game_temp.map_bgm = $game_system.playing_bgm
    $game_system.bgm_stop
    # □アイテム交換 BGM を演奏
    $game_system.bgm_play(RPG::AudioFile.new(HIDE_C_SHOP::S_BGM))
  end
  #--------------------------------------------------------------------------
  # ■ メイン処理
  #--------------------------------------------------------------------------
  def main
    # □ヘルプウィンドウを作成
    @help_window = Window_Help.new
    # □所持コインウィンドウを作成
    @have_coin = Window_Have_Coin.new
    @coin_item_help = Window_coin_item_help.new
    # □交換個数ウィンドウを作成
    @buy_number = Window_Coin_Number.new
    @buy_number.help_window = @help_window
    # □コイン数値ウィンドウを作成
    @coin_window = Window_digits_number.new(488,416,100,$game_party.coin,10,10,number_font?)
    # □景品リストウィンドウを作成
    @item_list = Window_coin_Item.new($game_temp.coin_shop_pattern)
    @item_list.help_window = @help_window
    # □所持数ウィンドウを作成
    @item_number = Window_coin_Item_number.new($game_temp.coin_shop_pattern)
    # □交換コイン合計ウィンドウを作成
    @price_coin = Window_price.new
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @help_window.dispose
    @coin_window.dispose
    @item_list.dispose
    @item_number.dispose
    @buy_number.dispose
    @price_coin.dispose
    @have_coin.dispose
    @coin_item_help.dispose
  end
  #--------------------------------------------------------------------------
  # ■ 終了
  #--------------------------------------------------------------------------
  def coin_shop_end
    unless @playing
      # □アイテム交換開始前の BGM に戻す
      $game_system.bgm_play($game_temp.map_bgm)
      # □マップ画面に切り替え
      $scene = Scene_Map.new
      return
    end
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新
  #--------------------------------------------------------------------------
  def update
    #…………………………………………………………………………………………………
    # ■ 回転数値の更新(所持コイン)
    #…………………………………………………………………………………………………
    @coin_window.update($game_party.coin)
    @item_list.update
    @buy_number.update
    # □フレーム更新
    if @buy_number.active
      update_buy
      return
    end
    if @item_list.active
      update_item
      return
    end
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新 (アイテムウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_item
    #…………………………………………………………………………………………………
    # ■ B ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::B)
      # □キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      coin_shop_end
      return
    end
    #…………………………………………………………………………………………………
    # ■ C ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::C)
      # □現在選択されているデータを取得
      @item = @item_list.item
      @price = @item_list.price
      case @item
      when RPG::Item
        number = $game_party.item_number(@item.id)
      when RPG::Weapon
        number = $game_party.weapon_number(@item.id)
      when RPG::Armor
        number = $game_party.armor_number(@item.id)
      end
      # □景品を交換できない条件
      if @price > $game_party.coin or number >= 99
        # □ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # □決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # □交換最大数を取得
      @max = 99 - number
      if @max * @price > $game_party.coin
        @max = $game_party.coin / @price
      end
      # □更新
      @buy_number.set(@item,@max,@price,@item_list.index)
      @buy_number.active = true
      @buy_number.visible = true
      @item_list.active = false
    end
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新 (個数入力ウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_buy
    @new_coin = @buy_number.number * @item_list.price
    #…………………………………………………………………………………………………
    # ■ 合計コインの更新
    #…………………………………………………………………………………………………
    if @old_coin != @new_coin
      @price_coin.refresh(@new_coin)
      @old_coin = @new_coin
    end
    #…………………………………………………………………………………………………
    # ■ B ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::B)
      # □キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      @buy_number.active = false
      @buy_number.clear
      @price_coin.refresh(0)
      @old_coin = 0
      @item_list.active = true
      return
    end
    #…………………………………………………………………………………………………
    # ■ C ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::C)
      # □決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # □景品を増やす
      case @item
      when RPG::Item
        $game_party.gain_item(@item.id,@buy_number.number)
      when RPG::Weapon
        $game_party.gain_weapon(@item.id,@buy_number.number)
      when RPG::Armor
        $game_party.gain_armor(@item.id,@buy_number.number)
      end
      # □コインを減らす
      $game_party.lose_coin(@new_coin)
      # □更新
      @item_number.refresh
      @item_list.refresh
      @buy_number.active = false
      @buy_number.clear
      @price_coin.refresh(0)
      @old_coin = 0
      @item_list.active = true
      return
    end
  end
  #--------------------------------------------------------------------------
  # ■ 終了
  #--------------------------------------------------------------------------
  def Coin_shop_end
    unless @playing
      # □アイテム交換開始前の BGM に戻す
      $game_system.bgm_play($game_temp.map_bgm)
      # □マップ画面に切り替え
      $scene = Scene_Map.new
      return
    end
  end
end
#==============================================================================
# ■ Scene_Coin_Chenge
#==============================================================================
class Scene_Coin_Chenge
  include HIDE_C_SHOP
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    # □マップ BGM を記憶し、BGM を停止
    $game_temp.map_bgm = $game_system.playing_bgm
    $game_system.bgm_stop
    # □アイテム交換 BGM を演奏
    $game_system.bgm_play(RPG::AudioFile.new(HIDE_C_SHOP::C_BGM))
  end
  #--------------------------------------------------------------------------
  # ■ メイン処理
  #--------------------------------------------------------------------------
  def main
    # ヘルプウィンドウを作成
    @help_window = Window_Help.new
    @help_window.opacity = 0
    @help_window.windowskin = Bitmap.new(1,1)
    # □背景を作成
    @coin_chenge_back = Picture_Blink_Cursor.new(RPG::Cache.windowskin(HIDE_C_SHOP::BACK))
    @rate = HIDE_C_SHOP::C_RATE[$game_temp.coin_shop_pattern]
    g = $data_system.words.gold
    @coin_chenge_back.draw_text(20+4,32*2,160,32,HIDE_C_SHOP::WORD7,0,system_font?)
    # □補助線を描画
    line = Rect.new(16+8,32*3,348,1)
    line2 = Rect.new(16+8,32*5,348,1)
    line3 = Rect.new(16+8,32*14+16,348,1)
    line4 = Rect.new(16+4+32*12,32*12+16,196,1)
    line5 = Rect.new(16+4+32*12,32*14+16,196,1)
    @coin_chenge_back.bitmap.fill_rect(line,HIDE_C_SHOP::AS_COLOR)
    @coin_chenge_back.bitmap.fill_rect(line2,HIDE_C_SHOP::AS_COLOR)
    @coin_chenge_back.bitmap.fill_rect(line3,HIDE_C_SHOP::AS_COLOR)
    @coin_chenge_back.bitmap.fill_rect(line4,HIDE_C_SHOP::AS_COLOR)
    @coin_chenge_back.bitmap.fill_rect(line5,HIDE_C_SHOP::AS_COLOR)
    # □文字を描画
    @coin_chenge_back.draw_text(20+4,32*4,160,32,"#{HIDE_C_SHOP::WORD8}(#{g})",0,system_font?)
    @coin_chenge_back.draw_text(20+4,480-32-16,160,32,HIDE_C_SHOP::WORD9,0,system_font?)
    @coin_chenge_back.draw_text(400+4,480-32-16,360,32,HIDE_C_SHOP::WORD4,0,system_font?)
    @coin_chenge_back.draw_text(400+4,480-32-16-64,0,32,HIDE_C_SHOP::WORD6,0,system_font?)
    
    cw = number_font?.text_width(@rate.to_s)
    @coin_chenge_back.draw_text(640-52-cw,480-32-16-64,0,32,@rate.to_s,2,number_font?)
    @coin_chenge_back.draw_text(360,480-32-16,160,32,g,0,system_font?)
    @key = 1
    @buy_coins = []
    @buy_coin = 0 ; @buy_gold = 0

    # □所持コインウィンドウを作成
    @coin_window = Window_digits_number.new(468,415,100,$game_party.coin,10,10,number_font?)
    # □所持金ウィンドウを作成
    @gold_window = Window_digits_number.new(220+16,415,100,$game_party.gold,10,10,number_font?)
    # □購入コインウィンドウを作成
    @buy_coin_window = Window_digits_number.new(220+16,16+32,100,@buy_coin,10,10,number_font?)
    # □購入金額ウィンドウを作成
    @buy_gold_window = Window_digits_number.new(220+16,16+32*3,100,@buy_gold,10,10,number_font?)
    
    # □ゲーム開始選択ウィンドウを作成
    com0 = HIDE_C_SHOP::KEY0
    com1 = HIDE_C_SHOP::KEY1
    com2 = HIDE_C_SHOP::KEY2
    com3 = HIDE_C_SHOP::KEY3
    
    l0 = [HIDE_C_SHOP::WORD10,HIDE_C_SHOP::WORD11,HIDE_C_SHOP::WORD12]
    l1 = [HIDE_C_SHOP::WORD10]*3
    l2 = [HIDE_C_SHOP::WORD10]*3
    l3 = [HIDE_C_SHOP::WORD10]*3
    
    pic = RPG::Cache.windowskin(HIDE_C_SHOP::SELECT)
    icon = RPG::Cache.windowskin(HIDE_C_SHOP::CURSOR)
    font = number_font?
    font2 = number_font?
    @game_select_window = []
    @game_select_window[0] = Picture_Blink_Cursor.new(16,336+16,96,32,16,0,3,3,true)
    @game_select_window[0].visible = true
    @game_select_window[0].draw_cursor(pic,com0,font2,icon)
    @game_select_window[1] = Picture_Blink_Cursor.new(16,288+16,96,32,16,0,3,3,true)
    @game_select_window[1].visible = true
    @game_select_window[1].draw_cursor(pic,com1,font2,icon)
    @game_select_window[1].start
    @game_select_window[2] = Picture_Blink_Cursor.new(16,240+16,96,32,16,0,3,3,true)
    @game_select_window[2].visible = true
    @game_select_window[2].draw_cursor(pic,com2,font2,icon)
    @game_select_window[3] = Picture_Blink_Cursor.new(16,192+16,96,32,16,0,3,3,true)
    @game_select_window[3].visible = true
    @game_select_window[3].draw_cursor(pic,com3,font2,icon)
    
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @coin_chenge_back.dispose
    @help_window.dispose
    @coin_window.dispose
    @gold_window.dispose
    @buy_coin_window.dispose
    @buy_gold_window.dispose
    @game_select_window.each{|a| a.dispose }
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新
  #--------------------------------------------------------------------------
  def update
    #…………………………………………………………………………………………………
    # ■ 回転数値の更新(所持コイン)
    #…………………………………………………………………………………………………
    @coin_window.update($game_party.coin)
    @gold_window.update($game_party.gold)
    
    @buy_coin_window.refresh(@buy_coin)
    @buy_gold_window.refresh(@buy_gold)
    
    if @game_select_window[0].active
      @key = 0
      @game_select_window[0].update
    end
    if @game_select_window[1].active
      @key = 1
      @game_select_window[1].update
    end
    if @game_select_window[2].active
      @key = 2
      @game_select_window[2].update
    end
    if @game_select_window[3].active
      @key = 3
      @game_select_window[3].update
    end
    #…………………………………………………………………………………………………
    # ■ 上 ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.repeat?(Input::UP)
      if @game_select_window[1].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[1].active = false
        @game_select_window[2].active = true
        @game_select_window[2].index = @game_select_window[1].index
        @game_select_window[1].index = -1
        return
      end
      if @game_select_window[2].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[2].active = false
        @game_select_window[3].active = true
        @game_select_window[3].index = @game_select_window[2].index
        @game_select_window[2].index = -1
        return
      end
      if @game_select_window[3].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[3].active = false
        @game_select_window[0].active = true
        @game_select_window[0].index = @game_select_window[3].index
        @game_select_window[3].index = -1
        return
      end
      if @game_select_window[0].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[0].active = false
        @game_select_window[1].active = true
        @game_select_window[1].index = @game_select_window[0].index
        @game_select_window[0].index = -1
        return
      end
    end
    #…………………………………………………………………………………………………
    # ■ 下 ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.repeat?(Input::DOWN)
      if @game_select_window[1].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[1].active = false
        @game_select_window[0].active = true
        @game_select_window[0].index = @game_select_window[1].index
        @game_select_window[1].index = -1
        return
      end
      if @game_select_window[2].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[2].active = false
        @game_select_window[1].active = true
        @game_select_window[1].index = @game_select_window[2].index
        @game_select_window[2].index = -1
        return
      end
      if @game_select_window[3].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[3].active = false
        @game_select_window[2].active = true
        @game_select_window[2].index = @game_select_window[3].index
        @game_select_window[3].index = -1
        return
      end
      if @game_select_window[0].active
        $game_system.se_play($data_system.cursor_se)
        @game_select_window[0].active = false
        @game_select_window[3].active = true
        @game_select_window[3].index = @game_select_window[0].index
        @game_select_window[0].index = -1
        return
      end
    end
    # □フレーム更新
    if @game_select_window[@key].active
      update_key
      return
    end
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新
  #--------------------------------------------------------------------------
  def update_key
    #…………………………………………………………………………………………………
    # ■ B ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.repeat?(Input::B)
      # □キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # □アイテム交換開始前の BGM に戻す
      $game_system.bgm_play($game_temp.map_bgm)
      # □マップ画面に切り替え
      $scene = Scene_Map.new
      return
    end
    #…………………………………………………………………………………………………
    # ■ C ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::C)
      case @key
      when 0
        case @game_select_window[@key].index
        when 0
          if @buy_coins == [] or @buy_coins.size >= 10
            # □ブザー SE を演奏
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          @buy_coins.unshift(0)
        when 1
          if @buy_coin == 0
            # □ブザー SE を演奏
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          # 決定 SE を演奏
          $game_system.se_play($data_system.decision_se)
          # □購入
          $game_party.lose_gold(@buy_gold)
          $game_party.gain_coin(@buy_coin)
          # □入力解除
          @buy_coins = []
          @buy_coin = 0 ; @buy_gold = 0
          return
        when 2
          if @buy_coin == 0
            # □ブザー SE を演奏
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          # 決定 SE を演奏
          $game_system.se_play($data_system.decision_se)
          # □入力解除
          @buy_coins = []
          @buy_coin = 0 ; @buy_gold = 0
          return
        end
      when 1
        if @buy_coins.size >= 10
          # □ブザー SE を演奏
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @buy_coins.unshift(1+@game_select_window[@key].index)
      when 2
        if @buy_coins.size >= 10
          # □ブザー SE を演奏
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @buy_coins.unshift(4+@game_select_window[@key].index)
      when 3
        if @buy_coins.size >= 10
          # □ブザー SE を演奏
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @buy_coins.unshift(7+@game_select_window[@key].index)
      end
      # □入力値をコイン数に変換
      if @buy_coins != []
        buy_coin = @buy_coins[0]
        for i in 1...@buy_coins.size
          b = 10**i
          buy_coin += b * @buy_coins[i]
        end
      else
        return
      end
      # □合計金額を計算
      buy_gold = @rate * buy_coin
      # □合計金額の桁数を取得
      ds = buy_gold.abs > 0 ? [[(Math.log10(buy_gold.abs).to_i) + 1, 1].max,10].min : 1
      # □金額7桁数以上はエラー/所持金不足/所持コインMax
      if ds > 7 or $game_party.gold < buy_gold or ($game_party.coin + buy_coin) >  9999999999
        # □ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        @buy_coins.delete_at(0)
        return
      end
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      @buy_coin = buy_coin
      @buy_gold = buy_gold
      return
    end
  end
end
