public int EvalBoard(Board board) { int Combo = 0; int TempCombo; do { var ClearedPoints = Check3ConnectedPoints(board); var ConnectedLabelsMap = ConnComponent.Search(board.Get2DBeads(), board.BeadTypesCount); var ClearedLabelId = ClearedPoints.Select(p => ConnectedLabelsMap[p.X, p.Y]); TempCombo = ClearedLabelId.Distinct().Count(); foreach (var p in ClearedPoints) { board.RemoveBead(p.X, p.Y); } board.Drop(); Combo += TempCombo; } while (TempCombo > 0); return(Combo * Score); }
public int EvalBoard(Board board) { int ScoreResult = 0; //board = board.Clone(); bool Continue = true; do { var ClearedPoints = Check3ConnectedPoints(board); var ConnectionMap = ConnComponent.Search(board.Get2DBeads(), board.BeadTypesCount); var ClearedLabelId = ClearedPoints.Select(p => ConnectionMap[p.X, p.Y]).Distinct(); if (board.HasWeight) { var ClearedLabel_BeadType_Dict = ClearedPoints.Select( p => new { Label = ConnectionMap[p.X, p.Y], BeadType = board.GetBead(p.X, p.Y) } ).GroupBy(x => x.Label).ToDictionary(g => g.Key, g => g.First().BeadType); foreach (var label in ClearedLabelId) { double weight = board.Weights[ClearedLabel_BeadType_Dict[label]]; ScoreResult += (int)(weight * PerScore); } } else { ScoreResult += ClearedLabelId.Count() * PerScore; } foreach (var p in ClearedPoints) { board.RemoveBead(p.X, p.Y); } board.Drop(); Continue = ClearedPoints.Any(); } while (Continue); return(ScoreResult); }