Tkinter настольная игра - PullRequest
       11

Tkinter настольная игра

0 голосов
/ 02 февраля 2019

Я делаю настольную игру с Tkinter.Я создаю сетку:

def create_grid(self):
    self.grid_frame = Frame(window)
    self.grid_frame.grid(row=1, column=0)
    self.grid_picture = PhotoImage(file="grid.PNG")
    self.grid_label = Label(self.grid_frame, image=self.grid_picture)
    self.grid_label.grid(row=0, column=0, columnspan=100, rowspan=10)

Затем пешки размещаются на основе их диктанта с начала:

def green_grid_translation(self, green_position):
    if green_position < 10:
        self.green_grid_row = 9
        self.green_grid_column = green_position*10+2
    elif green_position < 20:
        self.green_grid_row = 8
        self.green_grid_column = 92 - (green_position - 10)*10

Пешки размещаются на той же рамке, что и сетка, рамкасоздается снова с каждым ходом:

def position_interface(self):
    self.grid_frame = Frame(window)
    self.grid_frame.grid(row=1, column=0)
    self.grid_picture = PhotoImage(file="grid.PNG")
    self.grid_label = Label(self.grid_frame, image=self.grid_picture)
    self.grid_label.grid(row=0, column=0, columnspan=100, rowspan=10)
    self.green_picture = PhotoImage(file="green.png")
    self.green_symbol = Label(self.grid_frame, image=self.green_picture)
    self.green_symbol.grid(row=self.green_grid_row, column=self.green_grid_column)
    self.blue_picture = PhotoImage(file="blue.png")
    self.blue_symbol = Label(self.grid_frame, image=self.blue_picture)
    self.blue_symbol.grid(row=self.blue_grid_row, column=self.blue_grid_column)

Следующие циклы используются для их пошагового перехода:

for x in reversed(range(green_change[0])):
   run_grid.green_grid_translation(green_change[1] - x)
   run_grid.blue_grid_translation(blue_change[1])
   run_grid.position_interface()
   window.update()
   sleep(1)
for x in reversed(range(blue_change[0])):
    run_grid.green_grid_translation(green_change[1])
    run_grid.blue_grid_translation(blue_change[1] - x)
    run_grid.position_interface()
    window.update()
    sleep(1)

green_change [0] - количество шагов, которое предполагается пешкойдля перемещения, green_change 1 - это его позиция на сетке

Он отлично работает с одной пешкой, но когда их две, это похоже на изменение количества строк и столбцов и иногда на пешкиприземлиться в неправильных положениях: enter image description here

Есть ли способ исправить это или мне нужно использовать совершенно другой подход?

1 Ответ

0 голосов
/ 02 февраля 2019

Ваш подход неверен.Есть много вещей, которые можно улучшить, например, использование сна в приложении с графическим интерфейсом абсолютно нет.

Но для рассматриваемой проблемы вы просто используете неправильную абстракцию.Сетки предназначены для создания виджетов в обычных разметках.Но не для укладки / перестановки их.Это МОЖЕТ быть сделано, но я бы посоветовал против этого.

Используйте вместо холста.Это позволяет вам просто накладывать графические элементы и даже перемещать их (плавно, если вы так склонны!).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...