Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }