From 820d1b0d977bd357d06b02d0053dbe7d05820b9e Mon Sep 17 00:00:00 2001 From: Linxi Li Date: Sat, 22 Jan 2022 14:30:59 -0500 Subject: [PATCH] [+] A1 P2 Implement right click --- assignments/A1/a1_part2.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/assignments/A1/a1_part2.py b/assignments/A1/a1_part2.py index b1e4773..52c4450 100644 --- a/assignments/A1/a1_part2.py +++ b/assignments/A1/a1_part2.py @@ -187,6 +187,21 @@ def index_to_pos(i: int) -> Tuple[int, int]: xi, yi = i % GRID_SIZE, i // GRID_SIZE return xi * GRID_WIDTH, yi * GRID_WIDTH +def pos_to_index(pos: Tuple[int, int]) -> int: + """ + Convert on-screen pixel position to list index + + Preconditions: + - 0 <= pos[0] < SCREEN_SIZE[0] + - 0 <= pos[1] < SCREEN_SIZE[1] + + :param pos: Position (x, y) + :return: Index + """ + x, y = pos + x, y = x // GRID_WIDTH, y // GRID_WIDTH + return y * GRID_SIZE + x + def draw_none(screen: pygame.Surface, i: int) -> None: """ @@ -331,6 +346,21 @@ def handle_mouse_click(lst: LinkedList, event: pygame.event.Event, - screen_size[0] >= 200 - screen_size[1] >= 200 """ + # Find selected node + i = pos_to_index(event.pos) + + # Left click - Remove + if event.button == 1: + try: + lst.pop(i) + except IndexError: + # When the clicked node doesn't exist, do nothing + pass + + # Right-click - Search + if event.button == 3: + # TODO: Implement this + pass if __name__ == '__main__':