Я написал следующий код.
Код: Выделить всё
import pygame
from sys import exit
from random import randint
class Grid():
def __init__(self):
self.revealed = False
self.grid = []
self.cell_covers = [] # Store covering rectangles for each cell
def init_grid(self):
for _ in range(no_cells):
self.grid.append(no_cells * ["0"])
self.place_mines()
self.draw_elements()
self.create_cell_covers() # Create covering rectangles for each cell
def create_cell_covers(self):
for row in range(no_cells):
for col in range(no_cells):
cell_cover = pygame.Rect(row * cell_size + 1, col * cell_size + 1, cell_size/2, cell_size/2) # temporarily reduced cover size to see whats happening underneath
self.cell_covers.append(cell_cover)
print(self.cell_covers)
def cover_cells(self):
for cell_cover in self.cell_covers:
pygame.draw.rect(screen, ("grey"), cell_cover)
def reveal_cells(self):
for cell_cover in self.cell_covers:
pygame.draw.rect(screen, (0, 0, 0, 0), cell_cover)
def draw_elements(self):
self.draw_grid_lines()
self.draw_cells()
def draw_grid_lines(self):
for row in range(no_cells + 1):
pygame.draw.line(screen, ("black"), (row * cell_size, 0), (row * cell_size, width), width=2)
for col in range(no_cells + 1):
pygame.draw.line(screen, ("black"), (0, col * cell_size), (height, col * cell_size), width=2)
def draw_cells(self):
for row in range(no_cells):
for col in range(no_cells):
if self.grid[row][col] == "-1":
pygame.draw.circle(screen, ("black"),
(row * cell_size + cell_size / 2 + 1, col * cell_size + cell_size / 2 + 1),
cell_size * (3 / 10))
else:
no_neighbours = str(self.count_adjacent_mines(row, col))
neighbours_txt = font1.render(no_neighbours, False, (0, 0, 0))
screen.blit(neighbours_txt, (row * cell_size + cell_size / 2.5, col * cell_size + cell_size / 2.5))
def place_mines(self):
mines = []
while len(mines) < no_mines:
row = randint(0, no_cells - 1)
col = randint(0, no_cells - 1)
if self.grid[row][col] != '-1':
mines.append((row, col))
self.grid[row][col] = '-1'
def count_adjacent_mines(self, row, col):
count = 0
for i in range(-1, 2):
for j in range(-1, 2):
if (0
Подробнее здесь: [url]https://stackoverflow.com/questions/78353277/how-to-remove-a-rect-surface-in-pygame-without-deleting-what-is-underneath[/url]