#==============================================================================
# ■ Scratch Card vol.1.10
#------------------------------------------------------------------------------
# ※『Window_digits_number 5.90以上』(必須)
# ※『Picture_Blink_Cursor 1.60以上』(必須)
# ※『Coin_Base 5.00以上』(必須)より下に挿入
# 12/04/28
#==============================================================================
module HIDE_SCRATCH
  #==============================================================================
  # ■ デバッグ(開発者用)
  #==============================================================================
  DEBUG = false                    # [true/false]
  DEBUG_KEY = false                # [A]キーでリプレイ[true/false]
  #==============================================================================
  # ■ イベントコマンド『スクリプト』に以下を追加
  #------------------------------------------------------------------------------
  #   make_scratch(type)
  #------------------------------------------------------------------------------
  #   type=スクラッチカードタイプの設定を参照
  #==============================================================================
  # ■ ゲーム設定
  #==============================================================================
  SPEED = 4                        # 個別スクラッチ速度(大=遅い)
  ALL_SPEED = 12                   # 一括スクラッチ速度(大=遅い)
  #==============================================================================
  # ■ アイコン設定 ※Iconsフォルダ内のファイル名を指定
  #==============================================================================
  COIN_ICON = "icon_coin"          # コインのアイコン
  GOLD_ICON = "icon_gold"          # お金のアイコン
  #==============================================================================
  # ■ グラフィック設定 ※Windowskinsフォルダ内のファイル名を指定
  #==============================================================================
  BACK = "coin_background1"        # スクラッチカードの背景画像
  LIST = "scratch_back"            # スクラッチリストの背景画像
  CARD = "scratch_card"            # スクラッチカード画像
  SCRATCH = "scratch"              # スクラッチ画像
  HIT = "flash_circle2"            # 当たり効果画像
  BET = "bet_coin"                 # コイン画像
  SELECT = "cursor_back"           # カーソル画像
  CURSOR = "cursor_anim"           # カーソルアイコン画像
  NUMBER = "number_image1"         # 数値画像
  #==============================================================================
  # ■ 選択肢とヘルプの設定
  #==============================================================================
  GAME_COMS = ["Buy","Scratch","Quick","List","End"]
  GAME_HELPS = ["カードを購入します。", "カードをスクラッチします。",
  "簡易アニメをON/OFFします。","景品リストの詳細を表示します。","スクラッチカードを終了します。"]
  
  COIN_HELP = "カジノで使用するコイン。"
  GOLD_HELP = "世界共通のお金。"
  #==============================================================================
  # ■ 音の設定 ※ファイル名を指定 ※Audioフォルダ内 #()のファイル名
  #==============================================================================
  BGM = "019-Field02"              # スクラッチカード実行中のBGM(BGM)
  SCRATCH_SE = "046-Book01"        # スクラッチの効果音(SE)
  
  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,RATE,ME_RATE_MAX)
  # COIN[n] = value　※n=タイプ番号($game_temp.scratch_type から参照される)
  #==============================================================================
  COIN = [] # value=消費コイン数(価格)
  COIN[0] = 100
  COIN[1] = 300
  COIN[2] = 300
  #==============================================================================
  # ■ カード名を設定
  #==============================================================================
  # NAME[n] = [ value, ... ]
  # n=パターン番号($game_temp.scratch_type から参照される)
  # value= カードの名前
  #==============================================================================
  NAME = {}
  NAME[0] = "ITEM CARD"
  NAME[1] = "COIN CARD"
  NAME[2] = "GOLD CARD"
  #==============================================================================
  # ■ スクラッチカードカラー(0〜360を指定)
  # HUE[n] = value　※n=タイプ番号($game_temp.scratch_type から参照される)
  #==============================================================================
  HUE = []
  HUE[0] = 0
  HUE[1] = 20
  HUE[2] = 40
  #==============================================================================
  # ■ 獲得景品リスト 表示=同じアイコンを区別する為
  #--------------------------------------------------------------------------
  # n = [i(ID),表示,優先度 = n] ※優先度が大きいほど選ばれやすい
  # n = [w(ID),表示,優先度 = n]
  # n = [a(ID),表示,優先度 = n]
  # n = [g(num),表示,優先度 = n] ※金額=最大5桁
  # n = [c(num),表示,優先度 = n] ※コイン枚数=最大5桁
  #--------------------------------------------------------------------------
  # "i(ID)"      …i=アイテム,ID=アイテムID
  # "w(ID)"      …w=武器,ID=武器ID
  # "a(ID)"      …a=防具,ID=防具ID
  # "g(num)"     …g=お金,num=金額
  # "c(num)"     …c=コイン,num=枚数
  #--------------------------------------------------------------------------
  i1 = ["i1",1,10]
  i2 = ["i2",2,8]
  i3 = ["i3",3,6]
  #------------------------------
  w1 = ["w1",1,4]
  w2 = ["w2",2,4]
  w3 = ["w5",1,4]
  w4 = ["w9",1,4]
  #------------------------------
  a1 = ["a1",1,4]
  a2 = ["a5",1,4]
  a3 = ["a9",1,4]
  a4 = ["a13",1,4]
  a5 = ["a17",1,4]
  a6 = ["a21",1,4]
  a7 = ["a25",1,4]
  a8 = ["a29",2,4]
#------------------------------  
  g1 = ["g100",1,20]
  g2 = ["g200",2,19]
  g3 = ["g500",3,18]
  g4 = ["g900",4,17]
  g5 = ["g1400",5,16]
  g6 = ["g2000",6,15]
  g7 = ["g2700",7,14]
  g8 = ["g3500",8,13]
  g9 = ["g4400",9,12]
  g10 = ["g5400",10,11]
  g11 = ["g6500",11,10]
  g12 = ["g7700",12,9]
  g13 = ["g9000",13,8]
  g14 = ["g10400",14,7]
  g15 = ["g11900",15,6]
  g16 = ["g13500",16,5]
  g17 = ["g15200",17,4]
  g18 = ["g17000",18,3]
  g19 = ["g18900",19,2]
  g20 = ["g20900",20,1]
#------------------------------
  c1 = ["c100",1,20]
  c2 = ["c200",2,19]
  c3 = ["c500",3,18]
  c4 = ["c900",4,17]
  c5 = ["c1400",5,16]
  c6 = ["c2000",6,15]
  c7 = ["c2700",7,14]
  c8 = ["c3500",8,13]
  c9 = ["c4400",9,12]
  c10 = ["c5400",10,11]
  c11 = ["c6500",11,10]
  c12 = ["c7700",12,9]
  c13 = ["c9000",13,8]
  c14 = ["c10400",14,7]
  c15 = ["c11900",15,6]
  c16 = ["c13500",16,5]
  c17 = ["c15200",17,4]
  c18 = ["c17000",18,3]
  c19 = ["c18900",19,2]
  c20 = ["c20900",20,1]
  #==============================================================================
  # ■ 獲得景品を設定
  # ※指定した獲得景品リストから決定される
  #==============================================================================
  # PATTERN[n] = [ value, ... ]
  # n=パターン番号($game_temp.scratch_type から参照される)
  # value= 獲得景品リストを指定(最大=20)
  # ※優先度nの合計が9以上になるよう指定
  #==============================================================================
  PATTERN = {}
  PATTERN[0] = [i1,i2,i3,w1,w2,w3,w4,a1,a2,a3,a4,a5,a6,a7,a8,g1,g2,c1,c2,c3]
  PATTERN[1] = [c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20]
  PATTERN[2] = [g1,g2,g3,g4,g5,g6,g7,g8,g9,g10,g11,g12,g13,g14,g15,g16,g17,g18,g19,g20]
  #--------------------------------------------------------------------------
  # □大当りの効果音(HIT_ME_MAX)を演奏する獲得景品リスト
  ME_RATE_MAX = []
  ME_RATE_MAX[0] = [c20]
  ME_RATE_MAX[1] = [c13,c14,c15,c16,c17,c18,c19,c20]
  ME_RATE_MAX[2] = [g13,g14,g15,g16,g17,g18,g19,g20]
  #==============================================================================
  # ■ 文字色設定
  #==============================================================================
  A_COLOR = Color.new(255,255,255,255)     # 通常色
  B_COLOR = Color.new(0,0,0,255)           # 影色
  S_COLOR = Color.new(255,255,0,255)       # タイトル色
  T_COLOR = Color.new(160,80,100,255)      # システム色
  IA_COLOR = Color.new(60,60,60,255)       # アイテム色
  IB_COLOR = Color.new(180,180,180,255)    # アイテム影色
  #==============================================================================
  # ■ メニュー文字設定
  #==============================================================================
  WORD1 = "COIN"
  WORD2 = "ITEM"
  WORD3 = "Quick"
  WORD4 = "LIST"
  WORD5 = "SCRATCH CARD"
  WORD6 = "枚"
  #--------------------------------------------------------------------------
  # 選択肢 の文字設定
  #--------------------------------------------------------------------------
  S_SIZE = 20                              # 文字サイズ
  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 = ["ＭＳ ゴシック"]               # フォント名
  #--------------------------------------------------------------------------
  # アイテム の文字設定
  #--------------------------------------------------------------------------
  N_SIZE = 22                              # 文字サイズ
  N_BOLD = false                           # 太文字フラグ[true/false]
  N_ITALIC = false                         # 斜め文字フラグ[true/false]
  N_SHADOW = true                          # 影文字フラグ[true/false]
  N_ROUND = false                          # 囲み文字フラグ[true/false]
  N_NAME = ["ＭＳ ゴシック"]               # フォント名
  #--------------------------------------------------------------------------
  # コイン の文字設定
  #--------------------------------------------------------------------------
  C_SIZE = 24                              # 文字サイズ
  C_BOLD = true                            # 太文字フラグ[true/false]
  C_ITALIC = false                         # 斜め文字フラグ[true/false]
  C_SHADOW = true                          # 影文字フラグ[true/false]
  C_ROUND = false                          # 囲み文字フラグ[true/false]
  C_NAME = ["Arial","ＭＳ ゴシック"]       # フォント名
  #--------------------------------------------------------------------------
  # システム の文字設定
  #--------------------------------------------------------------------------
  T_SIZE = 16                              # 文字サイズ
  T_BOLD = true                            # 太文字フラグ[true/false]
  T_ITALIC = false                         # 斜め文字フラグ[true/false]
  T_SHADOW = false                         # 影文字フラグ[true/false]
  T_ROUND = false                          # 囲み文字フラグ[true/false]
  T_NAME = ["Georgia","ＭＳ ゴシック"]     # フォント名
  #--------------------------------------------------------------------------
  # カード名 の文字設定
  #--------------------------------------------------------------------------
  M_SIZE = 24                              # 文字サイズ
  M_BOLD = true                            # 太文字フラグ[true/false]
  M_ITALIC = false                         # 斜め文字フラグ[true/false]
  M_SHADOW = false                         # 影文字フラグ[true/false]
  M_ROUND = false                          # 囲み文字フラグ[true/false]
  M_NAME = ["Georgia","ＭＳ ゴシック"]     # フォント名
  #==============================================================================
  
  #==============================================================================
  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,IA_COLOR,IB_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,T_COLOR,B_COLOR)
  N_FONT = Copy_Font.new(N_SIZE,N_BOLD,N_ITALIC,N_SHADOW,N_ROUND,N_NAME,IA_COLOR,IB_COLOR)
  M_FONT = Copy_Font.new(M_SIZE,M_BOLD,M_ITALIC,M_SHADOW,M_ROUND,M_NAME,A_COLOR,B_COLOR)
end
#==============================================================================
# ■ Scene_Scratch
#==============================================================================
class Scene_Scratch
  include HIDE_SCRATCH
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  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_SCRATCH::BGM))
  end
  #--------------------------------------------------------------------------
  # ■ 競合対策(初期化)
  #--------------------------------------------------------------------------
  def format?
    if $game_party.scratch_data == nil
      $game_party.scratch_data = []
    end
    if $game_party.scratch_quick == nil
      $game_party.scratch_quick = []
    end
  end
  #--------------------------------------------------------------------------
  # ■ スクラッチカードの初期化
  #--------------------------------------------------------------------------
  def game_reset?
    @scratch_step = 0
    # □ゲーム実行中フラグをOFF
    @playing = false
  end
  #--------------------------------------------------------------------------
  # ■ メイン処理
  #--------------------------------------------------------------------------
  def main
    # □タイプを取得
    t = $game_temp.scratch_type
    # □競合対策(初期化)
    format?
    # □初期化
    if $game_party.scratch_data[t] == nil
      s = HIDE_SCRATCH::PATTERN[t].size + 1
      $game_party.scratch_data[t] = [0]*s
      $game_party.scratch_data[t][0] = 1
    end
    if $game_party.scratch_quick[t] == nil
      $game_party.scratch_quick[t] = false
    end
    # □Scratch数/Hit数を取得
    @number = $game_party.scratch_data[t][0]
    # □掛け金を取得
    @coin = HIDE_SCRATCH::COIN[t]
    icon = RPG::Cache.windowskin(HIDE_SCRATCH::CURSOR)
    @max = HIDE_SCRATCH::ME_RATE_MAX[t]
    #…………………………………………………………………………………………………
    # ■文字装飾を取得
    #…………………………………………………………………………………………………
    s_font = HIDE_SCRATCH::S_FONT ; @h_font = HIDE_SCRATCH::H_FONT
    c_font = HIDE_SCRATCH::C_FONT ; @t_font = HIDE_SCRATCH::T_FONT
    @m_font = HIDE_SCRATCH::M_FONT ; @n_font = HIDE_SCRATCH::N_FONT
    @num_font = Copy_Font.new(12,true,false,false,false,"ＭＳ ゴシック",Color.new(0,0,0,200))
    @bc_font = Copy_Font.new(10,true,false,false,false,["Arial","ＭＳ ゴシック"],Color.new(0,0,0,255))
    @q_font = @t_font.dup
    @q_font.color = HIDE_SCRATCH::A_COLOR.dup
    #…………………………………………………………………………………………………
    # ■カード画像/リスト画像を取得
    #…………………………………………………………………………………………………
    @card = RPG::Cache.windowskin(HIDE_SCRATCH::CARD).dup
    name = HIDE_SCRATCH::WORD5
    x_font = @t_font.dup
    @card.draw_cache_text(108,254,0,32,name,0,x_font)
    # □カードリスト画像を取得
    @list_back = RPG::Cache.windowskin(HIDE_SCRATCH::LIST).dup
    @list_back.draw_cache_text(32,233,160,0,HIDE_SCRATCH::WORD2,0,@t_font)
    # □LIST文字を描画
    @list_back.draw_cache_text(28,16,160,0,HIDE_SCRATCH::WORD4,0,@m_font)
    @list_back.draw_cache_text(32,375,160,0,HIDE_SCRATCH::WORD1,0,@t_font)
    # □点滅画像を取得
    @flash = RPG::Cache.windowskin(HIDE_SCRATCH::HIT).dup
    #…………………………………………………………………………………………………
    # ■カード/リスト色を取得
    #…………………………………………………………………………………………………
    hue = HIDE_SCRATCH::HUE[t]
    @card.hue_change(hue)
    @list_back.hue_change(hue)
    @flash.hue_change(hue)
    # □点滅色を取得
    @flash_color = @flash.get_pixel(@flash.width/2,@flash.height/2)
    # □バーコード画像の取得
    @code = []
    for i in 0...6
      code = Bitmap.new(9,20)
      code.blt(0,0,@card,Rect.new(33+i*9,265,9,20))
      @code.push(code)
    end
    @card.fill_rect(Rect.new(33,265,54,20),Color.new(0,0,0,0))
    #…………………………………………………………………………………………………
    # ■スクラッチカードウィンドウ背景を作成
    #…………………………………………………………………………………………………
    @scratch_window_back = Picture_Blink_Cursor.new(RPG::Cache.windowskin(HIDE_SCRATCH::BACK))
    #…………………………………………………………………………………………………
    # ■タイトルロゴを描画
    #…………………………………………………………………………………………………
    r_font = Copy_Font.new(28,true,false,false,false,["Georgia","ＭＳ ゴシック"],HIDE_SCRATCH::S_COLOR)
    text = HIDE_SCRATCH::WORD5
    x = 32 + 4
    @scratch_window_back.draw_text(x,8,240,0,text,1,r_font)
    w_font = Copy_Font.new(14,true,false,false,false,["Arial","ＭＳ ゴシック"],Color.new(255,255,255,255))
    text = "Carry out the scratch of the card."
    @scratch_window_back.draw_text(x,28,240,0,text,1,w_font)
    text = "An item can be got if"
    @scratch_window_back.draw_text(x,28+16,240,0,text,1,w_font)
    text = "three patterns gather."
    @scratch_window_back.draw_text(x,28+16*2,240,0,text,1,w_font)
    #…………………………………………………………………………………………………
    # ■カード下を描画
    #…………………………………………………………………………………………………
    @scratch_window_under = Picture_Blink_Cursor.new(Bitmap.new(640,480))
    #…………………………………………………………………………………………………
    # ■当たり演出ウィンドウを作成
    #…………………………………………………………………………………………………
    @scratch_window_hit = Picture_Blink_Cursor.new
    @scratch_window_hit.start
    #…………………………………………………………………………………………………
    # ■景品ウィンドウを作成
    #…………………………………………………………………………………………………
    @scratch_window_item = Picture_Blink_Cursor.new(Bitmap.new(640,480))
    #…………………………………………………………………………………………………
    # ■景品解説ウィンドウを作成
    #…………………………………………………………………………………………………
    h = $game_party.scratch_data[t].size - 1
    @scratch_window_check = Picture_Blink_Cursor.new(323,55,24,24,20,11,h,5)
    @scratch_window_check.cursor_x = 24
    @scratch_window_check.draw_color_cursor(@flash_color.dup)
    @scratch_window_check.cz = 2
    @scratch_window_check.draw_icon_cursor(icon,100)
    @help_data = [] ; @name_data = [""]
    @helps = [""]*h
    # □ヘルプウィンドウの関連付け
    @scratch_window_check.make_helps(16+4,356+50,@helps,@h_font)
    #…………………………………………………………………………………………………
    # ■景品名ウィンドウを作成
    #…………………………………………………………………………………………………
    @scratch_window_name = Picture_Blink_Cursor.new(0,0,1,1,0,0,21,1)
    @scratch_window_name.start(100+5)
    #…………………………………………………………………………………………………
    # ■景品リストウィンドウを作成
    #…………………………………………………………………………………………………
    @scratch_list = Picture_Blink_Cursor.new(Bitmap.new(640,480))
    @scratch_list.z = 100
    #…………………………………………………………………………………………………
    # ■カードアイコンウィンドウを作成
    #…………………………………………………………………………………………………
    @scratch_window_icon = Picture_Blink_Cursor.new(Bitmap.new(640,480))
    @scratch_window_icon.z = 100
    #…………………………………………………………………………………………………
    # ■カード上ウィンドウを作成
    #…………………………………………………………………………………………………
    @scratch_window_top = Picture_Blink_Cursor.new(Bitmap.new(640,480))
    @scratch_window_top.z = 100
    #…………………………………………………………………………………………………
    # ■スクラッチウィンドウを作成
    #…………………………………………………………………………………………………
    @scratch_window = Picture_Blink_Cursor.new(Bitmap.new(640,480))
    @scratch_window.z = 100
    #…………………………………………………………………………………………………
    # ■ナンバーウィンドウを作成
    #…………………………………………………………………………………………………
    @scratch_window_number = Picture_Blink_Cursor.new(Bitmap.new(640,480))
    @scratch_window_number.z = 100
    #…………………………………………………………………………………………………
    # ■Quick描画ウィンドウを作成
    #…………………………………………………………………………………………………
    @scratch_top = Picture_Blink_Cursor.new(Bitmap.new(640,480))
    @scratch_top.z = 100
    #…………………………………………………………………………………………………
    # ■コイン数値ウィンドウを作成
    #…………………………………………………………………………………………………
    @coin_window = Window_digits_number.new(488,353,100,$game_party.coin,10,10,c_font)
    #…………………………………………………………………………………………………
    # ■ゲーム開始選択ウィンドウを作成
    #…………………………………………………………………………………………………
    select = RPG::Cache.windowskin(HIDE_SCRATCH::SELECT)
    com = HIDE_SCRATCH::GAME_COMS
    helps = HIDE_SCRATCH::GAME_HELPS
    @game_select_window = Picture_Blink_Cursor.new(16,436,96,32,2,0,helps.size,helps.size)
    @game_select_window.draw_cursor(select,com,s_font,icon)
    @game_select_window.start
    # □ヘルプウィンドウの関連付け
    @game_select_window.make_helps(16+4,406,helps,@h_font)
    #…………………………………………………………………………………………………
    # ■カードを作成
    #…………………………………………………………………………………………………
    draw_card
    #…………………………………………………………………………………………………
    # ■景品リストを作成
    #…………………………………………………………………………………………………
    item_list
    #…………………………………………………………………………………………………
    # ■景品リスト詳細名を描画
    #…………………………………………………………………………………………………
    @scratch_window_name.make_helps(320,260,@name_data,@n_font)
    #…………………………………………………………………………………………………
    # ■簡易アニメ表示を描画
    #…………………………………………………………………………………………………
    draw_quick(t)
    #…………………………………………………………………………………………………
    # ■選択肢の文字色を初期化
    #…………………………………………………………………………………………………
    exchange_colors?
    
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @scratch_window_back.dispose
    @scratch_window_hit.dispose
    @scratch_window_under.dispose
    @scratch_window_top.dispose
    @scratch_window_icon.dispose
    @scratch_window_number.dispose
    @scratch_window.dispose
    @scratch_list.dispose
    @scratch_window_item.dispose
    @game_select_window.dispose
    @scratch_window_check.dispose
    @scratch_window_name.dispose
    @coin_window.dispose
    @scratch_top.dispose
  end
  #--------------------------------------------------------------------------
  # ■ 景品リストの更新
  #--------------------------------------------------------------------------
  def item_list_updata
    t = $game_temp.scratch_type
    pattern = HIDE_SCRATCH::PATTERN[t]
    for i in 0...pattern.size
      for n in @items
        if n == pattern[i]
          num = $game_party.scratch_data[t][i+1]
          $game_party.scratch_data[t][i+1] = [[num + 1,0].max,999].min
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ■ 景品リストを描画
  #--------------------------------------------------------------------------
  def item_list
    # □景品リストを初期化
    @scratch_list.bitmap.clear
    # □数字画像を取得
    image = RPG::Cache.windowskin(HIDE_SCRATCH::NUMBER)
    pattern = HIDE_SCRATCH::PATTERN[$game_temp.scratch_type]
    x = 303 ; y = 44 ; id = {}
    data = $game_party.scratch_data[$game_temp.scratch_type]
    for i in 0...pattern.size
      px = x+(i%5)*64 ; py = y+(i/5)*46
      icons = icon?(pattern[i][0])
      # □ヘルプを取得
      if @help_data[i] == nil
        @help_data[i] = icons[4]
      end
      if @name_data[i+1] == nil
        @name_data[i+1] = icons[3]
      end
      # □Hit数を描画
      @scratch_list.bitmap.draw_numbers(px+1,py+43,60,8,8,image,data[i+1],1,0,-1,2,0,0,[13])
      # □アイコンを描画
      if icons[0] != nil && icons[0] != ""
        @scratch_list.bitmap.blt(px+20,py+11,icons[0],Rect.new(0,0,24,24))
      end
      # □/金額/コイン数を描画
      if icons[2]
        v = pattern[i][1] ; d = 2 ; c = 1
      else
        v = icons[1] ; d = 0 ; c = 9
      end
      if v == nil
        return
      end
      @scratch_list.bitmap.draw_numbers(px+1,py+35,60,8,8,image,v,1,c,-1,d)
    end
  end
  #--------------------------------------------------------------------------
  # ■ 獲得景品を描画
  #--------------------------------------------------------------------------
  def draw_get_item(names)
    @scratch_window_item.bitmap.clear
    for i in 0...names.size
      @scratch_window_item.draw_text(324,260+32*i,320,32,names[i],0,@n_font)
    end
  end
  #--------------------------------------------------------------------------
  # ■ 簡易アニメ表示を描画
  #--------------------------------------------------------------------------
  def draw_quick(t)
    w0 = HIDE_SCRATCH::DEBUG ? "Debug_Q" : HIDE_SCRATCH::WORD3
    w1 = HIDE_SCRATCH::DEBUG ? "Debug" : ""
    cw = @q_font.text_width(w0)
    ch = @q_font.text_height(w0)
    x = 616 ; y = 12
    word = $game_party.scratch_quick[t] ? w0 : w1
    @scratch_top.draw_text(x-cw,y,cw,ch,word,0,@q_font)
  end
  #--------------------------------------------------------------------------
  # ■ 選択肢の色更新
  #--------------------------------------------------------------------------
  def exchange_colors?
    if $game_party.coin < @coin or @playing
      @game_select_window.exchange[0] = true
    else
      @game_select_window.exchange[0] = false
    end
    @game_select_window.exchange[1] = @playing == false
    @game_select_window.exchange[4] = @playing
    @game_select_window.refresh
  end
  #--------------------------------------------------------------------------
  # ■ スクラッチを作成
  #--------------------------------------------------------------------------
  def draw_scratch
    scratch = RPG::Cache.windowskin(HIDE_SCRATCH::SCRATCH)
    @scratch_window.bitmap.clear
    x = 60 ; y = 144
    id = {} ; color = 0
    for i in 0...9
      # □スクラッチを描画
      scratch_start(i,0)
    end
  end
  #--------------------------------------------------------------------------
  # ■ スクラッチを描画
  #--------------------------------------------------------------------------
  def scratch_start(i,n = 0)
    scratch = RPG::Cache.windowskin(HIDE_SCRATCH::SCRATCH)
    x = 60 ; y = 144
    px = x+(i/3)*68 ; py = y+(i%3)*64
    @scratch_window.bitmap.fill_rect(Rect.new(px,py,64,64),Color.new(0,0,0,0))
    # □スクラッチを描画
    @scratch_window.bitmap.blt(px,py,scratch,Rect.new(n*64,0,64,64))
  end
  #--------------------------------------------------------------------------
  # ■ カードを作成
  #--------------------------------------------------------------------------
  def draw_card
    # □景品表示を初期化
    @scratch_window_item.bitmap.clear
    # □スクラッチを作成
    draw_scratch
    # □カードを作成
    @scratch_window_under.bitmap.clear
    w = @list_back.width ; h = @list_back.height
    @scratch_window_under.bitmap.blt(288,4,@list_back,Rect.new(0,0,w,h))
    @scratch_window_under.draw_picture(@card,32,80,Rect.new(0,0,256,320))
    # □数字画像を取得
    image = RPG::Cache.windowskin(HIDE_SCRATCH::NUMBER)
    @scratch_window_top.bitmap.clear
    @scratch_window_icon.bitmap.clear
    # □景品抽選
    @choice = choice_item?
    x = 60 ; y = 144
    id = {} ; color = 0
    @data = []
    for i in 0...9
      px = x+(i/3)*68 ; py = y+(i%3)*64
      icons = icon?(@choice[i][0])
      # □景品情報の取得
      @data.push(icons[3])
      # □ｃJラーの取得
      if id[@choice[i][0]] == nil
        id[@choice[i][0]] = color
        color += 1
      end
      c = id[@choice[i][0]]
      # □アイコンを描画
      if icons[0] != nil && icons[0] != ""
        @scratch_window_icon.bitmap.blt(px+20,py+15,icons[0],Rect.new(0,0,24,24))
      end
      # □/金額/コイン数を描画
      if icons[2]
        v = @choice[i][1] ; d = 2
      else
        v = icons[1] ; d = 0
      end
      @scratch_window_top.bitmap.draw_numbers(px+1,py+39,60,8,8,image,v,1,c,-1,d)
    end
    # □バーコードナンバーを描画
    @scratch_window_number.bitmap.clear
    r1 = sprintf("%02d",rand(99))
    r2 = sprintf("%06d",rand(999999))
    r3 = sprintf("%05d",rand(99999))
    rand = r1 + "  " + r2 + r3
    @scratch_window_number.draw_text(64,353,160,32,rand,0,@bc_font)
    # □バーコード画像を描画
    shuffle = []
    codes = [0,1,2,3,4,5]
    while 6 != shuffle.size
      n = codes[rand(codes.size)]
      shuffle.push(n)
      codes.delete(n)
    end
    for n in 0...@code.size
      code = @code[shuffle[n]]
      @scratch_window_number.bitmap.blt(65+n*9,345,code,Rect.new(0,0,9,20))
    end
    t = $game_temp.scratch_type
    # □カード価格を描画
    pic = RPG::Cache.windowskin(HIDE_SCRATCH::BET)
    @scratch_window_number.bitmap.blt(136,351,pic,Rect.new(7*32,24,32,24))
    coin = HIDE_SCRATCH::COIN[t].to_s
    @scratch_window_number.draw_text(154,352,30,32,coin,0,@num_font)
    # □ナンバーを描画
    num = "" + sprintf("%07d",$game_party.scratch_data[t][0])
    @scratch_window_number.draw_text(198,352,160,32,num,0,@num_font)
    # □カード名を描画
    name = HIDE_SCRATCH::NAME[t]
    @scratch_window_number.draw_text(52,106,216,32,name,1,@m_font)
  end
  #--------------------------------------------------------------------------
  # ■ 景品抽選
  #--------------------------------------------------------------------------
  def choice_item?
    pattern = HIDE_SCRATCH::PATTERN[$game_temp.scratch_type]
    # □優先度の数だけ追加
    items = []
    for i in 0...pattern.size
      num = pattern[i][2]
      for n in 0...num
        items.push(pattern[i])
      end
    end
    # □ランダムに景品を取得
    data = []
    while 9 != data.size
      n = items[rand(items.size)]
      data.push(n)
    end
    return data
  end
  #--------------------------------------------------------------------------
  # ■ 景品のグループ化
  #--------------------------------------------------------------------------
  def group?(data)
    items = data.uniq
    group = [0]*items.size
    for i in 0...items.size
      for z in data
        if z == items[i] && z != 0
          group[i] += 1
        end
      end
    end
    return group
  end
  #--------------------------------------------------------------------------
  # ■ アイコンの取得
  #--------------------------------------------------------------------------
  def icon?(data,num = true,word = "")
    data.scan(/([iwagcsm])([0-9]+)/)
    type = $1 ; id = $2
    case type
    when "i"
      name = $data_items[id.to_i].name
      word = name
      icon_name = $data_items[id.to_i].icon_name
      help = $data_items[id.to_i].description
    when "w"
      name = $data_weapons[id.to_i].name
      word = name
      icon_name = $data_weapons[id.to_i].icon_name
      help = $data_weapons[id.to_i].description
    when "a"
      name = $data_armors[id.to_i].name
      word = name
      icon_name = $data_armors[id.to_i].icon_name
      help = $data_armors[id.to_i].description
    when "g" # お金
      name = id.to_i ; num = false
      icon_name = HIDE_SCRATCH::GOLD_ICON
      word = id.to_s + $data_system.words.gold
      help = HIDE_SCRATCH::GOLD_HELP
    when "c" # コイン
      name = id.to_i ; num = false
      icon_name = HIDE_SCRATCH::COIN_ICON
      word = id.to_s + HIDE_SCRATCH::WORD6
      help = HIDE_SCRATCH::COIN_HELP
    end
    icon = RPG::Cache.icon(icon_name)
    text = "\\icon[" + icon_name + "]" + word
    return [icon,name,num,text,help]
  end
  #--------------------------------------------------------------------------
  # ■ 点滅を描画
  #--------------------------------------------------------------------------
  def draw_flash
    x = 60 ; y = 144
    for i in @hits
      px = x+(i/3)*68 ; py = y+(i%3)*64
      # □カード点滅を描画
      @scratch_window_hit.bitmap.blt(px,py,@flash,Rect.new(0,0,64,64))
    end
    # □リスト点滅を描画
    x = 272+16 ; y = 44
    t = $game_temp.scratch_type
    pattern = HIDE_SCRATCH::PATTERN[t]
    items = @items.uniq
    for i in 0...pattern.size
      px = x+(i%5)*64 ; py = y+(i/5)*46
      for n in items
        if n == pattern[i]
          @scratch_window_hit.bitmap.fill_rect(Rect.new(px+35,py+11,24,24),@flash_color)
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ■ 景品の獲得
  #--------------------------------------------------------------------------
  def gain_treasures?
    for i in 0...@items.size
      treasure = @items[i][0]
      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
  end
  #--------------------------------------------------------------------------
  # ■ 当たりの処理
  #--------------------------------------------------------------------------
  def scratch_hit
    time_up = HIDE_SCRATCH::DEBUG ? 0 : 1
    #…………………………………………………………………………………………………
    # ■当たりの場合
    #…………………………………………………………………………………………………
    if @hits.size >= 3
      # □景品の獲得
      gain_treasures?
      unless HIDE_SCRATCH::DEBUG
        # □大当たりの場合
        if @max_hit
          $game_system.me_play(RPG::AudioFile.new(HIDE_SCRATCH::HIT_ME_MAX))
          # □次のゲーム開始まで待つ(MEの演奏時間)
          time_up = HIDE_SCRATCH::ME_MAX_TIME
        else
          $game_system.me_play(RPG::AudioFile.new(HIDE_SCRATCH::HIT_ME))
          # □次のゲーム開始まで待つ(MEの演奏時間)
          time_up = HIDE_SCRATCH::ME_TIME
        end
      end
    end
    #…………………………………………………………………………………………………
    # ■ 次の開始まで待つ
    #…………………………………………………………………………………………………
    time = 0
    @scratch_window_hit.blink_active = true
    @scratch_window_hit.blink_start
    while @scratch_window_hit.blink_active
      # □ゲーム画面を更新
      coin_update? ; Graphics.update
      # □回転数値の更新(所持コイン)
      @coin_window.update($game_party.coin)
      # □当りの演出を更新
      if time < time_up
        if @scratch_window_hit.count?
          time += 1
        end
        @scratch_window_hit.update
      else
        @scratch_window_hit.blink_end
      end
    end
    @scratch_step = 5
  end
  #--------------------------------------------------------------------------
  # ■ 初期化
  #--------------------------------------------------------------------------
  def scratch_reset
    @scratch_step = 0
    @playing = false
    @game_select_window.index = 0
    # □選択肢の文字色を初期化
    exchange_colors?
  end
  #--------------------------------------------------------------------------
  # ■ スクラッチの待ち時間
  #--------------------------------------------------------------------------
  def scratch?
    # □待ち時間
    while @time > 0
      # ゲーム画面を更新
      coin_update? ; Graphics.update
      @time -= 1
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ■ 更新
  #--------------------------------------------------------------------------
  def coin_update?
    # □ 回転数値の更新(所持コイン)
    @coin_window.update($game_party.coin)
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新
  #--------------------------------------------------------------------------
  def update
    #…………………………………………………………………………………………………
    # ■ 景品リスト名の更新
    #…………………………………………………………………………………………………
    if @scratch_window_check.active
      @scratch_window_name.index = @scratch_window_check.index + 1
    else
      @scratch_window_name.index = 0
    end
    #…………………………………………………………………………………………………
    # ■ 回転数値の更新(所持コイン)
    #…………………………………………………………………………………………………
    coin_update?
    #…………………………………………………………………………………………………
    # ■ ゲーム開始ウィンドウの更新
    #…………………………………………………………………………………………………
    if @game_select_window.active
      @game_select_window.update
      update_select
      return
    end
    #…………………………………………………………………………………………………
    # ■ 景品リストウィンドウの更新
    #…………………………………………………………………………………………………
    if @scratch_window_check.active
      @scratch_window_check.update
      update_check
      return
    end
    #…………………………………………………………………………………………………
    # ■ ゲームの流れ
    #…………………………………………………………………………………………………
    case @scratch_step
    when 1 #□個別にスクラッチ
      for i in 0...9
        for n in 0...9
          @time = HIDE_SCRATCH::DEBUG ? 0 : HIDE_SCRATCH::SPEED
          # □スクラッチSEを演奏
          unless HIDE_SCRATCH::DEBUG
            $game_system.se_play(RPG::AudioFile.new(HIDE_SCRATCH::SCRATCH_SE))
          end
          if scratch?
            scratch_start(@shuffle[i],n+1)
          end
        end
      end
      @scratch_step = 3
      return
    when 2 #□全てスクラッチ
      for i in 0...9
        @time = HIDE_SCRATCH::DEBUG ? 0 : HIDE_SCRATCH::ALL_SPEED
        # □スクラッチSEを演奏
        unless HIDE_SCRATCH::DEBUG
          $game_system.se_play(RPG::AudioFile.new(HIDE_SCRATCH::SCRATCH_SE))
        end
        if scratch?
          for n in 0...9
            scratch_start(@shuffle[n],i+1)
          end
        end
      end
      @time = 6
      @scratch_step = 3
      return
    when 3 #□当たりの処理
      data = @data.uniq
      @group = group?(@data.dup)
      choice = @choice.uniq
      names = [] ; @items = [] ; @hits = []
      for n in 0...@group.size
        if @group[n] >= 3 && @group[n] < 6
          names.push(data[n])
          @items.push(choice[n])
        elsif @group[n] >= 6 && @group[n] < 9
          names.push(data[n]) ; names.push(data[n])
          @items.push(choice[n]) ; @items.push(choice[n])
        elsif @group[n] >= 9
          names.push(data[n]) ; names.push(data[n]) ; names.push(data[n])
          @items.push(choice[n]) ; @items.push(choice[n]) ; @items.push(choice[n])
        end
      end
      # □Hit箇所を取得
      @max_hit = false
      for d in 0...@choice.size
        if @items.include?(@choice[d])
          @hits.push(d)
          if @max.include?(@choice[d])
            @max_hit = true
          end
        end
      end
      # □景品の描画
      draw_get_item(names)
      if names.size > 0
        # □点滅を描画
        draw_flash
        # □景品リストを更新
        item_list_updata
        item_list
        # □待ち時間
        while @time > 0
          # ゲーム画面を更新
          coin_update? ; Graphics.update
          @time -= 1
        end
        @scratch_step = 4
      else
        @scratch_step = 5
      end
      return
    when 4 #□当たりの処理
      scratch_hit
      return
    when 5
      @time = 6
      @scratch_step = 6
      return
    when 6 #□初期化
      # □待ち時間
      while @time > 0
        # ゲーム画面を更新
        coin_update? ; Graphics.update
        @time -= 1
      end
      @game_select_window.active = true
      # □初期化
      scratch_reset
      return
    end
    return
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新(景品リスト)
  #--------------------------------------------------------------------------
  def update_check
    #…………………………………………………………………………………………………
    # ■ ヘルプを描画(高速起動)
    #…………………………………………………………………………………………………
    if @helps[@scratch_window_check.index] == ""
      i = @scratch_window_check.index
      @helps[i] = @help_data[i]
      # □ヘルプを描画
      @scratch_window_check.draw_help(i,@helps)
    end
    #…………………………………………………………………………………………………
    # ■ B ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::B)
      # □キャンセルSEを演奏
      $game_system.se_play(RPG::AudioFile.new(HIDE_SCRATCH::CANCEL_SE))
      @game_select_window.active = true
      @scratch_window_check.visible = false
      @scratch_window_check.active = false
      @scratch_window_item.visible = true
    end
  end
  #--------------------------------------------------------------------------
  # ■ フレーム更新(ゲーム開始)
  #--------------------------------------------------------------------------
  def update_select
    #…………………………………………………………………………………………………
    # ■ A ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::A) && HIDE_SCRATCH::DEBUG_KEY
      p hits = @hits + ["■Hit箇所"]
      p items = @items + ["■Hitアイテム"]
      p group = @group + ["■Hit箇所グループ化"]
      @game_select_window.active = false
      @playing = true
      @scratch_step = 4      
      return
    end
    #…………………………………………………………………………………………………
    # ■ C ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::C)
      case @game_select_window.index
      when 0 #□カード購入
        if $game_party.coin >= @coin && @playing == false
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_SCRATCH::DECISION_SE))
          # □コインを減らす(賭け金)
          $game_party.lose_coin(@coin)
          @playing = true
          t = $game_temp.scratch_type
          # □カードを描画
          if @number != $game_party.scratch_data[t][0]
            draw_card
          end
          # □カードナンバーの更新
          $game_party.scratch_data[t][0] += 1
          if $game_party.scratch_data[t][0] > 9999999
            $game_party.scratch_data[t][0] = 1
          end
          # □選択肢の文字色を初期化
          exchange_colors?
          @game_select_window.index = 1
        # □コインが足りない/選択無し場合
        else
          # □ブザー SE を演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_SCRATCH::BUZZER_SE))
          return
        end
      when 1 #□スクラッチ開始
        if @playing
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_SCRATCH::DECISION_SE))
          @game_select_window.active = false
          t = $game_temp.scratch_type
          # □スクラッチをランダムに選択
          @shuffle = []
          codes = [0,1,2,3,4,5,6,7,8]
          while 9 != @shuffle.size
            n = codes[rand(codes.size)]
            @shuffle.push(n)
            codes.delete(n)
          end
          # □全てスクラッチ開始(簡易アニメ)
          if $game_party.scratch_quick[t]
            @scratch_step = 2
          else
            @scratch_step = 1
          end
        else
          # □ブザー SE を演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_SCRATCH::BUZZER_SE))
          return
        end
      when 2 #□アニメの切り替え
        # □決定SEを演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_SCRATCH::DECISION_SE))
        t = $game_temp.scratch_type
        $game_party.scratch_quick[t] ^= true
        draw_quick(t)
      when 3 #□景品リストを参照
        # □決定SEを演奏
        $game_system.se_play(RPG::AudioFile.new(HIDE_SCRATCH::DECISION_SE))
        @game_select_window.active = false
        @scratch_window_check.start(100)
        @scratch_window_name.index = @scratch_window_check.index + 1
        @scratch_window_item.visible = false
        return
      when 4 #□ゲーム終了
        if @playing
          # □ブザー SE を演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_SCRATCH::BUZZER_SE))
        else
          # □決定SEを演奏
          $game_system.se_play(RPG::AudioFile.new(HIDE_SCRATCH::DECISION_SE))
          scratch_end
        end
      end
      return
    end
    #…………………………………………………………………………………………………
    # ■ B ボタンが押された場合
    #…………………………………………………………………………………………………
    if Input.trigger?(Input::B) && @playing == false
      # □キャンセルSEを演奏
      $game_system.se_play(RPG::AudioFile.new(HIDE_SCRATCH::CANCEL_SE))
      scratch_end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ■ ゲームの終了
  #--------------------------------------------------------------------------
  def scratch_end
    # □ スクラッチカード開始前の BGM に戻す
    $game_system.bgm_play($game_temp.map_bgm)
    # マップ画面に切り替え
    $scene = Scene_Map.new
    return
  end
end