Как составить правила для фигур в шахматной программе? - PullRequest
0 голосов
/ 18 апреля 2020

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

class Piece(object):
    def __init__(self, x_init, y_init, color):
        self.x_init = x_init
        self.y_init = y_init
        self.color = color
        self.possible_positions = False
        self.width = 60
        self.height = 60
        self.click = False
        self.click_rect = sprites[0].get_rect(topleft=(self.x_init, self.y_init))
        self.init1 = True
        self.x_newinit = 0
        self.y_newinit = 0
        self.final_pos = False

    def movement(self):
        global x, y
        for event in ev:

            if self.init1:
                self.x_newinit = self.x_init
                self.y_newinit = self.y_init

            if event.type == pygame.MOUSEBUTTONDOWN:
                if self.click_rect.collidepoint(event.pos):
                    self.click = True
                    self.init1 = True
                    x, y = event.pos

            elif event.type == pygame.MOUSEBUTTONUP:
                self.click = False
                self.x_init = (((round(self.x_init / 75)) * 75) + 7.5)
                self.y_init = (((round(self.y_init / 75)) * 75) + 7.5)
                if not self.possible_positions:
                    self.x_init = self.x_newinit
                    self.y_init = self.y_newinit

            if event.type == pygame.MOUSEMOTION:
                self.init1 = False
                if self.click:
                    if 25 < x < 580:
                        self.x_init = x - 30
                    if 20 < y < 580:
                        self.y_init = y - 30
                    self.click_rect = sprites[0].get_rect(topleft=(self.x_init, self.y_init))



class King(Piece):
    def __init__(self, x_init, y_init, color):
        super().__init__(x_init, y_init, color)
        self.x_init = x_init
        self.y_init = y_init
        self.color = color
        self.final_pos = False

    def draw(self, gameWindow):
        if not self.final_pos:
            gameWindow.blit(sprites[0], (self.x_init, self.y_init))  # draw white king

    def draw2(self, gameWindow):
        if not self.final_pos:
            gameWindow.blit(sprites[6], (self.x_init, self.y_init))  # draw black king

    def poss_positions(self):
        if self.x_newinit - 37.5 >= self.x_init >= self.x_newinit - 112.5:  # move left
            self.possible_positions = True
        elif self.x_newinit + 37.5 <= self.x_init <= self.x_newinit + 112.5:  # move right
            self.possible_positions = True
        elif self.y_newinit - 37.5 >= self.y_init >= self.y_newinit - 112.5:  # move up
            self.possible_positions = True
        elif self.y_init - 37.5 >= self.y_newinit >= self.y_init - 112.5:  # move down
            self.possible_positions = True
        else:
            self.possible_positions = False

Королевские фигуры следуют правилам self.poss_positions и возвращаются в исходное положение, когда я пытаюсь их неправильно перемещать, но затем они застряли там, и я не могу переместите их снова. Я попытался определить новые переменные и установить их равными self.x_init и self.y_init при определенных условиях, чтобы я мог сбросить переменные self.x_newinit и self.y_newinit в 0 и сбросить весь процесс, но это не сработало , Любое возможное решение, которое я выброшу, похоже, не работает. Мне нужна помощь.

...