🔍 Как сделать сапера на питоне: пошаговый гайд для начинающих
Как сделать сапера на питоне?
Вот пример простой реализации игры "Сапер" на 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.