コード例 #1
0
 def test_is_valid_obstructed(self):
     q = pc.Queen(3, 3)
     p = pc.Pawn(3, 4)
     b = board.Board()
     b.pieces.extend([q, p])
     self.assertTrue(move.Move(q, T(1, 1, 1)).is_valid(b))
     self.assertFalse(move.Move(q, T(0, 1, 2)).is_valid(b))
     self.assertFalse(move.Move(q, T(0, 1, 1)).is_valid(b))
コード例 #2
0
 def test_is_valid_capture(self):
     q = pc.Queen(3, 3)
     p = pc.Pawn(3, 4)
     r = pc.Rook(2, 3, True)
     b = board.Board()
     b.pieces.extend([q, p, r])
     self.assertTrue(move.Move(q, T(1, 1, 1)).is_valid(b))
     self.assertFalse(move.Move(q, T(0, 1, 1)).is_valid(b))
     self.assertTrue(move.Move(q, T(-1, 0, 1)).is_valid(b))
コード例 #3
0
 def get_valid_moves(self, board):
     # Prevents future calls appending to the same array
     self.valid_moves = []
     m = self._magnitude()
     if (board.get_piece_at(self.x, self.y + m) == None):
         self._append_valid_move(board, Move(self, T(0, m, 1)))
     if (not self.has_moved):
         self._append_valid_move(board, Move(self, T(0, m, 2)))
     if (board.get_piece_at(self.x + 1, self.y + m) != None):
         self._append_valid_move(board, Move(self, T(1, m, 1)))
     if (board.get_piece_at(self.x - 1, self.y + m) != None):
         self._append_valid_move(board, Move(self, T(-1, m, 1)))
     return self.valid_moves
コード例 #4
0
 def test_capture_value(self):
     q = pc.Queen(3, 3)
     p = pc.Pawn(3, 4)
     r = pc.Rook(2, 3, True)
     b = board.Board()
     b.pieces.extend([q, p, r])
     m1 = move.Move(q, T(1, 1, 1))
     self.assertTrue(m1.is_valid(b))
     self.assertEqual(m1.value(b), 0)
     self.assertFalse(move.Move(q, T(0, 1, 1)).is_valid(b))
     m2 = move.Move(q, T(-1, 0, 1))
     self.assertTrue(m2.is_valid(b))
     self.assertEqual(m2.value(b), 5)
コード例 #5
0
 def test_negative_magnitude(self):
     p = pc.Pawn(5, 5, True)
     bo = board.Board()
     bo._clear_board()
     bo.pieces.append(p)
     m = move.Move(p, T(0, -1, 1))
     m.is_valid(bo)
     m.apply(bo)
     self.assertEqual(p.get_position()[0], 5)
     self.assertEqual(p.get_position()[1], 4)
コード例 #6
0
 def test_apply(self):
     b = pc.Bishop(5, 5)
     m = move.Move(b, T(-1, -1, 3))
     bo = board.Board()
     self.assertTrue(bo.to_play == bo.WHITE)
     m.is_valid(bo)
     m.apply(bo)
     self.assertTrue(bo.to_play == bo.BLACK)
     self.assertEqual(b.get_position()[0], 2)
     self.assertEqual(b.get_position()[1], 2)
     self.assertTrue(bo.get_piece_at(5, 5) is None)
コード例 #7
0
 def get_valid_moves(self, board):
     # Prevents future calls appending to the same array
     self.valid_moves = []
     transforms = [
         T(1, 2, 1),
         T(2, 1, 1),
         T(2, -1, 1),
         T(1, -2, 1),
         T(-1, -2, 1),
         T(-2, -1, 1),
         T(-2, 1, 1),
         T(-1, 2, 1)
     ]
     for t in transforms:
         self._append_valid_move(board, Move(self, t))
     return self.valid_moves
コード例 #8
0
 def test_undo(self):
     b = pc.Bishop(5, 5)
     q = pc.Queen(6, 6, True)
     bo = board.Board()
     bo._clear_board()
     bo.pieces.append(b)
     bo.pieces.append(q)
     m = move.Move(b, T(1, 1, 1))
     m.is_valid(bo)
     self.assertTrue(bo.to_play == bo.WHITE)
     m.apply(bo)
     m.undo(bo)
     self.assertTrue(bo.to_play == bo.WHITE)
     self.assertEqual(b.get_position()[0], 5)
     self.assertEqual(b.get_position()[1], 5)
     self.assertEqual(bo.get_piece_at(6, 6), q)
コード例 #9
0
 def test_is_valid_board_limits(self):
     q = pc.Queen(0, 0)
     b = board.Board()
     # Remove initial board setup
     b.pieces = [q]
     self.assertTrue(move.Move(q, T(1, 1, 1)).is_valid(b))
     self.assertFalse(move.Move(q, T(-1, 1, 1)).is_valid(b))
     self.assertFalse(move.Move(q, T(1, -1, 1)).is_valid(b))
     n = pc.Knight(6, 6)
     self.assertTrue(move.Move(n, T(-2, 1, 1)).is_valid(b))
     self.assertFalse(move.Move(n, T(2, 1, 1)).is_valid(b))
     self.assertFalse(move.Move(n, T(-1, 2, 1)).is_valid(b))
コード例 #10
0
 def _moves_in_direction(self, board, direction):
     moves = []
     for i in range(8):
         moves.append(Move(self, T(direction[0], direction[1], i + 1)))
     return moves