private static void DebugInfo(PositionManager positions, IBoard board, PatternMatcher matcher) { var matches1 = matcher.MatchPatterns(board, positions.Lines).ToList(); PatternBoard pBoard = board as PatternBoard; if (pBoard != null) { var matches2 = pBoard.Matches.Get().ToList(); var any = matches1.Except(matches2).ToList(); bool same = (matches1.Count() == matches2.Count()) && !any.Any(); Debug.Assert(same); } var groupedMatches = matches1.GroupBy(m => m.Pattern.PatternType, m => m); foreach (var match in groupedMatches) { var pos = string.Join(",", match.Select(l => $"{l.Pattern.Player}:({l.Positions.First().Row},{l.Positions.First().Col})")); if (!string.IsNullOrWhiteSpace(pos)) { Debug.WriteLine($"Pattern {match.Key} at {pos}."); } } }
private IEnumerable <IEnumerable <Position> > GetWinLines(IBoard board) { PatternBoard patternBoard = board as PatternBoard; if (patternBoard == null) { var patterns = this.patternRepository.Get(PatternType.Five); return(this.matcher.MatchPatterns(board, this.positions.Lines, patterns).Select(m => m.Positions)); } return(patternBoard.Matches.Get(PatternType.Five).Select(m => m.Positions)); }
public double GetScore(IBoard board, PieceType player) { MatchRepository matchRepository; PatternBoard patternBoard = board as PatternBoard; if (patternBoard != null) { matchRepository = patternBoard.Matches; } else { var matches = this.matcher.MatchPatterns(board, positions.Lines); matchRepository = new MatchRepository(); foreach (var match in matches) { matchRepository.Add(match.Pattern.Player, match.Pattern.PatternType, match); } } double myScore = GetScore(player, matchRepository); double oScore = GetScore(player.GetOther(), matchRepository); var nextPlayer = board.Count % 2 == 0 ? PieceType.P1 : PieceType.P2; bool isMyTurn = player == nextPlayer; if (isMyTurn) { myScore *= 1.2; } else { oScore *= 1.2; } return(myScore - oScore); }