Напишем код для обработки клика мышкой по окну программы. Нам нужно решить две задачи:
- преобразовать координаты клика в координаты двумерного списка, в котором хранятся индексы фрагментов карты, размещённых в окне;
- запомнить координаты первого клика, чтобы после второго клика поменять местами фрагменты карты.
Кроме того, после каждого перемещения нужно перерисовывать карту. Для этого процесс перерисовки удобно вынести в отдельную функцию draw_map().
Преобразование координат также вынесем в отдельную функцию recount(). Она будет принимать координаты клика (в системе координат окна программы) и возвращать координаты списка списков (предполагается, что пользователь кликает только по карте).
Функция recount
def recount(x, y):
return int((x + WIDTH // 2) // side), int((HEIGHT // 2 - y) // side) Переменная first_click будет хранить кортеж координат первого щелчка мышью. Изначально в ней будет значение None.
После каждого щелчка мы будем проверять содержимое переменной first_click:
- Если это первый щелчок, то мы запоминаем координаты этого щелчка (пересчитываем их в координаты списка).
- Если это второй щелчок, то мы меняем картинки с координатами текущего и предыдущего щелчков и перерисовываем карту.
def move(x, y):
global first_click
if first_click is not None:
x1, y1 = first_click
x2, y2 = recount(x, y)
pic[y1][x1], pic[y2][x2] = pic[y2][x2], pic[y1][x1]
first_click = None
draw_map()
else:
first_click = recount(x, y)