Движение шахматной фигуры 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)
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