//============================================================================
//機能：鍵盤判定(鍵盤番号)
//1個目の引数・・・0〜1　0:左、1:右
//============================================================================
*key_judge  //(key_num)
    //もし、鍵盤番号が0ならば
    if(key_num = 0){
        //それ=ド鍵盤→X
        x_set = left_key_x
    }
    else{
        x_set = right_key_x
    }

    return

//============================================================================
//機能：一致処理(キー番号、押下フラグ)  
//1個目の引数・・・0〜1　0:左、1:右
//2個目の引数・・・0、1　1・・・押下時、0・・・ボタン離し時
//============================================================================
*match_process  //(key_num , on_flg)

    //Iで0からビート最大数まで繰り返す
    repeat MAX_BEAT
	
		onexit *exit
		
    	//もし、ビート再生済みフラグ[I]=1ならば
        if(beat_finish_reproduction_flg.cnt = 1){

            gosub *key_judge

    		//もし、ビート[I]→Xが鍵盤判定(キー番号)ならば
            if(beat_x.cnt = x_set){

                //早すぎ失敗
                //もし、(((HEIGHT - キー高さ*3) - 20) <= ビート[I]→Y )かつ(ビート[I]→Y < ((HEIGHT - キー高さ*3) - 10) )ならば、
                if(screenh - key_height*3- 20 <= beat_y.cnt & beat_y.cnt < screenh - key_height*3 -10){

                    //もし、押下フラグ=1ならば
                    if(on_flg = 1){

                        //20ピクセル以内に連続で来た場合、NG処理をなくす
                        //(押しっぱーでOKになる)
                        //もし、キー押しっぱーフラグが1ならば
                        if(pushing = 1){

                        	//飛ばしフラグ=1
                            continue_flg = 1
                        }
						else{
                            i=cnt

		                    //Jで0からビート最大数まで繰り返す
	                        repeat MAX_BEAT

								onexit *exit

    		                    //もし、(ビート[J]→X = ビート[I]→X)かつ(((HEIGHT - キー高さ*3) - 20) <= ビート[J]→Y)ならば
                                if(beat_x.cnt = beat_x.i & screenh - key_height*3 -20 <= beat_y.cnt){

        		                    //もし、(ビート再生済みフラグ[J] = 1)かつ(ビート[J]→可視=オン)ならば
                                    if(beat_finish_reproduction_flg.cnt = 1 & beat_y.cnt < screenh - key_height*3 + 10){

        		                      	//もし、(J=I)ならば
                                        if(cnt = i){
                                        }
                                        else{
            	    	                   	//違えば
											//飛ばしフラグ=1
                                            continue_flg = 1

    		       	    	                //抜ける/**/
                                            break
                                        }
                                    }
                                }
                            loop
                        }
                        //もし、飛ばしフラグ=0ならば
                        if(continue_flg = 0){

                 		    //一致用鍵盤判定NG(キー番号)
                            gosub *match_key_judge_ng
                            BAD=1

                            //もし、失敗フラグ[I]=0ならば
                            if(miss_flg.cnt = 0){

                                //失敗数=失敗数に1を直接足す
                                miss_num = miss_num + 1

                                //もし、スコア-1000 > 0ならば
                                if(score - 1000 > 0){

                                    //スコア=スコアから1000を直接引く
                                    score = score - 1000
                                }
                                else{
                                    //違えば
                                    //スコア=0
                                    score = 0
                                }
                                //失敗フラグ[I]=1
                                miss_flg.cnt = 1
                            }
                        }
                        //飛ばしフラグ=0
                        continue_flg = 0
                    }
                }
                else:if(screenh - key_height*3 - 10 <= beat_y.cnt & beat_y.cnt < screenh - key_height*3 + 10){
	    		    //違えば、もし、(((HEIGHT - キー高さ*3) - 10) <= ビート[I]→Y )かつ(ビート[I]→Y < ((HEIGHT - キー高さ*3) + 5) )ならば、
                    //成功
                    //もし、押下フラグ=1ならば
                    if(on_flg = 1){

                        //もし、BAD=0ならば
                        if(BAD = 0){

                            //もし、失敗フラグ[I]=0ならば
                            if(miss_flg.cnt = 0){

            				    //一致用鍵盤判定OK(キー番号)
                                gosub *match_key_judge_ok

                                //もし、ビート[I]→可視=1ならば
                                if(beat_on.cnt = 1){

                                    //一致数=一致数に1を直接足す
                                    match_num = match_num + 1

                                    //スコア=スコアに500を直接足す
                                    score = score + 500

                                    //ビート[I]→可視はオフ
                                    beat_on.cnt = 0
                                }
                            }
                        }
                    }
                }
                else:if(screenh - key_height*3 + 10 <= beat_y.cnt){
                    //流れ失敗
                    //違えば、もし(((HEIGHT - キー高さ*3) + 5) <= ビート[I]→Y )ならば

                    //もし、ビート[I]→可視=1ならば
                    if(beat_on.cnt = 1){

                        //もし、失敗フラグ[I]=0ならば
                        if(miss_flg.cnt = 0){

                  			//一致用鍵盤判定NG(キー番号)
                            gosub *match_key_judge_ng

                            //見逃し=見逃しに1を直接足す
                            lost_num = lost_num + 1

                            //もし、スコア-500 > 0ならば
                            if(score - 500 > 0){

                                //スコア=スコアから500を直接引く
                                score = score - 500
                            }
                            else{
                                //違えば
                                //スコア=0
                                score = 0
                            }
                            //失敗フラグ[I]=1
                            miss_flg.cnt = 1
                        }
                    }
                }
                else{
                    //違えば
                    BAD=0
                }
            }
        }
    loop

    return

//============================================================================
//機能：一致用鍵盤判定NG(鍵盤番号)
//1個目の引数・・・0〜1　0:左、1:右
//============================================================================
*match_key_judge_ng  //key_num

    //もし、鍵盤番号が1ならば
    if(key_num = 0){
        //一致用ド鍵盤の文字色=$FF0000    //赤
        match_left_color = 2
    }
    else{
        //違えば、もし、鍵盤番号が2ならば
        //一致用レ鍵盤の文字色=$FF0000    //赤
        match_right_color = 2
    }
    color 255,0,0
    gosub *good_or_bad_show_x_set
    mes "BAD!"

    return

//============================================================================
//機能：一致用鍵盤判定OK(鍵盤番号)
//1個目の引数・・・0〜1　0:左、1:右
//============================================================================
*match_key_judge_ok  //key_num

    //もし、鍵盤番号が1ならば
    if(key_num = 0){
        //一致用ド鍵盤の文字色=$0080FF    //青
        match_left_color = 1
    }
    else{
        //違えば、もし、鍵盤番号が2ならば
        //一致用レ鍵盤の文字色=$0080FF    //青
        match_right_color = 1
    }
    color 0,128,255
    gosub *good_or_bad_show_x_set
    mes "GOOD!"

    return

//============================================================================
//機能：GOODかBADを表示させる位置設定
//============================================================================
*good_or_bad_show_x_set

    if(x_set = left_key_x){
        pos x_set - (bgm_name_font*3) , screenh - (bgm_name_font*4)
    }
    else{
        pos x_set + (bgm_name_font*1) , screenh - (bgm_name_font*4)
    }

    return
