示例#1
0
        def __process_interior_liberties(self, stone):

            for i in range(-1, 2, 2):
                if board[stone.x+i][stone.y] == EMPTY:
                    self.liberties.add(Stone(stone.x+i, stone.y))
                if board[stone.x][stone.y+i] == EMPTY:
                    self.liberties.add(Stone(stone.x, stone.y+i))
示例#2
0
文件: test.py 项目: RubisRage/GoFio
    def test_simple_group_liberties(self):

        upper_left = t.Group(Stone(0, 0), BLACK)
        upper_right = t.Group(Stone(0, 18), BLACK)
        lower_left = t.Group(Stone(18, 0), BLACK)
        lower_right = t.Group(Stone(18, 18), BLACK)

        top = t.Group(Stone(0, 15), BLACK)
        bottom = t.Group(Stone(18, 15), BLACK)
        left = t.Group(Stone(15, 0), BLACK)
        right = t.Group(Stone(15, 18), BLACK)

        interior = t.Group(Stone(15, 15), BLACK)

        self.assertEqual(upper_left.process_liberties(), 2)
        self.assertEqual(upper_right.process_liberties(), 2)
        self.assertEqual(lower_left.process_liberties(), 2)
        self.assertEqual(lower_right.process_liberties(), 2)

        self.assertEqual(top.process_liberties(), 3)
        self.assertEqual(bottom.process_liberties(), 3)
        self.assertEqual(left.process_liberties(), 3)
        self.assertEqual(right.process_liberties(), 3)

        self.assertEqual(interior.process_liberties(), 4)
示例#3
0
        def __process_side_liberties(self, stone):

            if stone.x == 0:
                if board[stone.x+1][stone.y] == EMPTY:
                    self.liberties.add(Stone(stone.x+1, stone.y))
                
                for i in range(-1, 2, 2):
                    if board[stone.x][stone.y+i] == EMPTY:
                        self.liberties.add(Stone(stone.x, stone.y+i))
            elif stone.x == 18:
                if board[stone.x-1][stone.y] == EMPTY:
                    self.liberties.add(Stone(stone.x+1, stone.y))
                
                for i in range(-1, 2, 2):
                    if board[stone.x][stone.y+i] == EMPTY:
                        self.liberties.add(Stone(stone.x, stone.y+i))
            elif stone.y == 0:
                if board[stone.x][stone.y+1] == EMPTY:
                    self.liberties.add(Stone(stone.x, stone.y+1))
                
                for i in range(-1, 2, 2):
                    if board[stone.x+i][stone.y] == EMPTY:
                        self.liberties.add(Stone(stone.x+i, stone.y))
            else:
                if board[stone.x][stone.y-1] == EMPTY:
                    self.liberties.add(Stone(stone.x, stone.y-1))
                
                for i in range(-1, 2, 2):
                    if board[stone.x+i][stone.y] == EMPTY:
                        self.liberties.add(Stone(stone.x+i, stone.y))
示例#4
0
文件: test.py 项目: RubisRage/GoFio
    def test_compound_group_liberties(self):

        group = t.Group([Stone(0, x) for x in range(0, 19)], BLACK)
        self.assertEqual(group.process_liberties(), 19)

        group = t.Group([Stone(5, x) for x in range(0, 19)], BLACK)
        self.assertEqual(group.process_liberties(), 19 * 2)

        group = t.Group([Stone(7, x) for x in range(1, 18)], BLACK)
        self.assertEqual(group.process_liberties(), (17 * 2 + 2))

        group = t.Group([Stone(15, x) for x in range(0, 19)], BLACK)
        t.Group([Stone(16, x) for x in range(0, 19)], WHITE)
        self.assertEqual(group.process_liberties(), 19)
示例#5
0
    def throw(self, x, y):

        throw = Stone(x,y)
        if board[throw.x][throw.y] != EMPTY:
            raise GoEx(GoEx.OCCUPIED_EXCEPTION)
        self.__get_player().process_throw(throw)
        self.black.has_passed = self.white.has_passed = False
        self.current_turn = BLACK if self.current_turn == WHITE else WHITE
示例#6
0
文件: test.py 项目: RubisRage/GoFio
    def test_simple_process_throw(self):
        self.test_board[1][1] = BLACK
        self.black.process_throw(Stone(1, 1))
        self.assertEqual(data_module.board, self.test_board)
        self.assertEqual(self.black.groups[0], t.Group(Stone(1, 1), BLACK))

        self.test_board[1][2] = BLACK
        self.black.process_throw(Stone(1, 2))
        self.assertEqual(data_module.board, self.test_board)
        self.assertEqual(self.black.groups[0],
                         t.Group([Stone(1, x) for x in range(1, 3)], BLACK))

        self.test_board[2][2] = BLACK
        self.black.process_throw(Stone(2, 2))
        self.assertEqual(data_module.board, self.test_board)
        temp_stones = [Stone(1, x) for x in range(1, 3)]
        temp_stones.append(Stone(2, 2))
        self.assertEqual(self.black.groups[0], t.Group(temp_stones, BLACK))
示例#7
0
 def __process_corner_liberties(self, stone):
     
     if stone.x == 0 and stone.y == 0:
         if board[stone.x+1][stone.y] == EMPTY:
             self.liberties.add(Stone(stone.x+1, stone.y))
         if board[stone.x][stone.y+1] == EMPTY:
             self.liberties.add(Stone(stone.x, stone.y+1))
     elif stone.x == 0 and stone.y == 18:
         if board[stone.x+1][stone.y] == EMPTY:
             self.liberties.add(Stone(stone.x+1, stone.y))
         if board[stone.x][stone.y-1] == EMPTY:
             self.liberties.add(Stone(stone.x, stone.y-1))
     elif stone.x == 18 and stone.y == 0:
         if board[stone.x-1][stone.y] == EMPTY:
             self.liberties.add(Stone(stone.x-1, stone.y))
         if board[stone.x][stone.y+1] == EMPTY:
             self.liberties.add(Stone(stone.x, stone.y+1))
     else:
         if board[stone.x-1][stone.y] == EMPTY:
             self.liberties.add(Stone(stone.x-1, stone.y))
         if board[stone.x][stone.y-1] == EMPTY:
             self.liberties.add(Stone(stone.x, stone.y-1))
示例#8
0
文件: test.py 项目: RubisRage/GoFio
    def test_elimination_process_throw(self):

        #Single group elimination
        self.black.process_throw(Stone(1, 0))
        self.black.process_throw(Stone(1, 2))
        self.black.process_throw(Stone(2, 1))
        self.white.process_throw(Stone(1, 1))

        #Elimination throw
        self.black.process_throw(Stone(0, 1))

        self.test_board[1][0] = BLACK
        self.test_board[1][2] = BLACK
        self.test_board[2][1] = BLACK
        self.test_board[0][1] = BLACK

        self.assertEqual(data_module.board, self.test_board)
        self.assertEqual(len(self.white.groups), 0)
        self.assertEqual(len(self.black.groups), 4)

        #Compound group elimination
        self.black.process_throw(Stone(17, 0))
        self.black.process_throw(Stone(18, 0))
        self.black.process_throw(Stone(18, 1))
        self.black.process_throw(Stone(18, 2))
        self.white.process_throw(Stone(16, 0))
        self.white.process_throw(Stone(17, 1))
        self.white.process_throw(Stone(17, 2))

        #Elimination throw
        self.white.process_throw(Stone(18, 3))
        self.assertEqual(len(self.black.groups), 4)
        self.assertEqual(len(self.white.groups), 3)
示例#9
0
文件: test.py 项目: RubisRage/GoFio
    def test_pre_check_liberties(self):

        group = t.Group(Stone(0, 0), BLACK)
        self.assertEqual(group.pre_check_liberties(Stone(0, 1)), 1)
示例#10
0
文件: test.py 项目: RubisRage/GoFio
    def test_fake_suicide_throw(self):

        #Corner fake suicide
        self.white.process_throw(Stone(0, 16))
        self.white.process_throw(Stone(1, 17))

        self.black.process_throw(Stone(0, 17))
        self.black.process_throw(Stone(1, 18))

        self.test_board[0][16] = WHITE
        self.test_board[1][17] = WHITE
        self.test_board[0][18] = WHITE

        self.test_board[1][18] = BLACK

        #Corner elimination success
        self.white.process_throw(Stone(0, 18))
        self.assertEqual(data_module.board, self.test_board)
        self.assertEqual(len(self.black.groups), 1)
        self.assertEqual(len(self.white.groups), 3)

        #Interior fake suicide
        self.white.process_throw(Stone(0, 2))
        self.white.process_throw(Stone(1, 1))
        self.white.process_throw(Stone(1, 3))

        self.black.process_throw(Stone(2, 1))
        self.black.process_throw(Stone(3, 1))
        self.black.process_throw(Stone(2, 3))
        self.black.process_throw(Stone(3, 3))
        self.black.process_throw(Stone(4, 2))

        self.test_board[0][2] = WHITE
        self.test_board[1][1] = WHITE
        self.test_board[1][3] = WHITE

        self.test_board[1][2] = BLACK
        self.test_board[2][1] = BLACK
        self.test_board[3][1] = BLACK
        self.test_board[2][3] = BLACK
        self.test_board[3][3] = BLACK
        self.test_board[4][2] = BLACK

        #Interior elimination success
        self.black.process_throw(Stone(1, 2))
        self.assertEqual(data_module.board, self.test_board)
        self.assertEqual(len(self.black.groups), 5)
        self.assertEqual(len(self.white.groups), 6)

        #Compound fake suicide
        self.black.process_throw(Stone(18, 0))
        self.black.process_throw(Stone(17, 2))
        self.black.process_throw(Stone(17, 3))
        self.black.process_throw(Stone(18, 4))

        self.white.process_throw(Stone(17, 0))
        self.white.process_throw(Stone(17, 1))
        self.white.process_throw(Stone(18, 2))
        self.white.process_throw(Stone(18, 3))

        self.test_board[18][0] = BLACK
        self.test_board[18][1] = BLACK
        self.test_board[17][2] = BLACK
        self.test_board[17][3] = BLACK
        self.test_board[18][4] = BLACK

        self.test_board[17][0] = WHITE
        self.test_board[17][1] = WHITE

        #Compound elimination success
        self.black.process_throw(Stone(18, 1))
        self.assertEqual(data_module.board, self.test_board)
        self.assertEqual(len(self.black.groups), 8)
        self.assertEqual(len(self.white.groups), 7)
示例#11
0
文件: test.py 项目: RubisRage/GoFio
    def test_suicide_throw(self):

        #Corner group suicide situation
        self.black.process_throw(Stone(0, 17))
        self.black.process_throw(Stone(1, 18))

        self.test_board[0][17] = BLACK
        self.test_board[1][18] = BLACK

        #Corner group suicide attempt
        with self.assertRaises(GoEx) as contex:
            self.white.process_throw(Stone(0, 18))
        self.assertEqual(contex.exception.error_code, GoEx.SUICIDE_EXCEPTION)
        self.assertEqual(data_module.board, self.test_board)
        self.assertEqual(len(self.black.groups), 2)
        self.assertEqual(len(self.white.groups), 0)

        #Simple suicide situation
        self.black.process_throw(Stone(1, 0))
        self.black.process_throw(Stone(1, 2))
        self.black.process_throw(Stone(2, 1))
        self.black.process_throw(Stone(0, 1))

        self.test_board[1][0] = BLACK
        self.test_board[1][2] = BLACK
        self.test_board[2][1] = BLACK
        self.test_board[0][1] = BLACK

        #Suicide attempt
        with self.assertRaises(GoEx) as context:
            self.white.process_throw(Stone(1, 1))
        self.assertEqual(contex.exception.error_code, GoEx.SUICIDE_EXCEPTION)
        self.assertEqual(data_module.board, self.test_board)
        self.assertEqual(len(self.black.groups), 6)
        self.assertEqual(len(self.white.groups), 0)

        #Compound group suicide situacion
        self.white.process_throw(Stone(16, 0))
        self.white.process_throw(Stone(16, 1))
        self.white.process_throw(Stone(17, 1))
        self.white.process_throw(Stone(17, 2))
        self.white.process_throw(Stone(18, 3))

        self.black.process_throw(Stone(17, 0))
        self.black.process_throw(Stone(18, 0))
        self.black.process_throw(Stone(18, 1))

        self.test_board[16][0] = WHITE
        self.test_board[16][1] = WHITE
        self.test_board[17][1] = WHITE
        self.test_board[17][2] = WHITE
        self.test_board[18][3] = WHITE

        self.test_board[17][0] = BLACK
        self.test_board[18][0] = BLACK
        self.test_board[18][1] = BLACK

        #Compound group suicide attempt
        with self.assertRaises(GoEx) as context:
            self.black.process_throw(Stone(18, 2))
        self.assertEqual(contex.exception.error_code, GoEx.SUICIDE_EXCEPTION)
        self.assertEqual(data_module.board, self.test_board)
        self.assertEqual(len(self.black.groups), 7)
        self.assertEqual(len(self.white.groups), 2)