Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- WHITE = 1
- BLACK = 2
- # Фигуры
- class Pawn:
- '''Пешка'''
- def __init__(self, row, col, color):
- self.row = row
- self.col = col
- self.color = color
- def set_position(self, row, col):
- self.row = row
- self.col = col
- def char(self):
- return 'P'
- def get_color(self):
- return self.color
- def can_move(self, row, col):
- # Пешка может ходить только по вертикали
- # "взятие на проходе" не реализовано
- if self.col != col:
- return False
- # Пешка может сделать из начального положения ход на 2 клетки
- # вперёд, поэтому поместим индекс начального ряда в start_row.
- if self.color == WHITE:
- direction = 1
- start_row = 1
- else:
- direction = -1
- start_row = 6
- # ход на 1 клетку
- if self.row + direction == row:
- return True
- # ход на 2 клетки из начального положения
- if self.row == start_row and self.row + 2 * direction == row:
- return True
- return False
- class Bishop:
- def __init__(self, row, col, color):
- self.row = row
- self.col = col
- self.color = color
- def set_position(self, row, col):
- self.row = row
- self.col = col
- def char(self):
- return 'B'
- def get_color(self):
- return self.color
- def can_move(self, row, col):
- pass
- class Rook(Pawn):
- '''Ладья'''
- def __init__(self, row, col, color):
- super().__init__(row, col, color)
- def char(self):
- return 'R'
- def can_move(self, row, col):
- if self.row != row and self.col != col:
- return False
- return True
- # Доска
- class Board:
- def __init__(self):
- self.color = WHITE
- self.field = []
- for row in range(8):
- self.field.append([None] * 8)
- # Пешка белого цвета в клетке E2.
- self.field[1][4] = Pawn(1, 4, WHITE)
- self.field[0][0] = Rook(0, 0, WHITE)
- def current_player_color(self):
- return self.color
- def cell(self, row, col):
- """Возвращает строку из двух символов. Если в клетке (row, col)
- находится фигура, символы цвета и фигуры. Если клетка пуста,
- то два пробела."""
- piece = self.field[row][col]
- if piece is None:
- return ' '
- color = piece.get_color()
- c = 'w' if color == WHITE else 'b'
- return c + piece.char()
- def move_piece(self, row, col, row1, col1):
- """Переместить фигуру из точки (row, col) в точку (row1, col1).
- Если перемещение возможно, метод выполнит его и вернет True.
- Если нет --- вернет False"""
- if not correct_coords(row, col) or not correct_coords(row1, col1):
- return False
- if row == row1 and col == col1:
- return False # нельзя пойти в ту же клетку
- piece = self.field[row][col]
- if piece is None:
- return False
- if piece.get_color() != self.color:
- return False
- if not piece.can_move(row1, col1):
- return False
- self.field[row][col] = None # Снять фигуру.
- self.field[row1][col1] = piece # Поставить на новое место.
- piece.set_position(row1, col1)
- self.color = opponent(self.color)
- return True
- def correct_coords(row, col):
- """Функция проверяет, что координаты (row, col) лежат
- внутри доски"""
- return 0 <= row < 8 and 0 <= col < 8
- def opponent(color):
- if color == WHITE:
- return BLACK
- return WHITE
- def print_board(board): # Распечатать доску в текстовом виде (см. скриншот)
- print(' +----+----+----+----+----+----+----+----+')
- for row in range(7, -1, -1):
- print(' ', row, end=' ')
- for col in range(8):
- print('|', board.cell(row, col), end=' ')
- print('|')
- print(' +----+----+----+----+----+----+----+----+')
- print(end=' ')
- for col in range(8):
- print(col, end=' ')
- print()
- def main():
- # Создаём шахматную доску
- board = Board()
- # Цикл ввода команд игроков
- while True:
- # Выводим положение фигур на доске
- print_board(board)
- # Подсказка по командам
- print('Команды:')
- print(' exit -- выход')
- print(' move <row> <col> <row1> <col1> -- ход из клетки (row, col)')
- print(' в клетку (row1, col1)')
- # Выводим приглашение игроку нужного цвета
- if board.current_player_color() == WHITE:
- print('Ход белых:')
- else:
- print('Ход черных:')
- command = input()
- if command == 'exit':
- break
- move_type, row, col, row1, col1 = command.split()
- row, col, row1, col1 = int(row), int(col), int(row1), int(col1)
- if board.move_piece(row, col, row1, col1):
- print('Ход успешен')
- else:
- print('Координаты некорректы! Попробуйте другой ход!')
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement