private bool isAHexagon(MatchContext context) { var points = context.Coordinates.ToList(); return points[0].Position == points[2].Position && points[4].Position == (points[2].Position + (points[4].Level - points[2].Level)) && points[3].Position == points[5].Position; }
private bool isATriangle(MatchContext context) { var points = context.Coordinates.ToList(); return (points[0].Position == points[1].Position && points[1].Level == points[2].Level) || (points[1].Position == points[2].Position && points[0].Level == points[1].Level); }
protected override bool MatchesShape(MatchContext context) { return hasPointCount(context, 4) && hasParallelSidesOfTheSameSize(context); }
private bool hasParallelSidesOfTheSameSize(MatchContext context) { var points = context.Coordinates.ToList(); return points[1].Position - points[0].Position == points[3].Position - points[2].Position || points[2].Level - points[0].Level == points[3].Level - points[1].Level; }
protected override bool MatchesShape(MatchContext context) { return hasPointCount(context, 6) && isAHexagon(context); }
protected abstract bool MatchesShape(MatchContext context);
protected bool hasPointCount(MatchContext context, int count) { return context.Coordinates.Count() == count; }
protected override bool MatchesShape(MatchContext context) { return hasPointCount(context, 3) && isATriangle(context); }