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); } } }