Top.Mail.Ru
Ответы
Аватар пользователя
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Морской Бой на Python (нужно доделать код)

Нужно дополнить код и исправить ошибки по игре "Морской бой"
А именно:
1. На игровом поле ничего не отображается. (Нужен интерфейс попаданий и промахов)
2. Не простреливаются поля с координатой 10 (А10, B10 и т.д.) - пишет, что нет такой клетки.


123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
 import random 
  
# Создание игрового поля 
board_size = 10 
board = [[' ' for _ in range(board_size)] for _ in range(board_size)] 
  
# Расстановка кораблей компьютера 
def place_ships(): 
    ships = [5, 4, 3, 3, 2]  # Длины кораблей 
    directions = [(0, 1), (1, 0)]  # Горизонтальное и вертикальное направления 
  
    for ship in ships: 
        while True: 
            x = random.randint(0, board_size - 1) 
            y = random.randint(0, board_size - 1) 
            direction = random.choice(directions) 
  
            ship_cells = [] 
            for i in range(ship): 
                new_x = x + direction[0] * i 
                new_y = y + direction[1] * i 
  
                if new_x < 0 or new_x >= board_size or new_y < 0 or new_y >= board_size or board[new_x][new_y] != ' ': 
                    break 
  
                ship_cells.append((new_x, new_y)) 
  
            if len(ship_cells) == ship: 
                for cell in ship_cells: 
                    board[cell[0]][cell[1]] = 'O' 
                break 
  
# Вывод игрового поля 
def print_board(show_ships=False): 
    print('  ' + ' '.join([chr(i) for i in range(ord('A'), ord('A') + board_size)])) 
    for i in range(board_size): 
        print(str(i + 1).rjust(2) + ' ' + ' '.join(board[i]).replace('O', ' ').replace('X', ' ').replace('M', ' ')) 
  
# Ход игрока 
def player_turn(): 
    while True: 
        guess = input("Введите координаты (например, A1): ").upper() 
        if len(guess) != 2 or not guess[0].isalpha() or not guess[1].isdigit(): 
            print("Некорректные координаты. Попробуйте еще раз.") 
            continue 
  
        x = ord(guess[0]) - ord('A') 
        y = int(guess[1]) - 1 
  
        if x < 0 or x >= board_size or y < 0 or y >= board_size: 
            print("Некорректные координаты. Попробуйте еще раз.") 
            continue 
  
        if board[x][y] == 'O': 
            print("Попадание!") 
            board[x][y] = 'X' 
            return True 
        elif board[x][y] == ' ': 
            print("Промах!") 
            board[x][y] = 'M' 
            return False 
        else: 
            print("Вы уже стреляли в эту клетку. Попробуйте еще раз.") 
  
# Ход компьютера 
def computer_turn(): 
    while True: 
        x = random.randint(0, board_size - 1) 
        y = random.randint(0, board_size - 1) 
  
        if board[x][y] == 'O': 
            print("Компьютер попал!") 
            board[x][y] = 'X' 
            return True 
        elif board[x][y] == ' ': 
            print("Компьютер промахнулся!") 
            board[x][y] = 'M' 
            return False 
  
# Расстановка кораблей компьютера 
place_ships() 
  
# Основной игровой цикл 
while True: 
    print_board() 
  
    if player_turn(): 
        # Проверка окончания игры 
        if all([' ' not in row for row in board]): 
            print("Вы выиграли!") 
            break 
  
        print("Ваш ход снова.") 
  
    print("Ход компьютера:") 
    if computer_turn(): 
        # Проверка окончания игры 
        if all([' ' not in row for row in board]): 
            print("Компьютер выиграл!") 
            break 
  
    print("Ваш ход.") 
По дате
По рейтингу
Аватар пользователя

а где сам код умник