public MoveList filterMovesThatBlockAttack(MoveList moves, Location blockedAttack) { if (moves.Count == 0) { return(moves); } MoveList filtered = new MoveList(); foreach (Move move in moves) { GameBoard copy = this.Copy(); copy.movePiece(move); IList <AbstractPiece> attackers = copy.getAttackers(moves[0].startLocation, getPiece(moves[0].startLocation).color); bool allowsAttack = false; foreach (AbstractPiece attacker in attackers) { MoveList attackerMoves = copy.getMoves(attacker); if (attackerMoves.ContainsAttacked(blockedAttack)) { allowsAttack = true; break; } } if (!allowsAttack) { filtered.Add(move); } } return(filtered); }