#==============================================================================
# ■ Bingo vol.3.00
#------------------------------------------------------------------------------
# ※『Window_digits_number 5.90以上』(必須)
# ※『Picture_Blink_Cursor 1.60以上』(必須)
# ※『Coin_Base 5.00以上』(必須)より下に挿入
# 12/04/22
#==============================================================================
module HIDE_BINGO
  #==============================================================================
  # ■ デバッグ(開発者用)
  #==============================================================================
  DEBUG = false                    # [true/false]
  #==============================================================================
  # ■ イベントコマンド『スクリプト』に以下を追加
  #------------------------------------------------------------------------------
  #   make_bingo(type)
  #------------------------------------------------------------------------------
  #   type=ビンゴタイプの設定を参照
  #==============================================================================
  # ■ グラフィック設定 ※Windowskinsフォルダ内のファイル名を指定
  #==============================================================================
  BACK = "coin_background1"        # ビンゴの背景画像
  TOP = "bingo_background"         # ビンゴの背景画像
  CARD = "bingo_card"              # ビンゴカード画像
  CARD2 = "bingo_card2"            # プレイヤー用ビンゴカード画像
  NUMBER = "number_image3"         # ビンゴカード数値画像
  DIGITAL = "digital_number"       # デジタル数値画像
  BINGO_HIT = "flash_yellow"       # 当たりの画像(当たり効果)
  SELECT = "cursor_back"           # メニューカーソル画像
  CURSOR = "cursor_anim"           # カーソルアイコン画像
  #==============================================================================
  # ■ 選択肢とヘルプの設定
  #==============================================================================
  GAME_COMS = ["Start", "End"]
  GAME_HELPS = ["ゲームを開始します。", "ゲームを終了します。"]
  #==============================================================================
  # ■ 音の設定 ※ファイル名を指定 ※Audioフォルダ内 #()のファイル名
  #==============================================================================
  BGM = "019-Field02"              # ビンゴ実行中のBGM(BGM)
  BALL_SE = ""                     # ビンゴルーレットの回る効果音(SE) ※動作が重い ""で無効
  DECISION_SE = "002-System02"     # 決定キーの効果音(SE)
  CANCEL_SE = "003-System03"       # キャンセルキーの効果音(SE)
  #--------------------------------------------------------------------------
  HIT_SE = "046-Book01"            # Hitの効果音(SE)
  BUZZER_SE = "004-System04"       # ブザー音の効果音(SE)
  HIT_ME_MAX = "009-Fanfare03"     # 大当りの効果音(ME)
  HIT_ME = "007-Fanfare01"         # 当りの効果音(ME)
  NO_ITEM_ME = "016-Shock01"       # 景品無しの効果音(ME)
  #--------------------------------------------------------------------------
  ME_MAX_TIME = 12                 # 大当りの待ち時間(HIT_ME_MAXの演奏時間(秒))
  ME_TIME = 4                      # 当りの待ち時間(HIT_MEの演奏時間(秒))
  NO_ITEM_ME_TIME = 4              # 景品無しの効果音(NO_ITEM_MEの演奏時間(秒))
  #==============================================================================
  # ■ アイコン設定 ※Iconsフォルダ内のファイル名を指定
  #==============================================================================
  COIN_ICON = "icon_coin"          # コインのアイコン
  GOLD_ICON = "icon_gold"          # お金のアイコン
  #==============================================================================
  # ■ ゲーム速度
  #==============================================================================
  SPEED = 6          # ゲーム速度(大=遅い)
  WAIT = 60          # NPCカードHit速度の基本値(大=遅い)
  CHANCE = 3         # Missできる回数(0〜99)
  #==============================================================================
  # ■ ビンゴタイプの設定
  # COIN[n] = value　※n=タイプ番号($game_temp.bingo_type から参照される)
  #==============================================================================
  COIN = [] # value=消費コイン
  COIN[0] = 500 # 1ゲーム500
  COIN[1] = 50
  COIN[2] = 5
  #--------------------------------------------------------------------------
  # ME_RATE_MAX[n] = value
  # n=タイプ番号($game_temp.bingo_type から参照される)
  # value=大当りの効果音(HIT_ME_MAX)を演奏する順位(value等以上)
  #--------------------------------------------------------------------------
  ME_RATE_MAX = []
  ME_RATE_MAX[0] = 3 # 3等以上は大当たり
  ME_RATE_MAX[1] = 3
  ME_RATE_MAX[2] = 3
  #--------------------------------------------------------------------------
  # LUCK[n] = value
  # n=タイプ番号($game_temp.bingo_type から参照される)
  # ※ビンゴ確率 n回に1回の確率でプレイヤーナンバーを選択
  #--------------------------------------------------------------------------
  LUCK = [] # value=プレイヤーの優位度(小=優位) 0=通常確率
  LUCK[0] = 4
  LUCK[1] = 10
  LUCK[2] = 0
  #==============================================================================
  # ■ 景品パターンを設定(手動設定)
  # ITEMS[n] = [ value, ... ]
  #==============================================================================
  # ※valueを必ず1個〜11個指定する(左から1等,2等...)
  # ※11等は参加賞？
  
  # ※同じvalueを複数指定しない[w1,w1...]など
  # ※同じアイコンIDを使用するvalueを複数指定しない[w1,w2...]など
  #--------------------------------------------------------------------------
  # "i(ID)"      …i=アイテム,ID=アイテムID
  # "w(ID)"      …w=武器,ID=武器ID
  # "a(ID)"      …a=防具,ID=防具ID
  # "g(num)"     …g=お金,num=金額
  # "c(num)"     …c=コイン,num=枚数
  #==============================================================================
  ITEMS = []
  ITEMS[0] = ["w1","i5","c1000","g2500","a1","i1","g100","i9","i2"]
  ITEMS[1] = ["w1","i5","c1000","g2500","a1","i1","g100","i9","i2"]
  ITEMS[2] = ["w1","i5","c1000","g2500","a1","i1","g100","i9","i2"]
  #==============================================================================
  # ■ 景品リストを設定(手動設定)
  # ※指定した景品からランダムに決定される
  #==============================================================================
  # LIST[n] = [ value, ... ]
  # n=パターン番号($game_temp.bingo_type から参照される)
  # value= ITEMS[n]のn番号を指定
  #==============================================================================
  LIST= []
  LIST[0]= [0,1,2]
  LIST[1]= [0,0,0,0,1,1,2]
  LIST[2]= [0,0,1,1,2]
  #==============================================================================
  # ■ 文字色設定
  #==============================================================================
  A_COLOR = Color.new(255,255,255,255)     # 通常色
  B_COLOR = Color.new(0,0,0,255)           # 影色
  S_COLOR = Color.new(255,255,0,255)       # システム色
  F_COLOR = Color.new(80,80,80,255)        # カーソル点滅色
  #==============================================================================
  # ■ メニュー文字設定
  #==============================================================================
  WORD1 = "Coin"
  WORD2 = "リーチ！"
  WORD3 = "ビンゴ！"
  WORD4 = "枚"
  WORD5 = "等"
  #--------------------------------------------------------------------------
  # 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","ＭＳ ゴシック"]       # フォント名
  #--------------------------------------------------------------------------
  # 選択肢 の文字設定
  #--------------------------------------------------------------------------
  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","ＭＳ ゴシック"]     # フォント名
  #--------------------------------------------------------------------------
  # システム の文字設定
  #--------------------------------------------------------------------------
  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)
  
  #==============================================================================
end
#==============================================================================
# ■ Scene_Bingo
#==============================================================================
class Scene_Bingo
  include HIDE_BINGO
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  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_BINGO::BGM))
  end
  #--------------------------------------------------------------------------
  # ■ メイン処理
  #--------------------------------------------------------------------------
  def main
    @playing = false ; @re_playing = false ; @re_start = false
    @coin = HIDE_BINGO::COIN[$game_temp.bingo_type]
    @luck = HIDE_BINGO::LUCK[$game_temp.bingo_type]
    #…………………………………………………………………………………………………
    # ■文字装飾を取得
    #…………………………………………………………………………………………………
    s_font = HIDE_BINGO::S_FONT ; h_font = HIDE_BINGO::H_FONT ; m_font = Copy_Font.new(16,true)
    c_font = HIDE_BINGO::C_FONT ; b_font = HIDE_BINGO::T_FONT
    m_font.name = "Arial"
    #…………………………………………………………………………………………………
    # ■ビンゴウィンドウ背景を作成
    #…………………………………………………………………………………………………
    @bingo_window_back = Picture_Blink_Cursor.new(RPG::Cache.windowskin(HIDE_BINGO::BACK))
    @bingo_window_back.draw_picture(RPG::Cache.windowskin(HIDE_BINGO::TOP))
    #…………………………………………………………………………………………………
    # ■ゲーム開始選択ウィンドウを作成
    #…………………………………………………………………………………………………
    pic = RPG::Cache.windowskin(HIDE_BINGO::SELECT)
    icon = RPG::Cache.windowskin(HIDE_BINGO::CURSOR)
    com = HIDE_BINGO::GAME_COMS
    helps = HIDE_BINGO::GAME_HELPS
    @game_select_window = Picture_Blink_Cursor.new(16,430+16,96,32,16,0,2,2)
    @game_select_window.z = 100+5
    @game_select_window.key = 0
    @game_select_window.draw_cursor(pic,nil,nil,icon)
    @game_select_window.start(100+5)
    @game_select_window.draw_item(com,s_font)
    # □ヘルプウィンドウの関連付け
    @game_select_window.make_helps(250+16,430+16,helps,h_font)
    #…………………………………………………………………………………………………
    # ■文字を描画
    #…………………………………………………………………………………………………
    wold = HIDE_BINGO::WORD1 + " x " + @coin.to_s
    @bingo_window_back.bitmap.draw_cache_text(300,396,320,32,wold,2,b_font)
    w_font = m_font.dup
    text = (HIDE_BINGO::CHANCE).to_s
    @bingo_window_back.bitmap.draw_cache_text(604,430,0,0,"/",2,w_font)
    cw = w_font.text_width("/")
    @bingo_window_back.bitmap.draw_cache_text(604+cw+4,430,0,0,text,2,w_font)
    #…………………………………………………………………………………………………
    # ■ナンバー選択ウィンドウを作成
    #…………………………………………………………………………………………………
    @bingo_table_window = Picture_Blink_Cursor.new(458+10,213+2,26,30,3,2,25,5)
    @bingo_table_window.draw_color_cursor(HIDE_BINGO::F_COLOR)
    @bingo_table_window.z = 100+2
    @bingo_table_window.cursor_x = 24
    @bingo_table_window.draw_icon_cursor(icon,100+5)
    # □ヘルプウィンドウの関連付け
    @bingo_table_window.make_helps(250+16,430+16,[""]*25,h_font)
    #…………………………………………………………………………………………………
    # ■ビンゴカードを作成
    #…………………………………………………………………………………………………
    @bingo_card = Window_Bingo.new
    #…………………………………………………………………………………………………
    # ■当り演出ウィンドウを作成
    #…………………………………………………………………………………………………
    @bingo_hit_window = Picture_Blink_Cursor.new
    @bingo_hit_window.start(100 + 2)
    #…………………………………………………………………………………………………
    # ■景品を作成
    #…………………………………………………………………………………………………
    @bingo_item = Window_Bingo_Item.new
    @bingo_item.visible = false
    #…………………………………………………………………………………………………
    # ■モニター数値ウィンドウを作成
    #…………………………………………………………………………………………………
    @digital_window = Picture_Blink_Cursor.new
    @digital_window.start
    #…………………………………………………………………………………………………
    # ■初期化
    #…………………………………………………………………………………………………
    bingo_reset?
    #…………………………………………………………………………………………………
    # ■選択肢の文字色を初期化
    #…………………………………………………………………………………………………
    exchange_colors?
    #…………………………………………………………………………………………………
    # ■コイン数値ウィンドウを作成
    #…………………………………………………………………………………………………
    @coin_window = Window_digits_number.new(500,430,100,$game_party.coin,10,10,c_font)
    #…………………………………………………………………………………………………
    # ■Miss数値ウィンドウを作成
    #…………………………………………………………………………………………………
    @chance = HIDE_BINGO::CHANCE
    m_font.interval = -1
    @chance_window = Window_digits_number.new(530,406,100,@chance,10,10,m_font)
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @bingo_window_back.dispose
    @game_select_window.dispose
    @bingo_table_window.dispose
    @bingo_card.dispose
    @bingo_hit_window.dispose
    @bingo_item.dispose
    @digital_window.dispose
    @coin_window.dispose
    @chance_window.dispose
  end
  #--------------------------------------------------------------------------
  # ■ 選択肢の色更新
  #--------------------------------------------------------------------------
  def exchange_colors?
    @game_select_window.exchange[0] = $game_party.coin < @coin
    @game_select_window.refresh
  end
  #--------------------------------------------------------------------------
  # ■ 初期化
  #--------------------------------------------------------------------------
  def bingo_reset?
    @chance = HIDE_BINGO::CHANCE
    # □ヘルプの初期化
    @text = nil ; @old_text = nil
    # □ランダムに景品を選択
    @bingo_item.visible = false
    @bingo_item.item_type?
    @item_size = @bingo_item.type.size
    # □景品ウィンドウの更新
    @bingo_item.index?(0)
    # □モニター数値の初期化
    @digital_window.reset
    @digital_window.opacity = 255
    
    @numbers = []
    @old_numbers = []
    @table_numbers = []
    # □カード数値の初期化
    for i in 1..75
      @table_numbers.push(i)
    end
    @count = 0 ; @old_count = 0
    @wait_count = 0
    @rand_count = []
    for i in 0...10
      n = HIDE_BINGO::DEBUG ? -1 : rand(30) + HIDE_BINGO::WAIT
      @rand_count.push(n)
    end
    # □カードの初期化
    @bingo_card.bingo_reset?
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新
  #--------------------------------------------------------------------------
  def update
    # □回転数値の更新(所持コイン)
    @coin_window.update($game_party.coin)
    # □当りの演出を更新
    @bingo_hit_window.update
    # □Miss数値ウィンドウを更新
    @chance_window.refresh(@chance)
    #…………………………………………………………………………………………………
    # ■ ビンゴカードの初期化
    #…………………………………………………………………………………………………
    if @bingo_card.un_update
      # □ビンゴカードの初期化
      bingo_reset?
      @bingo_card.visible = true
      @bingo_card.update = false
      @bingo_card.un_update = false
      return
    end
    #…………………………………………………………………………………………………
    # ■ ビンゴカード消滅アニメの更新
    #…………………………………………………………………………………………………
    if @bingo_card.update
      @bingo_card.card_reset_update
      return
    end
    #…………………………………………………………………………………………………
    # ■ リプレイの場合
    #…………………………………………………………………………………………………
    if @re_start
      game_start?
      return
    end
    #…………………………………………………………………………………………………
    # ■ ナンバー抽選
    #…………………………………………………………………………………………………
    if @bingo_table_window.active && @bingo_card.bingo[10] == false
      # □ナンバー抽選
      r = rand(@table_numbers.size)
      n = @table_numbers[r]
      speed = HIDE_BINGO::DEBUG ? 1 : HIDE_BINGO::SPEED * 25
      # □ナンバー抽選確率を変更
      if @luck != 0 && @numbers.size != 0 && n != nil
        if @numbers.size % @luck == 0 && @count % speed == 0
          flat = @bingo_card.cards[10].flatten
          for f in @numbers
            flat.delete(f)
          end
          a = flat[rand(flat.size)]
          if a != nil
            n = a
          end
        end
      end
      if @count % speed == 0 && n != nil
        unless @numbers.include?(n)
          @numbers.push(n)
          @table_numbers.delete(n)
          # □カウントを保管
          @old_count = @count
        end
      end
      @count += 1
    end
    #…………………………………………………………………………………………………
    # ■ NPC ナンバー更新
    #…………………………………………………………………………………………………
    for n in @numbers
      for i in 0...@bingo_card.cards.size-1
        unless @bingo_card.hits[i].include?(n)
          # □ランダムに待ち時間
          if @count > @old_count + @rand_count[i]
            @bingo_card.hits[i].push(n)
            @bingo_card.make_hit?
            break
          end
        end
      end
    end
    #…………………………………………………………………………………………………
    # ■ NPC ナンバー更新
    #…………………………………………………………………………………………………
    for n in @numbers
      unless @old_numbers.include?(n)
        # □モニター数値の更新(描画)
        pic = RPG::Cache.windowskin(HIDE_BINGO::DIGITAL)
        rect = Rect.new(((n-1)/5)*26,((n-1)%5)*26,26,26)
        @digital_window.bitmap.blt(19+((n-1)/5)*26,29+((n-1)%5)*26,pic,rect)
        @old_numbers.push(n)
        # □モニター数値の更新(点滅)
        @bingo_hit_window.bitmap.clear
        rect = Rect.new(18+((n-1)/5)*26,28+((n-1)%5)*26,25,25)
        @bingo_hit_window.bitmap.fill_rect(rect,Color.new(255,255,255,255))
        rect = Rect.new(20+((n-1)/5)*26,30+((n-1)%5)*26,21,21)
        @bingo_hit_window.bitmap.fill_rect(rect,Color.new(255,255,255,100))
        # □景品ウィンドウの更新
        pic = RPG::Cache.windowskin(HIDE_BINGO::DIGITAL)
        c = pic.get_pixel(((n-1)/15)*79,0)
        color = Color.new(c.red,c.green,c.blue,80)
        @bingo_hit_window.bitmap.fill_rect(Rect.new(432,25,195,136),color)
      end
    end
    #…………………………………………………………………………………………………
    # ■ ゲーム開始ウィンドウの更新
    #…………………………………………………………………………………………………
    if @game_select_window.active
      @game_select_window.update
      update_select
      return
    end
    #…………………………………………………………………………………………………
    # ■ ナンバー選択ウィンドウの更新
    #…………………………………………………………………………………………………
    if @bingo_table_window.active
      # □景品ウィンドウの更新
      @bingo_item.index?(item_index?)
      
      @bingo_table_window.update
      bingo_table_update
      return
    end
  end
  #--------------------------------------------------------------------------
  # ■ ビンゴ開始
  #--------------------------------------------------------------------------
  def game_start?
    # □ヘルプの更新
    update_help
    # □コインを減らす
    $game_party.lose_coin(@coin)
    # □選択肢の文字色を初期化
    exchange_colors?
    @game_select_window.active = false
    # □景品の可視化
    @bingo_item.visible = true
    #…………………………………………………………………………………………………
    # ■ ビンゴ開始まで待つ
    #…………………………………………………………………………………………………
    time = 0 ; time_up = 30
    while time < time_up
      # □ゲーム画面を更新
      Graphics.update
      # □回転数値の更新(所持コイン)
      @coin_window.update($game_party.coin)
      time += 1
    end
    #…………………………………………………………………………………………………
    # ■ プレイヤーのカードナンバーを白く塗り潰し
    #…………………………………………………………………………………………………
    for i in 0...@bingo_card.cards[10].size
      numbers = @bingo_card.cards[10][i]
      for c in 0...numbers.size
        n = numbers[c]
        opc = 60
        unless i == 2 && c == 2
          case i
          when 0
            color = Color.new(255,255,0,opc)
          when 1
            color = Color.new(0,255,94,opc)
          when 2
            color = Color.new(0,186,255,opc)
          when 3
            color = Color.new(255,0,21,opc)
          when 4
            color = Color.new(207,0,255,opc)
          end
          rect = Rect.new(16+((n-1)/5)*26+4,26+((n-1)%5)*26+4,21,21)
          @digital_window.bitmap.fill_rect(rect,color)
        end
      end
    end
    #…………………………………………………………………………………………………
    # ■ カード選択を可視化
    #…………………………………………………………………………………………………
    @bingo_table_window.index = 0
    @bingo_table_window.active = true
    @bingo_table_window.visible = true
    @playing = true
    @re_playing = false
    @re_start = false
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新(ヘルプ)
  #--------------------------------------------------------------------------
  def update_help
    i = @bingo_table_window.index
    @text = @bingo_card.cards[10][i%5][i/5]
    if @text != @old_text
      case i%5
      when 0
        t = "【Ｂ-"
      when 1
        t = "【Ｉ-"
      when 2
        t = "【Ｎ-"
      when 3
        t = "【Ｇ-"
      when 4
        t = "【Ｏ-"
      end
      text = t + sprintf("%02d",@text) + "】を選択します。"
      num = "０１２３４５６７８９"
      text.gsub!(/\d/) { |n| num.scan(/./)[n.to_i] }
      # □テキストを描画
      helps = [""]*25
      helps[i] = i/5 == 2 && i%5 == 2 ? "【ＦＲＥＥ】を選択します。" : text
      @bingo_table_window.helps = helps
      @old_text = @text
    end
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新(ゲーム開始)
  #--------------------------------------------------------------------------
  def update_select
    #…………………………………………………………………………………………………
    # ■ C ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::C)
      case @game_select_window.index
      when 0 #□ゲーム開始
        if $game_party.coin >= @coin
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BINGO::DECISION_SE))
          # ■ リプレイの場合
          if @re_playing
            @bingo_hit_window.bitmap.clear
            # □ビンゴカードの初期化
            @bingo_card.card_reset?
            @re_start = true
            return
          end
          # □ゲーム開始
          game_start?
        # □コインが足りない場合
        else
          # □ブザー SE を演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BINGO::BUZZER_SE))
          return
        end
      when 1 #□ゲーム終了
        # □決定SEを演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_BINGO::DECISION_SE))
        @playing = false
        bingo_end
      end
      return
    end
    #…………………………………………………………………………………………………
    # ■ B ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::B)
      # □キャンセルSEを演奏
      $game_system.se_play(RPG::AudioFile.new(HIDE_BINGO::CANCEL_SE))
      @playing = false
      bingo_end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ■ ビンゴカードの更新
  #--------------------------------------------------------------------------
  def bingo_table_update
    #…………………………………………………………………………………………………
    # ■ ヘルプの更新
    #…………………………………………………………………………………………………
    update_help
    #…………………………………………………………………………………………………
    # ■ プレイヤービンゴの場合
    #…………………………………………………………………………………………………
    if @bingo_card.bingo[10] && @item_size >= item_index?
      @bingo_table_window.active = false
      @bingo_table_window.index = -1
      @bingo_table_window.visible = false
      #…………………………………………………………………………………………………
      # ■ アイテムの獲得
      #…………………………………………………………………………………………………
      gain_treasures?(@bingo_item.type[item_index?])
      #…………………………………………………………………………………………………
      # ■ 当りの場合の効果音を演奏(ME)
      #…………………………………………………………………………………………………
      if item_index? <= HIDE_BINGO::ME_RATE_MAX[$game_temp.bingo_type]
        # □大当たりの場合
        $game_system.me_play(RPG::AudioFile.new(HIDE_BINGO::HIT_ME_MAX))
        # □次のビンゴ開始まで待つ(MEの演奏時間)
        time_up = HIDE_BINGO::ME_MAX_TIME
      else
        $game_system.me_play(RPG::AudioFile.new(HIDE_BINGO::HIT_ME))
        # □次のビンゴ開始まで待つ(MEの演奏時間)
        time_up = HIDE_BINGO::ME_TIME
      end
      # □当たりを点滅
      @bingo_hit_window.bitmap.clear
      flash = RPG::Cache.windowskin(HIDE_BINGO::BINGO_HIT)
      @bingo_hit_window.draw_flash(flash,433,38,194,32)
      #…………………………………………………………………………………………………
      # ■ 次のビンゴ開始まで待つ
      #…………………………………………………………………………………………………
      time = 0
      @bingo_hit_window.blink_start
      while @bingo_hit_window.blink_active
        # □ゲーム画面を更新
        Graphics.update
        # □回転数値の更新(所持コイン)
        @coin_window.update($game_party.coin)
        # □当りの演出を更新
        if time < time_up
          if @bingo_hit_window.count?
            time += 1
          end
          @bingo_hit_window.update
        else
          @bingo_hit_window.blink_end
        end
      end
      @re_playing = true
      @game_select_window.active = true
      return
    end
    #…………………………………………………………………………………………………
    # ■ NPCビンゴ/Missの場合(景品無し)
    #…………………………………………………………………………………………………
    if @item_size <= item_index? or @chance <= 0
      @bingo_table_window.index = -1
      @bingo_table_window.active = false
      @bingo_table_window.visible = false
      $game_system.me_play(RPG::AudioFile.new(HIDE_BINGO::NO_ITEM_ME))
      # □次のビンゴ開始まで待つ(MEの演奏時間)
      time_up = NO_ITEM_ME_TIME
      #…………………………………………………………………………………………………
      # ■ 次のビンゴ開始まで待つ
      #…………………………………………………………………………………………………
      time = 0
      @bingo_hit_window.blink_start
      while @bingo_hit_window.blink_active
        # □ゲーム画面を更新
        Graphics.update
        # □回転数値の更新(所持コイン)
        @coin_window.update($game_party.coin)
        # □当りの演出を更新
        if time < time_up
          if @bingo_hit_window.count?
            time += 1
          end
          @bingo_hit_window.update
        else
          @bingo_hit_window.blink_end
        end
      end
      # □ビンゴカードの初期化
      @bingo_card.card_reset?
      @game_select_window.active = true
      return
    end
    #…………………………………………………………………………………………………
    # ■ B ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::B)
      # □キャンセルSEを演奏
      $game_system.se_play(RPG::AudioFile.new(HIDE_BINGO::CANCEL_SE))
      @bingo_table_window.index = -1
      @bingo_table_window.active = false
      @bingo_table_window.visible = false
      # □ビンゴカードの初期化
      @bingo_hit_window.bitmap.clear
      # □ビンゴカードの初期化
      @bingo_card.card_reset?
      @game_select_window.active = true
    end
    #…………………………………………………………………………………………………
    # ■ C ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::C)
      i = @bingo_table_window.index
      n = @bingo_card.cards[10][i%5][i/5]
      if @numbers.include?(n)
        if @bingo_card.hits[10].include?(n) or @bingo_card.bingo[10]
          # □ブザー SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BINGO::BUZZER_SE))
        else
          # □Hit SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_BINGO::HIT_SE))
          @bingo_card.hits[10].push(n)
          @bingo_card.player_make_hit?
        end
      else
        # □FREE以外
        if i != 12
          @chance -= 1
        end
        # □ブザー SEを演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_BINGO::BUZZER_SE))
      end
    end
  end
  #--------------------------------------------------------------------------
  # ■ アイテムindex
  #--------------------------------------------------------------------------
  def item_index?
    n = 0
    for i in 0...10
      if @bingo_card.bingo[i]
        n += 1
      end
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ■ アイテムの獲得
  #--------------------------------------------------------------------------
  def gain_treasures?(treasure)
    treasure.scan(/([iwagc])([0-9]+)/)
    type = $1 ; id = $2
    case type
    when "i"
      $game_party.gain_item(id.to_i,1)
    when "w"
      $game_party.gain_weapon(id.to_i,1)
    when "a"
      $game_party.gain_armor(id.to_i,1)
    when "g" # お金
      $game_party.gain_gold(id.to_i)
    when "c" # コイン
      $game_party.gain_coin(id.to_i)
    end
  end
  #--------------------------------------------------------------------------
  # ■ ゲームの終了
  #--------------------------------------------------------------------------
  def bingo_end
    unless @playing
      # □ビンゴ開始前の BGM に戻す
      $game_system.bgm_play($game_temp.map_bgm)
      # マップ画面に切り替え
      $scene = Scene_Map.new
      return
    end
  end
end
#==============================================================================
# ■ Window_Bingo
#==============================================================================
class Window_Bingo
  include HIDE_BINGO
  attr_accessor :cards
  attr_accessor :hits
  attr_accessor :bingo
  attr_accessor :update
  attr_accessor :un_update
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    @update = false
    @un_update = false
    @cards = [] ; @hits = [] ; @bingo = [false]*11 ; @reach = [false]*11
    @card_windows = [] ; @viewports1 = []
    @card2_windows = [] ; @viewports2 = []
    @number_windows = [] ; @viewports3 = []
    pic = RPG::Cache.windowskin(HIDE_BINGO::CARD)
    # □ビンゴカードを作成
    for i in 0...10
      x = 90*(i%5) ; y = 136*(i/5) + 174
      @viewports1[i] = Viewport.new(x,y,pic.width/2,pic.height)
      @card_windows[i] = Sprite.new(@viewports1[i])
      @card_windows[i].bitmap = Bitmap.new(pic.width/2,pic.height)
      @card_windows[i].viewport.z = 100 + 2
      @viewports2[i] = Viewport.new(x,y,pic.width/2,pic.height)
      @card2_windows[i] = Sprite.new(@viewports2[i])
      @card2_windows[i].bitmap = Bitmap.new(pic.width/2,pic.height)
      @card2_windows[i].viewport.z = 100 + 3
      @viewports3[i] = Viewport.new(x,y,pic.width/2,pic.height)
      @number_windows[i] = Sprite.new(@viewports3[i])
      @number_windows[i].bitmap = Bitmap.new(pic.width/2,pic.height)
      @number_windows[i].viewport.z = 100 + 4
    end
    # □ビンゴカード2を作成
    pic = RPG::Cache.windowskin(HIDE_BINGO::CARD2)
    x = 86*5+20 ; y = 169
    # □ビンゴカード下
    @viewports1[10] = Viewport.new(x,y,pic.width/3,pic.height)
    @player_card = Sprite.new(@viewports1[10])
    @player_card.bitmap = Bitmap.new(pic.width/3,pic.height)
    @player_card.viewport.z = 2
    # □ビンゴカード中
    @player2_card = Sprite.new(@viewports1[10])
    @player2_card.bitmap = Bitmap.new(pic.width/3,pic.height)
    @player2_card.viewport.z = 3
    # □ビンゴカード上
    @viewports2[10] = Viewport.new(x,y,pic.width/3,pic.height)
    @player3_card = Sprite.new(@viewports2[10])
    @player3_card.bitmap = Bitmap.new(pic.width/3,pic.height)
    @player3_card.viewport.z = 100 + 3
    # □ビンゴカード数値
    @viewports3[10] = Viewport.new(x,y,pic.width/3,pic.height)
    @player_number = Sprite.new(@viewports3[10])
    @player_number.bitmap = Bitmap.new(pic.width/3,pic.height)
    @player_number.viewport.z = 100 + 4
    # □初期化
    bingo_reset?
  end
  #--------------------------------------------------------------------------
  # ■ 初期化
  #--------------------------------------------------------------------------
  def bingo_reset?
    pic = RPG::Cache.windowskin(HIDE_BINGO::CARD)
    for i in 0...10
      x = 90*(i%5) ; y = 136*(i/5) + 174
      @card_windows[i].bitmap.clear
      @card_windows[i].bitmap.blt(0,0,pic,Rect.new(0,0,pic.width/2,pic.height))
      @card2_windows[i].bitmap.clear
      @card2_windows[i].bitmap.blt(0,0,pic,Rect.new(pic.width/2,0,pic.width/2,pic.height))
    end
    pic = RPG::Cache.windowskin(HIDE_BINGO::CARD2)
    x = 86*5+20 ; y = 169
    @player_card.bitmap.clear
    @player_card.bitmap.blt(0,0,pic,Rect.new(pic.width/3*2,0,pic.width/3,pic.height))
    @player2_card.bitmap.clear
    @player2_card.bitmap.blt(0,0,pic,Rect.new(pic.width/3,0,pic.width/3,pic.height))
    @player3_card.bitmap.clear
    @player3_card.bitmap.blt(0,0,pic,Rect.new(0,0,pic.width/3,pic.height))
    @cards = [] ; @hits = []
    @bingo = [false]*11 ; @reach = [false]*11
    for i in 0..10
      make_number?(i)
    end
    # □カード作成
    make_card?
  end
  #--------------------------------------------------------------------------
  # ■ ウィンドウの可視化
  #--------------------------------------------------------------------------
  def visible=(visible)
    @viewports1.each{ |a| a.visible = visible }
    @viewports2.each{ |a| a.visible = visible }
    @viewports3.each{ |a| a.visible = visible }
  end
  #--------------------------------------------------------------------------
  # ■ カード更新
  #--------------------------------------------------------------------------
  def card_reset?
    @b1 = [] ; @b2 = [] ; @b3 = []
    for i in 0...10
      # □マスを塗りつぶし
      rect = Rect.new(7,121,16,16)
      @card2_windows[i].bitmap.fill_rect(rect,Color.new(0,0,0,0))
      rect = Rect.new(32,96+14,120,40)
      @number_windows[i].bitmap.fill_rect(rect,Color.new(0,0,0,0))
      
      @b1.push(@card_windows[i].bitmap.dup)
      @b2.push(@card2_windows[i].bitmap.dup)
      @b3.push(@number_windows[i].bitmap.dup)
    end
    # □マスを塗りつぶし
    rect = Rect.new(14,242+4,31,31)
    @player2_card.bitmap.fill_rect(rect,Color.new(0,0,0,0))
    rect = Rect.new(32*2,110*2+28,120,40)
    @player_number.bitmap.fill_rect(rect,Color.new(0,0,0,0))
    @b4 = @player_card.bitmap.dup
    @b5 = @player2_card.bitmap.dup
    @b6 = @player3_card.bitmap.dup
    @b7 = @player_number.bitmap.dup
    @_opac = 0
    @update = true
  end
  #--------------------------------------------------------------------------
  # ■ カード更新(カード消滅)
  #--------------------------------------------------------------------------
  def card_reset_update
    unless @update
      return
    end
    for i in 0...10
      @card_windows[i].bitmap.clear
      @card2_windows[i].bitmap.clear
      @number_windows[i].bitmap.clear
    end
    @player_card.bitmap.clear
    @player2_card.bitmap.clear
    @player3_card.bitmap.clear
    @player_number.bitmap.clear
    opac_c = 0 ;  opac_c2 = 0 ; py = 280 ; cn = 240+40
    while cn > 0
      for i in 0...10
        @card_windows[i].bitmap.blt(0,py,@b1[i],Rect.new(0,py,@b1[i].width,1),255-opac_c)
        @card2_windows[i].bitmap.blt(0,py,@b2[i],Rect.new(0,py,@b2[i].width,1),255-opac_c)
        @number_windows[i].bitmap.blt(0,py,@b3[i],Rect.new(0,py,@b3[i].width,1),255-opac_c)
      end
      @player_card.bitmap.blt(0,py,@b4,Rect.new(0,py,@b4.width,1),255-opac_c2)
      @player2_card.bitmap.blt(0,py,@b5,Rect.new(0,py,@b5.width,1),255-opac_c2)
      @player3_card.bitmap.blt(0,py,@b6,Rect.new(0,py,@b6.width,1),255-opac_c2)
      @player_number.bitmap.blt(0,py,@b7,Rect.new(0,py,@b7.width,1),255-opac_c2)
      opac_c += (@_opac)
      opac_c2 += (1.25 + @_opac)
      cn -= 2 ; py -= 2
    end
    # □画像の更新
    Graphics.update
    @_opac += 0.25
    # □カード消滅の終了
    if @_opac > 10
      @un_update = true
    end
  end
  #--------------------------------------------------------------------------
  # ■ Hitナンバー背景を透明化
  #--------------------------------------------------------------------------
  def make_hit?
    # □ビンゴカードナンバー背景を透明化
    for id in 0...@cards.size-1
      for n in 0...@cards[id].size
        for i in 0...@cards[id][n].size
          num = @cards[id][n][i]
          # □Hitの場合ナンバーを消去
          if @hits[id].include?(num) && @bingo[id] == false
            rect = Rect.new(10+n*16-1,30+i*17-7,13,15)
            @card2_windows[id].bitmap.fill_rect(rect,Color.new(0,0,0,0))
            # □マスを塗りつぶし
            rect = Rect.new(8+n*3,120+i*3,2,2)
            @card2_windows[id].bitmap.fill_rect(rect,Color.new(255,0,0,255))
          end
        end
      end
      # □Bingoの判定
      bingo?(id)
    end
  end
  #--------------------------------------------------------------------------
  # ■ プレイヤーHitナンバー背景を透明化
  #--------------------------------------------------------------------------
  def player_make_hit?
    # □ビンゴカード2ンバー背景を透明化
    for n in 0...@cards[10].size
      for i in 0...@cards[10][n].size
        num = @cards[10][n][i]
        
        if @hits[10].include?(num) && @bingo[10] == false
          # □Hitの場合ナンバーを消去
          rect = Rect.new(20+n*32-2,60+i*34-14,13*2,15*2)
          @player2_card.bitmap.fill_rect(rect,Color.new(0,0,0,0))
          # □マスを塗りつぶし
          rect = Rect.new(15+n*6,245+i*6,5,5)
          @player2_card.bitmap.fill_rect(rect,Color.new(255,0,0,255))
        end
      end
    end
    # □Bingoの判定
    bingo?(10)
  end
  #--------------------------------------------------------------------------
  # ■ Bingoの判定
  #--------------------------------------------------------------------------
  def bingo?(id)
    bingo_t = [] ; bingo_y = []
    bingo_n = []
    cards1 = @cards[id]
    cards2 = [[],[],[],[],[]]
    cards3 = [[],[]]
    word1 = HIDE_BINGO::WORD2
    word2 = HIDE_BINGO::WORD3
    #…………………………………………………………………………………………………
    # ■ビンゴパターンを取得
    #…………………………………………………………………………………………………
    for i in 0...@cards[id].size
      for c in 0...@cards[id][i].size
        n = @cards[id][i][c]
        # □縦1列を取得
        cards2[c][i] = n
        # □左斜め
        if i == c
          cards3[0][i] = n
        end
        # □右斜め
        if i + c == 4
          cards3[1][i] = n
        end
      end
    end
    cards3[1].reverse
    #…………………………………………………………………………………………………
    # ■縦1列x5
    #…………………………………………………………………………………………………
    for i in 0...cards1.size
      for c in 0...cards1[i].size
        n = cards1[i][c]
        if @hits[id].include?(n)
          if bingo_t[i] == nil
            bingo_t[i] = 0
          end
          bingo_t[i] += 1
        end
      end
    end
    #…………………………………………………………………………………………………
    # ■縦1列x5
    #…………………………………………………………………………………………………
    for i in 0...cards2.size
      for c in 0...cards2[i].size
        n = cards2[i][c]
        if @hits[id].include?(n)
          if bingo_y[i] == nil
            bingo_y[i] = 0
          end
          bingo_y[i] += 1
        end
      end
    end
    #…………………………………………………………………………………………………
    # ■斜めx2
    #…………………………………………………………………………………………………
    for i in 0...cards3.size
      for c in 0...cards3[i].size
        n = cards3[i][c]
        if @hits[id].include?(n)
          if bingo_n[i] == nil
            bingo_n[i] = 0
          end
          bingo_n[i] += 1
        end
      end
    end
    case id
    when 10 # プレイヤー
      #…………………………………………………………………………………………………
      # ■リーチを描画
      #…………………………………………………………………………………………………
      if @reach[id] == false && @bingo[id] == false
        @reach[id] |= bingo_t.include?(4)
        @reach[id] |= bingo_y.include?(4)
        @reach[id] |= bingo_n.include?(4)
        if @reach[id]
          font1 = Copy_Font.new(13,true)
          rect = Rect.new(32*2,110*2+28,120,40)
          @player_number.bitmap.fill_rect(rect,Color.new(0,0,0,0))
          @player_number.bitmap.draw_cache_text(32*2,110*2+29,120,40,word1,0,font1)
        end
      end
      #…………………………………………………………………………………………………
      # ■ビンゴを描画
      #…………………………………………………………………………………………………
      unless @bingo[id]
        @bingo[id] |= bingo_t.include?(5)
        @bingo[id] |= bingo_y.include?(5)
        @bingo[id] |= bingo_n.include?(5)
        if @bingo[id]
          font2 = Copy_Font.new(13,true)
          font2.color = Color.new(255,255,0,255)
          rect = Rect.new(32*2,110*2+28,120,40)
          @player_number.bitmap.fill_rect(rect,Color.new(0,0,0,0))
          @player_number.bitmap.draw_cache_text(32*2,110*2+29,120,40,word2,0,font2)
        end
      end
    else
      #…………………………………………………………………………………………………
      # ■リーチを描画
      #…………………………………………………………………………………………………
      if @reach[id] == false && @bingo[id] == false
        @reach[id] |= bingo_t.include?(4)
        @reach[id] |= bingo_y.include?(4)
        @reach[id] |= bingo_n.include?(4)
        if @reach[id]
          font1 = Copy_Font.new(13,true)
          rect = Rect.new(32,96+16,120,40)
          @number_windows[id].bitmap.fill_rect(rect,Color.new(0,0,0,0))
          @number_windows[id].bitmap.draw_cache_text(32,96+12,120,40,word1,0,font1)
        end
      end
      #…………………………………………………………………………………………………
      # ■ビンゴを描画
      #…………………………………………………………………………………………………
      unless @bingo[id]
        @bingo[id] |= bingo_t.include?(5)
        @bingo[id] |= bingo_y.include?(5)
        @bingo[id] |= bingo_n.include?(5)
        if @bingo[id]
          font2 = Copy_Font.new(13,true)
          font2.color = Color.new(255,255,0,255)
          rect = Rect.new(32,96+16,120,40)
          @number_windows[id].bitmap.fill_rect(rect,Color.new(0,0,0,0))
          @number_windows[id].bitmap.draw_cache_text(32,96+12,120,40,word2,0,font2)
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ■ カード数値の作成
  #--------------------------------------------------------------------------
  def make_card?
    # □ビンゴカードに数値を描画
    image = RPG::Cache.windowskin(HIDE_BINGO::NUMBER)
    pic = Bitmap.new(60,90)
    for i in 1..75
      pic.draw_numbers(((i-1)/15)*12,((i-1)%15)*6,12,6,6,image,i,0,(i-1)/15,0,1)
    end
    
    for id in 0...@cards.size-1
      @number_windows[id].bitmap.clear
      for n in 0...@cards[id].size
        for i in 0...@cards[id][n].size
          num = @cards[id][n][i]
          unless n == 2 && i == 2
            rect = Rect.new(((num-1)/15)*12,((num-1)%15)*6,12,6)
            @number_windows[id].bitmap.blt(10+n*16,30+i*17,pic,rect)
          else
            unless @hits[id].include?(num)
              @hits[id].push(num)
            end
          end
        end
      end
    end
    # □ビンゴカード2に数値を描画
    @player_number.bitmap.clear
    for n in 0...@cards[10].size
      for i in 0...@cards[10][n].size
        num = @cards[10][n][i]
        unless n == 2 && i == 2
          rect = Rect.new(((num-1)/15)*12,((num-1)%15)*6,12,6)
          # □数値画像を拡大
          stretch = Rect.new(20+n*32,60+i*34,24,12)
          @player_number.bitmap.stretch_blt(stretch,pic,rect)
        else
          unless @hits[10].include?(num)
            @hits[10].push(num)
          end
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ■ カード数値の更新
  #--------------------------------------------------------------------------
  def make_number?(id)
    number = [[],[],[],[],[]]
    for i in 0...75
      number[i/15].push(i+1)
    end
    cards = [[],[],[],[],[]]
    for n in 0...number.size
      num = number[n]
      while cards[n].size < 5
        c = num[rand(15)]
        if ! cards[n].include?(c)
          cards[n].push(c)
        end
      end
    end
    @cards[id] = cards
    @hits[id] = []
  end
  #--------------------------------------------------------------------------
  # ■ 解放
  #--------------------------------------------------------------------------
  def dispose
    for i in 0...@card_windows.size
      unless @card_windows[i] == nil or @card_windows[i].disposed?
        @card_windows[i].viewport.dispose
        @card_windows[i].dispose
      end
    end
    for i in 0...@card2_windows.size
      unless @card2_windows[i] == nil or @card2_windows[i].disposed?
        @card2_windows[i].viewport.dispose
        @card2_windows[i].dispose
      end
    end
    for i in 0...@number_windows.size
      unless @number_windows[i] == nil or @number_windows[i].disposed?
        @number_windows[i].viewport.dispose
        @number_windows[i].dispose
      end
    end
    unless @player_card == nil or @player_card.disposed?
      @player_card.viewport.dispose
      @player_card.dispose
    end
    unless @player2_card == nil or @player2_card.disposed?
      @player2_card.viewport.dispose
      @player2_card.dispose
    end
    unless @player3_card == nil or @player3_card.disposed?
      @player3_card.viewport.dispose
      @player3_card.dispose
    end
    unless @player_number == nil or @player_number.disposed?
      @player_number.viewport.dispose
      @player_number.dispose
    end
  end
end
#==============================================================================
# ■ Window_Bingo_Item
#==============================================================================
class Window_Bingo_Item
  include HIDE_BINGO
  attr_accessor :index
  attr_accessor :type
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    @item_window = Sprite.new(Viewport.new(428,28,230,45*3))
    @item_window.viewport.z = 100 + 3
    @index = 0
    item_type?
  end
  #--------------------------------------------------------------------------
  # ■ indexの取得
  #--------------------------------------------------------------------------
  def index?(n)
    @item_window.viewport.oy = n * 45
  end
  #--------------------------------------------------------------------------
  # ■ ウィンドウの可視化
  #--------------------------------------------------------------------------
  def visible=(visible)
    @item_window.viewport.visible = visible
  end
  #--------------------------------------------------------------------------
  # ■ ランダムに景品を決定
  #--------------------------------------------------------------------------
  def item_type?
    list = HIDE_BINGO::LIST[$game_temp.bingo_type]
    @type = HIDE_BINGO::ITEMS[rand(list.size)]
    draw_item(@index)
  end
  #--------------------------------------------------------------------------
  # ■ 景品と順番(n等)を描画
  #--------------------------------------------------------------------------
  def draw_item(index = 0)
    if @item_window.bitmap != nil
      @item_window.bitmap.dispose
      @item_window.bitmap = nil
    end
    @item_window.bitmap = Bitmap.new(230,45*@type.size)
    @item_window.bitmap.clear
    @item_window.oy = index * 45
    font = Copy_Font.new
    font.s_color = Color.new(255,255,255,255)
    font.color = Color.new(80,80,80,255)
    font.shadow = true
    s_font = Copy_Font.new
    s_font.size = 12
    s_font.s_color = Color.new(255,255,255,255)
    s_font.color = Color.new(80,80,60,255)
    s_font.shadow = true
    # □景品と順番(n等)を描画
    for i in 0...@type.size
      text = (i+1).to_s + HIDE_BINGO::WORD5
      @item_window.bitmap.draw_cache_text(8+10,45*i-10,320,32,text,0,s_font)
      name = item_name?(@type[i])
      @item_window.bitmap.draw_cache_text(6,45*i+10,320,32,name,0,font)
    end
  end
  #--------------------------------------------------------------------------
  # ■ アイテムの取得
  #--------------------------------------------------------------------------
  def item_name?(treasure)
    treasure.scan(/([iwagc])([0-9]+)/)
    type = $1 ; id = $2
    case type
    when "i"
      name = $data_items[id.to_i].name
      icon = $data_items[id.to_i].icon_name
    when "w"
      name = $data_weapons[id.to_i].name
      icon = $data_weapons[id.to_i].icon_name
    when "a"
      name = $data_armors[id.to_i].name
      icon = $data_armors[id.to_i].icon_name
    when "g" # お金
      name = id.to_s + $data_system.words.gold
      icon = HIDE_BINGO::GOLD_ICON
    when "c" # コイン
      name = id.to_s + HIDE_BINGO::WORD4
      icon = HIDE_BINGO::COIN_ICON
    end
    return "\\icon[" + icon + "]" + name
  end
  #--------------------------------------------------------------------------
  # ■ 解放
  #--------------------------------------------------------------------------
  def dispose
    unless @item_window == nil or @item_window.disposed?
      @item_window.viewport.dispose
      @item_window.dispose
    end
  end
end