Как удалить прямоугольную поверхность в pygame, не удаляя то, что находится под ней [дубликат]Python

Программы на Python
Anonymous
Как удалить прямоугольную поверхность в pygame, не удаляя то, что находится под ней [дубликат]

Сообщение Anonymous »

Я сейчас воссоздаю игру «Сапер» в качестве введения в pygame. В настоящее время я построил дисплей, показывающий мины и количество мин, окружающих каждую ячейку. Я пытаюсь реализовать способ скрытия всех ячеек до тех пор, пока они не будут нажаты. Проблема, с которой я столкнулся, заключается в том, что когда я пытаюсь снять крышку ячейки, она удаляет все, что находится под ней, оставляя только черный прямоугольник. Как мне это исправить?
Я написал следующий код.

Код: Выделить всё

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]

Вернуться в «Python»