コード例 #1
0
    def move_ring(self, player, ring_move):
        """
        Single ring move
        :param player:
        :param ring_move:
        :return:
        """
        start_x = ring_move['start_x']
        start_y = ring_move['start_y']
        self._check_position_owned(player, start_x, start_y)

        end_x = ring_move['end_x']
        end_y = ring_move['end_y']
        self._check_position_empty(end_x, end_y)

        jumped_line = self._get_jumped_line(start_x, start_y, end_x, end_y)
        BoardUtils.check_empty_fields(
            jumped_line)  # check if not to many empty fields jumped
        BoardUtils.check_jump_over_ring(
            jumped_line)  # jump over ring is incorrect

        # we are sure move is correct
        # perform the move
        self._place_marker(player, PlacementMove(start_x, start_y))
        self.place_ring(player, PlacementMove(end_x, end_y))
        self._switch_markers(ring_move)  # switch markers in line
        print "Ring moved: ({0},{1}) -> ({2},{3})".format(
            start_x, start_y, end_x, end_y)
コード例 #2
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
    def test_jump_over_ring(self):
        self.board.place_ring(self.black_player, PlacementMove(2, 2))
        self.board.place_ring(self.white_player, PlacementMove(2, 4))

        self.assertRaises(
            ValueError, lambda: self.board.move_ring(self.black_player,
                                                     RingMove(2, 2, 2, 6)))
コード例 #3
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
    def test_jumped_line_diagonal(self):
        self.board.place_ring(self.black_player, PlacementMove(2, 2))
        self.board.place_ring(self.white_player, PlacementMove(5, 5))

        line = self.board._get_jumped_line(2, 2, 6, 6)
        expected = [
            Board.EMPTY_FIELD, Board.EMPTY_FIELD, Board.SIGNS['WHITE_RING']
        ]
        self.assertEqual(
            expected, line,
            "Jump line test failed. Expected {0}, Got: {1}".format(
                expected, str(line)))

        line = self.board._get_jumped_line(5, 5, 6, 6)
        expected = []
        self.assertEqual(
            expected, line,
            "Jump line test failed. Expected {0}, Got: {1}".format(
                expected, str(line)))

        line = self.board._get_jumped_line(6, 6, 2, 2)
        expected = [
            Board.SIGNS['WHITE_RING'], Board.EMPTY_FIELD, Board.EMPTY_FIELD
        ]
        self.assertEqual(
            expected, line,
            "Jump line test failed. Expected {0}, Got: {1}".format(
                expected, str(line)))
コード例 #4
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
    def test_jump_too_many_empty_fields(self):
        self.board.place_ring(self.black_player, PlacementMove(2, 2))
        self.board.place_ring(self.white_player, PlacementMove(2, 6))
        self.board.move_ring(self.white_player, RingMove(2, 6, 3, 5))

        self.assertRaises(
            ValueError, lambda: self.board.move_ring(self.black_player,
                                                     RingMove(2, 2, 2, 10)))
コード例 #5
0
 def ring_remove(self, iteration):
     """
     Black player stub - ring remove implementation
     """
     if iteration == 14:
         move = PlacementMove(2, 6)
     if iteration == 16:
         move = PlacementMove(6, 14)
     if iteration == 19:
         move = PlacementMove(8, 10)
     return move
コード例 #6
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
 def place_five_in_row(self):
     self.board.place_ring(self.white_player, PlacementMove(4, 0))
     self.board._place_marker(self.white_player, PlacementMove(4, 0))
     self.board.place_ring(self.white_player, PlacementMove(5, 1))
     self.board._place_marker(self.white_player, PlacementMove(5, 1))
     self.board.place_ring(self.white_player, PlacementMove(6, 2))
     self.board._place_marker(self.white_player, PlacementMove(6, 2))
     self.board.place_ring(self.white_player, PlacementMove(7, 3))
     self.board._place_marker(self.white_player, PlacementMove(7, 3))
     self.board.place_ring(self.white_player, PlacementMove(8, 4))
     self.board._place_marker(self.white_player, PlacementMove(8, 4))
コード例 #7
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
 def place_second_five_in_row(self):
     self.board.place_ring(self.white_player, PlacementMove(2, 2))
     self.board._place_marker(self.white_player, PlacementMove(2, 2))
     self.board.place_ring(self.white_player, PlacementMove(3, 3))
     self.board._place_marker(self.white_player, PlacementMove(3, 3))
     self.board.place_ring(self.white_player, PlacementMove(4, 4))
     self.board._place_marker(self.white_player, PlacementMove(4, 4))
     self.board.place_ring(self.white_player, PlacementMove(5, 5))
     self.board._place_marker(self.white_player, PlacementMove(5, 5))
     self.board.place_ring(self.white_player, PlacementMove(6, 6))
     self.board._place_marker(self.white_player, PlacementMove(6, 6))
コード例 #8
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
    def test_fives_in_row_indexes(self):
        self.place_five_in_row()
        result = self.board.get_fives_in_row_indexes(self.white_player)
        self.assertEqual([[(4, 0), (5, 1), (6, 2), (7, 3), (8, 4)]], result)

        self.board.place_ring(self.white_player, PlacementMove(9, 5))
        self.board._place_marker(self.white_player, PlacementMove(9, 5))
        self.assertEqual([[(4, 0), (5, 1), (6, 2), (7, 3),
                           (8, 4)], [(5, 1), (6, 2), (7, 3), (8, 4), (9, 5)]],
                         self.board.get_fives_in_row_indexes(
                             self.white_player))
コード例 #9
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
    def test_ring_move(self):
        self.board.place_ring(self.black_player, PlacementMove(2, 2))
        self.board.place_ring(self.white_player, PlacementMove(2, 6))

        self.board.move_ring(self.white_player, RingMove(2, 6, 3, 5))
        self.assertEqual(Board.SIGNS['WHITE_MARKER'],
                         self.board.get_field(2, 6))

        self.board.move_ring(self.white_player, RingMove(3, 5, 1, 7))
        self.assertEqual(Board.SIGNS['BLACK_MARKER'],
                         self.board.get_field(2, 6))
コード例 #10
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
    def test_get_row_to_delete(self):
        self.place_five_in_row()
        self.board.place_ring(self.white_player, PlacementMove(9, 5))
        self.board._place_marker(self.white_player, PlacementMove(9, 5))

        result = self.board.get_row_to_delete(self.white_player,
                                              RingMove(5, 1, 9, 5))
        self.assertEqual([(5, 1), (6, 2), (7, 3), (8, 4), (9, 5)], result)

        result = self.board.get_row_to_delete(self.white_player,
                                              RingMove(8, 4, 4, 0))
        self.assertEqual([(4, 0), (5, 1), (6, 2), (7, 3), (8, 4)], result)
コード例 #11
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
    def test_fives_in_row_diagonal_edge(self):
        self.place_five_in_row()
        self.assertEqual(1,
                         self.board.how_many_fives_in_row(self.white_player))
        self.assertEqual(0,
                         self.board.how_many_fives_in_row(self.black_player))

        self.board.place_ring(self.white_player, PlacementMove(9, 5))
        self.board._place_marker(self.white_player, PlacementMove(9, 5))
        self.assertEqual(2,
                         self.board.how_many_fives_in_row(self.white_player))
        self.assertEqual(0,
                         self.board.how_many_fives_in_row(self.black_player))
コード例 #12
0
 def placement_move(self, iteration):
     """
     White player stub - placement move implementation
     """
     if iteration == 0:
         move = PlacementMove(2, 2)
     if iteration == 1:
         move = PlacementMove(4, 2)
     if iteration == 2:
         move = PlacementMove(4, 10)
     if iteration == 3:
         move = PlacementMove(8, 8)
     if iteration == 4:
         move = PlacementMove(9, 3)
     return move
コード例 #13
0
 def placement_move(self, iteration):
     """
     Black player stub - placement move implementation
     """
     if iteration == 0:
         move = PlacementMove(2, 8)
     if iteration == 1:
         move = PlacementMove(4, 6)
     if iteration == 2:
         move = PlacementMove(5, 11)
     if iteration == 3:
         move = PlacementMove(3, 7)
     if iteration == 4:
         move = PlacementMove(9, 7)
     return move
コード例 #14
0
 def ring_remove(self, iteration):
     """
     White player stub - ring remove implementation
     """
     if iteration == 6:
         move = PlacementMove(4, 4)
     return move
コード例 #15
0
    def ring_remove(self, _):
        """
        Get input for ring remove
        """
        print "Player: {0}".format(self.name)
        print "Move Type: {0}".format("Ring remove")
        input_text = raw_input("Position (x y - separated with space): ")
        input_array = input_text.split(" ")
        if len(input_array) != 2:
            raise ValueError('Provide 2 numbers separated with space.')

        return PlacementMove(int(input_array[0]), int(input_array[1]))
コード例 #16
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
 def test_ring_placement_position_taken(self):
     self.board.place_ring(self.black_player, PlacementMove(2, 4))
     self.assertRaises(
         ValueError, lambda: self.board.place_ring(self.white_player,
                                                   PlacementMove(2, 4)))
コード例 #17
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
 def test_ring_placement_wrong_position(self):
     self.assertRaises(
         ValueError, lambda: self.board.place_ring(self.white_player,
                                                   PlacementMove(1, 0)))
コード例 #18
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
 def test_black_ring_placement(self):
     self.board.place_ring(self.black_player, PlacementMove(2, 4))
     self.assertEqual(Board.SIGNS['BLACK_RING'], self.board.get_field(2, 4),
                      "Black ring placement fails")
コード例 #19
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
 def test_white_ring_placement(self):
     self.board.place_ring(self.white_player, PlacementMove(2, 2))
     self.assertEqual(Board.SIGNS['WHITE_RING'], self.board.get_field(2, 2),
                      "White ring placement fails")
コード例 #20
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
    def test_fives_in_row_diagonal(self):
        self.board.place_ring(self.white_player, PlacementMove(2, 2))
        self.board._place_marker(self.white_player, PlacementMove(2, 2))
        self.board.place_ring(self.white_player, PlacementMove(4, 4))
        self.board._place_marker(self.white_player, PlacementMove(4, 4))

        self.assertEqual(0,
                         self.board.how_many_fives_in_row(self.black_player))
        self.assertEqual(0,
                         self.board.how_many_fives_in_row(self.white_player))

        self.board.place_ring(self.white_player, PlacementMove(3, 3))
        self.board._place_marker(self.white_player, PlacementMove(3, 3))
        self.board.place_ring(self.white_player, PlacementMove(5, 5))
        self.board._place_marker(self.white_player, PlacementMove(5, 5))
        self.board.place_ring(self.white_player, PlacementMove(6, 6))
        self.board._place_marker(self.white_player, PlacementMove(6, 6))
        self.assertEqual(1,
                         self.board.how_many_fives_in_row(self.white_player))
        self.assertEqual(0,
                         self.board.how_many_fives_in_row(self.black_player))

        self.board.place_ring(self.white_player, PlacementMove(7, 7))
        self.board._place_marker(self.white_player, PlacementMove(7, 7))
        self.assertEqual(2,
                         self.board.how_many_fives_in_row(self.white_player))
        self.assertEqual(0,
                         self.board.how_many_fives_in_row(self.black_player))
コード例 #21
0
ファイル: board_test.py プロジェクト: jkordas/Yinsh
    def test_fives_in_row_vertical(self):
        self.board.place_ring(self.black_player, PlacementMove(2, 2))
        self.board._place_marker(self.black_player, PlacementMove(2, 2))
        self.board.place_ring(self.black_player, PlacementMove(2, 4))
        self.board._place_marker(self.black_player, PlacementMove(2, 4))

        self.assertEqual(0,
                         self.board.how_many_fives_in_row(self.black_player))
        self.assertEqual(0,
                         self.board.how_many_fives_in_row(self.white_player))

        self.board.place_ring(self.black_player, PlacementMove(2, 6))
        self.board._place_marker(self.black_player, PlacementMove(2, 6))
        self.board.place_ring(self.black_player, PlacementMove(2, 8))
        self.board._place_marker(self.black_player, PlacementMove(2, 8))
        self.board.place_ring(self.black_player, PlacementMove(2, 10))
        self.board._place_marker(self.black_player, PlacementMove(2, 10))
        self.assertEqual(1,
                         self.board.how_many_fives_in_row(self.black_player))
        self.assertEqual(0,
                         self.board.how_many_fives_in_row(self.white_player))

        self.board.place_ring(self.black_player, PlacementMove(2, 12))
        self.board._place_marker(self.black_player, PlacementMove(2, 12))
        self.assertEqual(2,
                         self.board.how_many_fives_in_row(self.black_player))
        self.assertEqual(0,
                         self.board.how_many_fives_in_row(self.white_player))