напиши шашки, по правилам международных шашек, для двух людей (объясни какая часть кода делает что, и как писать ходы в программу)
def create_board():
board = []
for _ in range(8):
row = [' '] * 8
board.append(row)
for i in range(3):
for j in range(8):
if (i + j) % 2 == 0:
board[i][j] = 'B'
for i in range(5, 8):
for j in range(8):
if (i + j) % 2 == 0:
board[i][j] = 'W'
return board
def print_board(board):
print(' 0 1 2 3 4 5 6 7')
for i in range(8):
print(str(i), end=' ')
for j in range(8):
print(board[i][j], end=' ')
print()
def valid_moves(board, row, col):
moves = []
directions = [[-1, -1], [-1, 1], [1, -1], [1, 1]]
for direction in directions:
move = []
newRow = row + direction[0]
newCol = col + direction[1]
if newRow >= 0 and newCol >= 0 and newRow < 8 and newCol < 8 and board[newRow][newCol] == ' ':
move.append(newRow)
move.append(newCol)
moves.append(move)
return moves
def make_move(board, move, turn, row, col):
newRow = move[0]
newCol = move[1]
board[newRow][newCol] = turn
if abs(newRow - row) == 2:
board[(row + newRow) // 2][(col + newCol) // 2] = ' '
def main():
board = create_board()
turn = 'B'
while True:
print_board(board)
if turn == 'B':
print('Ход чёрных. Введите координаты шашки, которой вы хотите совершить ход:')
else:
print('Ход белых. Введите координаты шашки, которой вы хотите совершить ход:')
row = int(input('Строка: '))
col = int(input('Столбец: '))
moves = valid_moves(board, row, col)
if len(moves) == 0:
print('Некорректный ход. Попробуйте ещё раз.')
continue
print('Доступные ходы:')
for i in range(len(moves)):
print('Ход', i+1, ' - Строка:', moves[i][0], 'Столбец:', moves[i][1])
moveIndex = int(input('Выберите ход: ')) - 1
if moveIndex < 0 or moveIndex >= len(moves):
print('Некорректный выбор. Попробуйте ещё раз.')
continue
make_move(board, moves[moveIndex], turn, row, col)
if turn == 'B':
turn = 'W'
else:
turn = 'B'
main()
Данный код реализует консольную игру в шашки по правилам международных шашек для двух игроков. Ходы в программу можно вносить с помощью клавиатуры.
Вначале создается шахматная доска 8x8 в виде двумерного списка с пустыми ячейками. Затем на доску расставляются черные и белые шашки согласно правилам.
def create_board():
board = []
for _ in range(8):
row = [' '] * 8
board.append(row)
for i in range(3):
for j in range(8):
if (i + j) % 2 == 0:
board[i][j] = 'B'
for i in range(5, 8):
for j in range(8):
if (i + j) % 2 == 0:
board[i][j] = 'W'
return board
Функция `print_board(board)` выводит текущее состояние шашечной доски на экран командной строки в удобном формате. Для печати используется двойной цикл `for`, который перебирает все ячейки доски и выводит их значения через пробел.
def print_board(board):
print(' 0 1 2 3 4 5 6 7')
for i in range(8):
print(str(i), end=' ')
for j in range(8):
print(board[i][j], end=' ')
print()
Функция `valid_moves(board, row, col)` проверяет для заданной шашки возможные ходы, которые можно сделать из данной позиции. Она возвращает список доступных ходов. Проверка осуществляется для всех четырех направлений (вверх-влево, вверх-вправо, вниз-влево, вниз-вправо). Ход считается доступным, если на новом поле нет шашки и оно находится в пределах доски.
def valid_moves(board, row, col):
moves = []
directions = [[-1, -1], [-1, 1], [1, -1], [1, 1]]
for direction in directions:
move = []
newRow = row + direction[0]
newCol = col + direction[1]
if newRow >= 0 and newCol >= 0 and newRow < 8 and newCol < 8 and board[newRow][newCol] == ' ':
move.append(newRow)
move.append(newCol)
moves.append(move)
return moves
Функция `make_move(board, move, turn, row, col)` изменяет состояние доски, осуществляя заданный ход. Она принимает доску, ход, текущего игрока и координаты выбранной шашки. Функция изменяет доску, устанавливая шашку в новую позицию и удаляя шашку оппонента, если был осуществлен ход на две клетки.
def make_move(board, move, turn, row, col):
newRow = move[0]
newCol = move[1]
board[newRow][newCol] = turn
if abs(newRow - row) == 2:
board[(row + newRow) // 2][(col + newCol) // 2] = ' '
Основная функция `main()` выполняет итерации по ходам до тех пор, пока игра не будет завершена. В каждой итерации выводится текущее состояние доски, отображается информация о предстоящем ходе, и игрок вводит координаты шашки, которой хочет сделать ход. Затем проверяется корректность введенных данных и список доступных ходов для выбранной шашки. Если список пустой, выводится соответствующее сообщение об ошибке, итерация процесса повторяется. Если список доступных ходов не пустой, выводится информация о всех доступных ходах. После этого игрок выбирает желаемый ход. Если выбор не соответствует никакому из доступных ходов, выводится соответствующее сообщение об ошибке, итерация процесса повторяется. Если выбор корректный, функция `make_move()` изменяет состояние доски согласно выбранному ходу. Затем передаем право хода следующему игроку, чтобы игра продолжилась, пока не будет достигнута конечная позиция игры.
def main():
board = create_board()
turn = 'B'
while True:
print_board(board)
if turn == 'B':
print('Ход чёрных. Введите координаты шашки, которой вы хотите совершить ход:')
else:
print('Ход белых. Введите координаты шашки, которой вы хотите совершить ход:')
row = int(input('Строка: '))
col = int(input('Столбец: '))
moves = valid_moves(board, row, col)
if len(moves) == 0:
print('Некорректный ход. Попробуйте ещё раз.')
continue
print('Доступные ходы:')
for i in range(len(moves)):
print('Ход', i+1, ' - Строка:', moves[i][0], 'Столбец:', moves[i][1])
moveIndex = int(input('Выберите ход: ')) - 1
if moveIndex < 0 or moveIndex >= len(moves):
print('Некорректный выбор. Попробуйте ещё раз.')
continue
make_move(board, moves[moveIndex], turn, row, col)
if turn == 'B':
turn = 'W'
else:
turn = 'B'
main()
Как делать ходы в программу:
- Когда программа запросит координаты шашки, которой вы хотите сделать ход, введите номер строки и столбца шашки на доске.
- Затем программа перечислит все доступные ходы для выбранной шашки. Введите номер выбранного хода и нажмите Enter.
- Если выбор был некорректным (например, вы ввели номер хода, которого нет в списке доступных ходов), программа выдаст сообщение об ошибке, и вы должны будете ввести корректный номер хода снова.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет