🔍 Как сделать сапера на питоне: пошаговый гайд для начинающих

Как сделать сапера на питоне?

Вот пример простой реализации игры "Сапер" на Python:


import random

def create_board(rows, cols, mines):
    board = [[' ' for _ in range(cols)] for _ in range(rows)]
    placed_mines = 0
    while placed_mines < mines:
        row = random.randint(0, rows-1)
        col = random.randint(0, cols-1)
        if board[row][col] != 'X':
            board[row][col] = 'X'
            placed_mines += 1
    return board

def print_board(board):
    for row in board:
        print(' '.join(row))

def count_adjacent_mines(board, row, col):
    count = 0
    rows = len(board)
    cols = len(board[0])
    for i in range(max(0, row-1), min(row+2, rows)):
        for j in range(max(0, col-1), min(col+2, cols)):
            if board[i][j] == 'X':
                count += 1
    return count

def reveal_square(board, row, col):
    if board[row][col] != ' ':
        return
    mines = count_adjacent_mines(board, row, col)
    board[row][col] = str(mines)
    if mines == 0:
        rows = len(board)
        cols = len(board[0])
        for i in range(max(0, row-1), min(row+2, rows)):
            for j in range(max(0, col-1), min(col+2, cols)):
                if board[i][j] == ' ':
                    reveal_square(board, i, j)

def play_game(rows, cols, mines):
    board = create_board(rows, cols, mines)
    print_board(board)
    while True:
        row = int(input("Введите строку: "))
        col = int(input("Введите столбец: "))
        if board[row][col] == 'X':
            print("Game Over!")
            print("Проигрыш!")
            break
        else:
            reveal_square(board, row, col)
            print_board(board)
            if all(' ' not in row for row in board):
                print("Победа!")
                break

play_game(10, 10, 10)

Выше приведен код, который создает игровое поле для "Сапера" с помощью функции create_board и отображает его с помощью функции print_board. Функция count_adjacent_mines считает количество соседних мин на игровом поле. Функция reveal_square открывает выбранную клетку и показывает цифру, обозначающую количество соседних мин.

Вызов функции play_game запускает саму игру, предлагая вводить строку и столбец клетки на каждом ходу. Если открыта клетка с миной, игра заканчивается, и выводится сообщение "Game Over!" и "Проигрыш!". Если все клетки без мин открыты, игра завершается, и выводится сообщение "Победа!".

Детальный ответ

Как сделать сапера на питоне

В этой статье мы поговорим о том, как создать игру "Сапер" с использованием языка программирования Python. Во время обучения нашей школы компьютерных наук (CS Highschool) вам поможет активное изучение и использование сократического стиля общения.

Шаг 1: Настройте игровую сетку

Сначала нам нужно создать игровую сетку. Мы можем представить ее в виде двумерного списка, где каждый элемент будет ячейкой на игровом поле. Значение "0" будет обозначать пустую ячейку, а значение "1" будет обозначать ячейку с миной. Мы также можем использовать значение "2" для ячеек без мины, но показывающих количество мин вокруг них.


def create_grid(size, num_mines):
    grid = [[0] * size for _ in range(size)]
    # Добавьте код для случайного распределения мин на сетке
    return grid

grid = create_grid(10, 15)

Шаг 2: Распределите мины по сетке

Теперь нам нужно распределить мины по сетке. Мы можем использовать модуль random в Python для случайного выбора позиций для мин. Убедитесь, что вы не размещаете несколько мин в одной ячейке.


import random

def place_mines(grid, num_mines):
    size = len(grid)
    positions = random.sample(range(size * size), num_mines)
    for pos in positions:
        row = pos // size
        col = pos % size
        grid[row][col] = 1

place_mines(grid, 15)

Шаг 3: Подсчитайте количество мин вокруг каждой клетки

Этот шаг поможет нам определить числа, отображаемые в ячейках без мины. Мы будем итерировать по каждой ячейке и подсчитывать количество мин вокруг нее. Если ячейка содержит мину, мы пропускаем ее. В противном случае, мы увеличиваем значение ячейки на 1 для каждой соседней ячейки с миной.


def count_mines_around(grid, row, col):
    size = len(grid)
    count = 0
    for i in range(max(0, row - 1), min(row + 2, size)):
        for j in range(max(0, col - 1), min(col + 2, size)):
            if grid[i][j] == 1:
                count += 1
    return count

def update_numbers(grid):
    size = len(grid)
    for i in range(size):
        for j in range(size):
            if grid[i][j] != 1:
                grid[i][j] = count_mines_around(grid, i, j)

update_numbers(grid)

Шаг 4: Отобразите игровое поле и обработайте действия пользователя

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


def display_grid(grid):
    size = len(grid)
    for i in range(size):
        for j in range(size):
            if grid[i][j] == 1:
                print("*", end=" ")  # Мина
            elif grid[i][j] == 0:
                print(".", end=" ")  # Пустая ячейка
            else:
                print(grid[i][j], end=" ")  # Количество мин вокруг
        print()

def play_game(grid):
    size = len(grid)
    num_uncovered = 0
    while True:
        display_grid(grid)
        row = int(input("Введите строку: "))
        col = int(input("Введите столбец: "))
        if row < 0 or row >= size or col < 0 or col >= size:
            print("Ошибка: Некорректные координаты.")
            continue
        if grid[row][col] == 1:
            print("Вы выбрали ячейку с миной. Игра окончена!")
            break
        if grid[row][col] == 0:
            num_uncovered += 1
        if num_uncovered == size * size - num_mines:
            print("Поздравляем, вы выиграли!")
            break

play_game(grid)

Вы только что узнали, как создать игру "Сапер" на языке программирования Python. Этот проект демонстрирует применение списков, случайных чисел и условных операторов в Python.

Видео по теме

Игра "Сапер" на Python, создаем игровое поле. Minesweeper in Python Tkinter

✅КАК СОЗДАТЬ "Игру сапёр"На Python🐍🐍🐍

Игра "Сапер" на Python, создаем класс MineSwepper. Minesweeper in Python Tkinter

Похожие статьи:

Java разработчик или Python разработчик: кто лучше?

5 причин, почему Python был назван Python 🐍

🐍 Что нужно знать разработчику питона? 🤔

🔍 Как сделать сапера на питоне: пошаговый гайд для начинающих

Как сделать чтобы окно не закрывалось в Python Turtle 🐢

🔥 Простой способ открыть другой файл python в python: руководство для начинающих

Как импортировать файл python в python: подробное руководство с примерами | НИЗКАЯ СЛОЖНОСТЬ