Design Decision re Synchronizing Logical board и GUI Board в 2D настольных играх - PullRequest
0 голосов
/ 21 января 2020

Я делаю настольную игру в Python и пытаюсь сохранить свои логики игры c и отображать логики c отдельно.

"Квадраты" для моей доски GUI в настоящее время экземпляры класса Square с его собственными атрибутами и методом рисования.

Для отображения квадратов, составляющих доску, я не понимаю, нужно ли:

1: иметь две доски представления, логическое и графическое, и убедитесь, что они всегда синхронизированы. Выполните итерацию по списку Square объектов, вызывающих метод рисования каждого из них по очереди в обработчике рисования для отображения доски.

или

2: внутри обработчика рисования нарисуйте квадраты " с нуля »на основе логической платы. Возможно использование (импортированных) вспомогательных функций для достижения этой цели.

В общем, при создании графических интерфейсов для существующих представлений таких вещей, как доски в 2D-играх, когда-либо имеет смысл сохранять и синхронизировать как логическое, так и графическое представление ? Имеет ли смысл вообще иметь класс Square? Если это так, то, возможно, это должно быть stati c?

Мой Square класс ниже, чтобы дать некоторый контекст этому вопросу.

class Square:
    """
    A class for creating graphical squares.
    """
    def __init__(self, size, pos, color, has_queen=False):
        """
        Class constructor.
        """
        self.size = size
        self.pos = pos
        self.color = color
        self.has_queen = has_queen

    def get_has_queen(self):
        """
        Return True if this square has a queen, else False.
        """
        return self.has_queen

    def set_has_queen(self, val):
        """
        Set the has_queen property for this square.
        """
        self.has_queen = val

    def is_in(self, pos):
        """
        Determine whether coordinates are within the area of this Square
        """
        return self.pos[0] < pos[0] < self.pos[0] + self.size and self.pos[1] < pos[1] < self.pos[1] + self.size

    def draw(self, canvas):
        """
        calls canvas.draw_image() to display self on canvas
        """
        points = [(self.pos[0], self.pos[1]), (self.pos[0] + self.size, self.pos[1]),
                  (self.pos[0] + self.size, self.pos[1] + self.size), (self.pos[0], self.pos[1] + self.size)]
        canvas.draw_polygon(points, 1, self.color, self.color)

        if self.has_queen:
            canvas.draw_image(
                queen_image,  # The image source
                (queen_image_size[0] // 2, queen_image_size[1] // 2),  # Position of the center of the source image
                queen_image_size,  # width and height of source
                (self.pos[0] + self.size // 2, self.pos[1] + self.size // 2),
                # Where the center of the image should be drawn on the canvas
                (self.size, self.size)  # Size of how the image should be drawn
            )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...