示例#1
0
文件: AI.cs 项目: Blecki/coerceo
        public static float ScoreBoard(Board PreviousBoard, Board Board)
        {
            var previousPlayer = (byte)~Board.Header.WhoseTurnNext;

            var r = 0.0f;

            // Taking tiles is good.
            r += 50000 * (Board.CountOfHeldTiles(previousPlayer) - PreviousBoard.CountOfHeldTiles(previousPlayer));

            // Taking pieces is also good.
            r += 50000 * (PreviousBoard.CountOfPieces(Board.Header.WhoseTurnNext) - Board.CountOfPieces(Board.Header.WhoseTurnNext));

            var tierPieceCount = new int[2, ControlTiers.Length];

            // Encourage board development.
            for (int i = 0; i < ControlTiers.Length; ++i)
            {
                tierPieceCount[0, i] = 0;
                tierPieceCount[1, i] = 0;
                foreach (var triangle in ControlTiers[i])
                {
                    if (triangle.Triangle % 2 != previousPlayer)
                    {
                        tierPieceCount[0, i] += PreviousBoard.GetTriangle(triangle);
                        tierPieceCount[1, i] += Board.GetTriangle(triangle);
                    }
                }
            }

            for (int i = 0; i < ControlTiers.Length - 1; ++i)
            {
                var tierDifference = tierPieceCount[1, i] - tierPieceCount[0, i];
                r += TierValue[i] * tierDifference;
            }

            return r;
        }