Я пытался создать шахматную программу с помощью 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 и сбросить весь процесс, но это не сработало , Любое возможное решение, которое я выброшу, похоже, не работает. Мне нужна помощь.