public static List<Move> ForcedMoves(List<Play> legal_move_sequences)
{
List<Move> forced_moves = new List<Move>();
if (legal_move_sequences.Count == 0)
return forced_moves;
int i = 0;
bool go = true;
// Since LegalMoves() computes in terms of simple moves, every legal_move_sequence should have the same number of simple moves.
for (i = 0; i < legal_move_sequences[0].Count && go; i++)
{
int from = legal_move_sequences[0][i].From;
int to = legal_move_sequences[0][i].To;
foreach (Play move_sequence in legal_move_sequences)
{
if (move_sequence[i].From != from ||
move_sequence[i].To != to)
{
go = false;
break;
}
}
if (go)
forced_moves.Add(legal_move_sequences[0][i]);
}
return forced_moves;
}