本文整理汇总了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]);
}
示例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]);
}
示例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]);
}
示例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;
//.........这里部分代码省略.........