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)
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)))
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)))
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)))
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
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))
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))
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))
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))
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)
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))
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
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
def ring_remove(self, iteration): """ White player stub - ring remove implementation """ if iteration == 6: move = PlacementMove(4, 4) return move
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]))
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)))
def test_ring_placement_wrong_position(self): self.assertRaises( ValueError, lambda: self.board.place_ring(self.white_player, PlacementMove(1, 0)))
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")
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")
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))
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))