Example #1
0
 def test_capture_is_not_suicide(self):
     board = Board(19, 19)
     board.place_stone(Player.black, Point(1, 1))
     board.place_stone(Player.black, Point(2, 2))
     board.place_stone(Player.black, Point(1, 3))
     board.place_stone(Player.white, Point(2, 1))
     board.place_stone(Player.white, Point(1, 2))
     self.assertIsNone(board.get(Point(1, 1)))
     self.assertEqual(Player.white, board.get(Point(2, 1)))
     self.assertEqual(Player.white, board.get(Point(1, 2)))
Example #2
0
 def test_middle(self):
     board = Board(19, 19)
     board.place_stone(Player.black, Point(2, 2))
     board.place_stone(Player.black, Point(3, 2))
     board.place_stone(Player.black, Point(4, 2))
     board.place_stone(Player.black, Point(4, 3))
     board.place_stone(Player.white, Point(4, 4))
     board.place_stone(Player.black, Point(3, 4))
     board.place_stone(Player.black, Point(2, 4))
     board.place_stone(Player.black, Point(2, 3))
     self.assertTrue(is_point_an_eye(board, Point(3, 3), Player.black))
Example #3
0
 def test_corner(self):
     board = Board(19, 19)
     board.place_stone(Player.black, Point(1, 2))
     board.place_stone(Player.black, Point(2, 2))
     board.place_stone(Player.black, Point(2, 1))
     self.assertTrue(is_point_an_eye(board, Point(1, 1), Player.black))
     self.assertFalse(is_point_an_eye(board, Point(1, 1), Player.white))
Example #4
0
 def test_remove_liberties(self):
     board = Board(5, 5)
     board.place_stone(Player.black, Point(3, 3))
     board.place_stone(Player.white, Point(2, 2))
     white_string = board.get_go_string(Point(2, 2))
     six.assertCountEqual(
         self,
         [Point(2, 3), Point(2, 1), Point(1, 2), Point(3, 2)],
         white_string.liberties)
     board.place_stone(Player.black, Point(3, 2))
     white_string = board.get_go_string(Point(2, 2))
     six.assertCountEqual(
         self,
         [Point(2, 3), Point(2, 1), Point(1, 2)],
         white_string.liberties)
Example #5
0
    def test_empty_triangle(self):
        board = Board(5, 5)
        board.place_stone(Player.black, Point(1, 1))
        board.place_stone(Player.black, Point(1, 2))
        board.place_stone(Player.black, Point(2, 2))
        board.place_stone(Player.white, Point(2, 1))

        black_string = board.get_go_string(Point(1, 1))
        six.assertCountEqual(
            self,
            [Point(3, 2), Point(2, 3), Point(1, 3)],
            black_string.liberties)
Example #6
0
def is_point_an_eye(board :Board, point: Point, color):

    # 目は空の点
    if board.get(point) is not None:
        return False

    # 隣接するすべての点には味方の石が含まれている必要がある
    for neighbor in point.neighbors():
        if board.is_on_grid(neighbor):
            neighbor_color = board.get(neighbor)
            if neighbor_color != color:
                return False

    # 点が盤の中央にある場合、4つの角のうち3つの角を支配する必要がある
    # 辺ではすべての角を支配する必要がある
    friendly_corners = 0
    off_board_corners = 0
    corners = [
        Point(point.row - 1, point.col - 1),
        Point(point.row - 1, point.col + 1),
        Point(point.row + 1, point.col - 1),
        Point(point.row + 1, point.col + 1),
    ]
    for corner in corners:
        if board.is_on_grid(corner):
            corner_color = board.get(corner)
            if corner_color == color:
                friendly_corners += 1
        else:
            off_board_corners += 1

    if off_board_corners > 0:
        # 点が角または辺にある
        return off_board_corners + friendly_corners == 4

    # 点は中央にある
    return friendly_corners >= 3
Example #7
0
 def test_capture_two_stones(self):
     board = Board(19, 19)
     board.place_stone(Player.black, Point(2, 2))
     board.place_stone(Player.black, Point(2, 3))
     board.place_stone(Player.white, Point(1, 2))
     board.place_stone(Player.white, Point(1, 3))
     self.assertEqual(Player.black, board.get(Point(2, 2)))
     self.assertEqual(Player.black, board.get(Point(2, 3)))
     board.place_stone(Player.white, Point(3, 2))
     board.place_stone(Player.white, Point(3, 3))
     self.assertEqual(Player.black, board.get(Point(2, 2)))
     self.assertEqual(Player.black, board.get(Point(2, 3)))
     board.place_stone(Player.white, Point(2, 1))
     board.place_stone(Player.white, Point(2, 4))
     self.assertIsNone(board.get(Point(2, 2)))
     self.assertIsNone(board.get(Point(2, 3)))
Example #8
0
 def new_game(cls, board_size):
     assert isinstance(board_size, int)
     return GameState(Board(board_size, board_size), Player.black, None,
                      None)