当前位置: 首页>>代码示例>>C#>>正文


C# Board.GetAttackBoard方法代码示例

本文整理汇总了C#中Board.GetAttackBoard方法的典型用法代码示例。如果您正苦于以下问题:C# Board.GetAttackBoard方法的具体用法?C# Board.GetAttackBoard怎么用?C# Board.GetAttackBoard使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Board的用法示例。


在下文中一共展示了Board.GetAttackBoard方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: TestAttacksTwoRooks2

        public void TestAttacksTwoRooks2()
        {
            var b = new Board();
            b.State[8 + 3] = Colors.Val(Piece.Rook, Color.White);
            b.State[8*6 + 6] = Colors.Val(Piece.Rook, Color.White);

            // pawns at the attack intersections. Rooks should still
            // be able to attack those areas but not move to them
            b.State[8 + 6] = Colors.Val(Piece.Pawn, Color.White);
            b.State[8 * 6 + 3] = Colors.Val(Piece.Pawn, Color.White);

            var attacks = b.GetAttackBoard(Color.White);

            Assert.AreEqual(2, attacks.Count(x => x == 2));

            // location of rooks, has no attacks
            Assert.AreEqual(0, attacks[8+3]);
            Assert.AreEqual(0, attacks[8*6+6]);

            Assert.AreEqual(1, attacks[16+3]);
            Assert.AreEqual(1, attacks[8+5]);

            Assert.AreEqual(2, attacks[8+6]);
            Assert.AreEqual(2, attacks[8*6+3]);
        }
开发者ID:adh2050,项目名称:Chess,代码行数:25,代码来源:TestCheck.cs

示例2: TestAttacksSinglePawn

        public void TestAttacksSinglePawn()
        {
            var b = new Board();
            int pos = 12;
            b.State[pos] = Colors.Val(Piece.Pawn, Color.White);
            var attacks = b.GetAttackBoard(Color.White);

            Assert.AreEqual(2, attacks.Count(x => x != 0));
            Assert.AreEqual(1, attacks[12 + 7]);
            Assert.AreEqual(1, attacks[12 + 9]);
        }
开发者ID:adh2050,项目名称:Chess,代码行数:11,代码来源:TestCheck.cs

示例3: TestAttacksTwoRooks1

        public void TestAttacksTwoRooks1()
        {
            var b = new Board();
            b.State[8] = Colors.Val(Piece.Rook, Color.White);
            b.State[8 + 7] = Colors.Val(Piece.Rook, Color.White);
            var attacks = b.GetAttackBoard(Color.White);

            Assert.AreEqual(6, attacks.Count(x => x == 2));
            Assert.AreEqual(1, attacks[16]);
            Assert.AreEqual(1, attacks[16 + 7]);
            Assert.AreEqual(1, attacks[7*8]);
            Assert.AreEqual(1, attacks[7*8 + 7]);
            Assert.AreEqual(1, attacks[0]);
            Assert.AreEqual(1, attacks[7]);

            Assert.AreEqual(2, attacks[8 + 4]);
        }
开发者ID:adh2050,项目名称:Chess,代码行数:17,代码来源:TestCheck.cs

示例4: GetKingMoves

        private static void GetKingMoves(Board board, int square, int[] moves, ref int count)
        {
            int x = Board.X(square);
            int y = Board.Y(square);
            Color color = board.GetColor(square);
            int target = 0;

            if (y < 7)
            {
                target = square + 7;
                if (x > 0 && board.GetColor(target) != color)
                {
                    moves[count] = target;
                    count++;
                }

                target = square + 8;
                if (board.GetColor(target) != color)
                {
                    moves[count] = target;
                    count++;
                }

                target = square + 9;
                if (x < 7 && board.GetColor(target) != color)
                {
                    moves[count] = target;
                    count++;
                }
            }

            target = square - 1;
            if (x > 0 && board.GetColor(target) != color)
            {
                moves[count] = target;
                count++;
            }

            target = square + 1;
            if (x < 7 && board.GetColor(target) != color)
            {
                moves[count] = target;
                count++;
            }

            if (y > 0)
            {
                target = square - 9;
                if (x > 0 && board.GetColor(target) != color)
                {
                    moves[count] = target;
                    count++;
                }

                target = square - 8;
                if (board.GetColor(target) != color)
                {
                    moves[count] = target;
                    count++;
                }

                target = square - 7;
                if (x < 7 && board.GetColor(target) != color)
                {
                    moves[count] = target;
                    count++;
                }
            }

            // castling
            // no quares between rook and king can be occupied, the king cannot pass through any checked attacked squares
            if (color == Color.White && square == 4)
            {
                if (board.CanCastleKWhite && board.State[5] == 0 && board.State[6] == 0)
                {
                    var attacks = board.GetAttackBoard(Color.Black);
                    if (attacks[4] == 0 && attacks[5] == 0 && attacks[6] == 0)
                    {
                        moves[count] = 6;
                        count++;
                    }
                }
                if (board.CanCastleQWhite && board.State[3] == 0 && board.State[2] == 0 && board.State[1] == 0)
                {
                    var attacks = board.GetAttackBoard(Color.Black);
                    if (attacks[2] == 0 && attacks[3] == 0 && attacks[4] == 0)
                    {
                        moves[count] = 2;
                        count++;
                    }
                }
            }
            else if (color == Color.Black && square == 60)
            {
                if (board.CanCastleKBlack && board.State[61] == 0 && board.State[62] == 0)
                {
                    var attacks = board.GetAttackBoard(Color.White);
                    if (attacks[60] == 0 && attacks[61] == 0 && attacks[62] == 0)
                    {
                        moves[count] = 62;
//.........这里部分代码省略.........
开发者ID:adh2050,项目名称:Chess,代码行数:101,代码来源:Moves.cs


注:本文中的Board.GetAttackBoard方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。