Движение шахматной фигуры Python

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

Если есть блокирующая фигура, я хочу, чтобы моя программа перестала добавлять больше потенциальных ходов,

введите здесь описание изображения

^^ Не дубликат; Я консультировался с другими источниками

Классы для епископов:

class Bishop(Piece):
    def __init__(self, x, y, pl, im):
        Piece.__init__(self, x, y, pl, im) 

    def findAvailableMoves(self):
        for i in range(1, 8):
            for (dx, dy) in [(i, i), (i, -i), (-i, i), (-i, -i)]:
                if self.inBoundsPiece(self.cor.x + dx, self.cor.y + dy):
                    if board.board[self.cor.y + dy][self.cor.x + dx] == None:
                    self.potentialMoves.append((self.cor.y + dy, self.cor.x + dx))

class WBishop(Bishop):
    def __init__(self, x, y):
        Bishop.__init__(self, x, y, 1, wBishop)

class BBishop(Bishop):
    def __init__(self, x, y):
        Bishop.__init__(self, x, y, 2, bBishop)

person myang0630    schedule 22.02.2020    source источник
comment
Если для вашего вопроса требуется изображение, загрузите его через редактор вопросов, чтобы оно было размещено в надежном месте.   -  person Chris    schedule 23.02.2020
comment
Можете ли вы уточнить, какую проблему вы пытаетесь решить? Код и изображение, кажется, показывают, что это действительно находит все клетки, на которые мог бы переместиться слон, если бы на пути не было других фигур. В вашем коде нет ничего, чтобы остановить добавление потенциальных ходов при встрече с блокирующей фигурой, все, что он делает, это не добавляет собственное местоположение блокирующей фигуры к потенциальным ходам.   -  person cschatz    schedule 23.02.2020
comment
Да, основная проблема в том, что если бы была блокирующая фигура, я бы хотел, чтобы моя программа перестала добавлять больше потенциальных ходов.   -  person myang0630    schedule 23.02.2020


Ответы (1)


Я думаю, что самое простое решение — изменить порядок петель так, чтобы внешняя петля проходила по четырем направлениям, а внутренняя — по расстояниям. Затем остановите внутренний цикл, когда встретится блокирующий элемент. Вы также можете остановить внутренний цикл, как только поиск выйдет за пределы.

def findAvailableMoves(self):
    for (dx, dy) in [(1, 1), (1, -1), (-1, 1), (-1, -1)]:
        for i in range(1, 8):
            (x, y) = (self.cor.x + i*dx, self.cor.y + i*dy)
            if self.inBoundsPiece(x, y) and board.board[x][y] == None:
                self.potentialMoves.append((x, y))
            else:
                break
person cschatz    schedule 22.02.2020