private static void Matched(int nowIndex,int numChaine,ref PuzzleData puzzleData,Func<int,int> NextIndex)
    {
        PuzzlePiece nowPiece 	= puzzleData.FindPiece(nowIndex);
        nowPiece.used 			= false;

        puzzleData.numChaine++;

        if(nowPiece.chaineID < 0)
            nowPiece.chaineID	= puzzleData.numChaine;

        for(int i = 1;i < numChaine;i++)
        {
            int nextIndex = NextIndex(i);
            if(PuzzleStateChecker.HasIndexOutOfRange(puzzleData,nextIndex) == false)
            {
                PuzzlePiece nextPiece 	= puzzleData.FindPiece(nextIndex);
                nextPiece.used 			= false;

                // Connect the chain if you are chained already
                if(nextPiece.chaineID < 0)
                    nextPiece.chaineID	= puzzleData.numChaine;
                else
                    puzzleData.SetChaine(nextPiece.chaineID,nowPiece.chaineID);
            }
        }
    }