Esempio n. 1
0
def test_getitem_square_reversed_stepped_on_y_grouped():

    my_board_renderer = BoardRenderer(tile_w=2)

    board = Board(12, 13, default_renderer=my_board_renderer)

    for group_index, column in enumerate(board[9:2:-3, 11:3:-2,
                                               "y"].group_by_subcoord()):
        for index, tile in enumerate(column):
            tile.data = chr(group_index + ord("A")) + str(index)

    render_result = """

		. . . . . . . . . . . .
		. . . . . . . . . . . .
		. . . . . . . . . . . .
		. . . . . . . . . . . .
		. . . . . . . . . . . .
		. . . C3. . B3. . A3. .
		. . . . . . . . . . . .
		. . . C2. . B2. . A2. .
		. . . . . . . . . . . .
		. . . C1. . B1. . A1. .
		. . . . . . . . . . . .
		. . . C0. . B0. . A0. .
		. . . . . . . . . . . .

	"""
    print(board.render())
    assert strip_multiline(board.render()) == strip_multiline(render_result)
Esempio n. 2
0
def test_both_coord_changed_render():

    positions = [(0, 0), (0, 2), (2, 2), (1, 1), (1, 0), (3, 3), (0, 3)]

    my_board_renderer = BoardRenderer(tile_w=2,
                                      tile_padding_w=1,
                                      tile_padding_h=1,
                                      chr_fill_tile=".")
    board = Board(4, 5, default_renderer=my_board_renderer)
    board_iter_positions = BoardIteratorPositions(board, positions)

    for index, tile in enumerate(board_iter_positions):
        DICT_MARKERS = {False: "_", True: "B"}
        both_coord_marker = DICT_MARKERS[
            board_iter_positions.both_coord_changed]
        tile.data = str(index) + both_coord_marker

        # Pour la toute première itération, both_coord_changed est à True.
        # On considère que le curseur passe de (rien, rien) à (0, 0), et que les deux coords changent.
    render_result = """

		0B 4_ .. ..

		.. 3B .. ..

		1_ .. 2_ ..

		6_ .. .. 5B

		.. .. .. ..

	"""
    assert strip_multiline(board.render()) == strip_multiline(render_result)
Esempio n. 3
0
def test_both_coord_changed():

    my_board_renderer = BoardRenderer(tile_w=2,
                                      tile_padding_w=1,
                                      tile_padding_h=1,
                                      chr_fill_tile=".")
    board = Board(2, 4, default_renderer=my_board_renderer)
    board_iter_rect = BoardIteratorRect(board)

    DICT_MARKERS = {False: "_", True: "B"}
    for index, tile in enumerate(board_iter_rect):
        both_coord_marker = DICT_MARKERS[board_iter_rect.both_coord_changed]
        tile.data = str(index) + both_coord_marker

    render_result = """

		0B 1_

		2B 3_

		4B 5_

		6B 7_

	"""
    assert strip_multiline(board.render()) == strip_multiline(render_result)
Esempio n. 4
0
    def __init__(self, 
                 screen_size=(1280,720),
                 tile_pad=10):

        pygame.init()
        self._screen_size = screen_size
        self._screen = pygame.display.set_mode(self._screen_size, 1)

        self._scroll_window = 30

        self._clock = pygame.time.Clock()

        self._tile_pad=tile_pad

        self._board_renderer = \
            BoardRenderer(self)

        self._move_renderer = \
            MoveRenderer(self)

        self._font_manager = \
            FontManager(self)

        self._pan_manager = None

        pygame.mouse.set_visible(True)
Esempio n. 5
0
    def __init__(
            self,
            w=1,
            h=1,
            class_tile=Tile,
            default_renderer=BoardRenderer(),
            class_adjacency=None,
    ):
        self.w = w
        self.h = h
        self._default_renderer = default_renderer

        self.class_adjacency = (class_adjacency if class_adjacency is not None
                                else get_default_adjacency())

        self.adjacency = self.class_adjacency(self)
        self.is_adjacent = self.adjacency.is_adjacent

        self._tiles = [[class_tile(x, y, self) for x in range(w)]
                       for y in range(h)]
Esempio n. 6
0
def test_jump_and_dir_change_render():

    positions = [(1, 2), (1, 3), (1, 4), (2, 4), (3, 4), (5, 4), (6, 4),
                 (8, 1)]

    my_board_renderer = BoardRenderer(tile_w=2,
                                      tile_padding_w=1,
                                      tile_padding_h=1,
                                      chr_fill_tile=".")
    board = Board(10, 6, default_renderer=my_board_renderer)
    board_iter_positions = BoardIteratorPositions(board, positions)

    for index, tile in enumerate(board_iter_positions):
        DICT_JUMP_DIR = {
            (False, False): "_",
            (True, False): "J",
            (False, True): "D",
            (True, True): "X",
        }
        jump_dir_marker = DICT_JUMP_DIR[(
            board_iter_positions.jumped,
            board_iter_positions.changed_direction)]
        tile.data = str(index) + jump_dir_marker

    render_result = """

		.. .. .. .. .. .. .. .. .. ..

		.. .. .. .. .. .. .. .. 7X ..

		.. 0J .. .. .. .. .. .. .. ..

		.. 1_ .. .. .. .. .. .. .. ..

		.. 2_ 3D 4_ .. 5J 6_ .. .. ..

		.. .. .. .. .. .. .. .. .. ..


	"""
    assert strip_multiline(board.render()) == strip_multiline(render_result)
# Get an integer from standard input and return it
# If a non-integer value is entered, continue to prompt the user
def integer_input(str_prompt):
    while True:
        try:
            return int(input(str_prompt))
        except ValueError:
            print("Please enter a valid integer")
            continue

if __name__ == "__main__":
    terminal = blessings.Terminal()
    # Create a new game of Catan
    game = Game()
    # Set up board to render
    br = BoardRenderer(board=game.board, center=[math.floor(terminal.width / 2), math.floor(terminal.height / 2 - 1)])
    # Draw the board
    br.render()
    # Starting phase
    # Twice for each player
    for p in game.players + list(reversed(game.players)):
        # Render the board
        br.render()
        # Place a free settlement
        with terminal.location(0, terminal.height - 1):
            # Prompt the player for input
            print("Player %s, it is your turn" % p.num)
            while True:
                # Get the row
                row = integer_input("Enter the row you want to place the settlement: ")
                # Get the index
Esempio n. 8
0
def test_find_path_roads():
    # Test ajouté suite à un bug trouvé lors du challenge CodinGame "XMas Rush".

    set_default_adjacency(AdjacencyEvaluatorCross)

    renderer = BoardRenderer(
        tile_w=3,
        tile_h=3,
        tile_padding_w=1,
        tile_padding_h=1,
        chr_fill_tile_padding=".",
    )
    board = Board(7, 7, class_tile=XmasTile, default_renderer=renderer)

    definition_roads = (
        (0, 3, "1010"),
        (0, 2, "1010"),
        (0, 1, "0111"),
        (1, 1, "1111"),
        (2, 1, "0011"),
        (1, 0, "0110"),
        (2, 0, "0101"),
    )

    for x, y, input_def_roads in definition_roads:
        board[x, y].dirs_from_input(input_def_roads)

    for index, tile in enumerate(
            BoardIteratorFindPath(board, (0, 3), (2, 0), pass_through_xmas)):
        tile.mid_marker = str(index)

    print(board.render())

    render_result = """

		   .   .   .   .   .   .
		   . 4-.-5-.   .   .   .
		   . | .   .   .   .   .
		...........................
		   . | .   .   .   .   .
		-2-.-3-.-  .   .   .   .
		 | . | . | .   .   .   .
		...........................
		 | .   .   .   .   .   .
		 1 .   .   .   .   .   .
		 | .   .   .   .   .   .
		...........................
		 | .   .   .   .   .   .
		 0 .   .   .   .   .   .
		 | .   .   .   .   .   .
		...........................
		   .   .   .   .   .   .
		   .   .   .   .   .   .
		   .   .   .   .   .   .
		...........................
		   .   .   .   .   .   .
		   .   .   .   .   .   .
		   .   .   .   .   .   .
		...........................
		   .   .   .   .   .   .
		   .   .   .   .   .   .
		   .   .   .   .   .   .

	"""
    assert strip_multiline(board.render()) == strip_multiline(render_result)
Esempio n. 9
0
class MasterRenderer:
    
    def __init__(self, 
                 screen_size=(1280,720),
                 tile_pad=10):

        pygame.init()
        self._screen_size = screen_size
        self._screen = pygame.display.set_mode(self._screen_size, 1)

        self._scroll_window = 30

        self._clock = pygame.time.Clock()

        self._tile_pad=tile_pad

        self._board_renderer = \
            BoardRenderer(self)

        self._move_renderer = \
            MoveRenderer(self)

        self._font_manager = \
            FontManager(self)

        self._pan_manager = None

        pygame.mouse.set_visible(True)

    def load_game(self,
                  game):
        self._game = game
        board = game.board
        self._board_renderer.load_board(board)
        self._pan_manager = PanManager(self)
        self._move_renderer.reset()

    def process_events(self):

        events = pygame.event.get()
        #if self._look_renderer.has_focus():
        #    self._look_renderer.process_events(events)
        #elif self._init_renderer.has_focus():
        #    self._init_renderer.process_events(events)
        #elif self._move_renderer.has_focus():
        #    self._move_renderer.process_events(events)
        #elif self._fire_renderer.has_focus():
        #    self._fir_renderer.process_events(events)

        for event in events:
            if event.type == pygame.QUIT:
                exit(0) 

        self._move_renderer.process_events(events)

        #mouse_pos = pygame.mouse.get_pos()
        #if mouse_pos[0] < self._scroll_window:
        #    self._pan_manager.scroll_left()
        #if mouse_pos[1] < self._scroll_window:
        #    self._pan_manager.scroll_up()
        #if mouse_pos[0] > (self._screen_size[0] - self._scroll_window - 1):
        #    self._pan_manager.scroll_right()
        #if mouse_pos[1] > (self._screen_size[1] - self._scroll_window - 1):
        #    self._pan_manager.scroll_down()

    def render(self):
        """
        Render the whole game.
        """

        self._clock.tick()
        pygame.display.set_caption("FPS %.2f" % self._clock.get_fps())
        self._pan_manager.update_pan()
        self._board_renderer.render_board()        
        self._move_renderer.render()
        # self._message_renderer.render_messages(pan)
        
        pygame.display.flip()

    ### ---------------------------------------------------
    ### EXTERNAL PROPERTY ACCESS
    ### ---------------------------------------------------

    @property
    def hex_rad(self):
        return self._game.hex_rad

    @property
    def tile_pad(self):
        return self._tile_pad

    @property
    def screen_size(self):
        return self._screen_size

    @property
    def screen(self):
        return self._screen

    @property
    def game(self):
        return self._game

    @property
    def board_renderer(self):
        return self._board_renderer

    @property
    def move_renderer(self):
        return self._move_renderer

    @property
    def pan_manager(self):
        return self._pan_manager

    @property
    def font_manager(self):
        return self._font_manager