1151 подписчик
import pygame
import sys
import random
# --- Настройки ---
GRID_SIZE = 15 # Размер сетки (15x15)
CELL_SIZE = 40 # Размер одной клетки в пикселях
WINDOW_WIDTH = GRID_SIZE * CELL_SIZE
WINDOW_HEIGHT = GRID_SIZE * CELL_SIZE
FPS = 60
# Цвета спрайтов (ключ - значение в массиве, значение - цвет RGB)
SPRITE_COLORS = {
0: (50, 50, 50), # Темно-серый
1: (200, 60, 60), # Красный
2: (60, 200, 60), # Зеленый
3: (60, 60, 200), # Синий
4: (220, 220, 80) # Желтый
}
SELECTED_BORDER_COLOR = (255, 255, 255) # Белый цвет рамки выделения
BORDER_THICKNESS = 3 # Толщина рамки
def create_grid(rows, cols):
"""Генерирует сетку rows x cols со случайными значениями от 0 до 4."""
return [[random.randint(0, len(SPRITE_COLORS) - 1) for _ in range(cols)] for _ in range(rows)]
def get_cell_from_mouse(pos):
"""
Преобразует пиксельные координаты мыши в индексы ячейки сетки.
Возвращает кортеж (row, col).
"""
x, y = pos
if 0 <= x < WINDOW_WIDTH and 0 <= y < WINDOW_HEIGHT:
return y // CELL_SIZE, x // CELL_SIZE
return None
def main():
pygame.init()
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption("Выбор спрайта на сетке 15x15")
clock = pygame.time.Clock()
# Создаем наш массив данных 15x15
grid_data = create_grid(GRID_SIZE, GRID_SIZE)
selected_cell = None # Хранит кортеж (row, col) выбранной ячейки или None
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1: # Левая кнопка мыши
cell_coords = get_cell_from_mouse(event.pos)
if cell_coords is not None:
row, col = cell_coords
selected_cell = (row, col)
value = grid_data[row][col]
print(f"Выбрана ячейка: Строка {row}, Столбец {col} (индекс [{row}][{col}])")
print(f"Значение в массиве: {value}")
# --- Отрисовка ---
screen.fill((30, 30, 30)) # Фон игрового поля
# Рисуем все спрайты (квадраты)
for row in range(GRID_SIZE):
for col in range(GRID_SIZE):
value = grid_data[row][col]
color = SPRITE_COLORS.get(value, (255, 0, 255)) # Маджента если ключа нет
rect = pygame.Rect(
col * CELL_SIZE,
row * CELL_SIZE,
CELL_SIZE,
CELL_SIZE
)
pygame.draw.rect(screen, color, rect)
# Если выбрана ячейка, рисуем поверх нее рамку
if selected_cell is not None:
row, col = selected_cell
highlight_rect = pygame.Rect(
col * CELL_SIZE + BORDER_THICKNESS // 2,
row * CELL_SIZE + BORDER_THICKNESS // 2,
CELL_SIZE - BORDER_THICKNESS,
CELL_SIZE - BORDER_THICKNESS
)
pygame.draw.rect(screen, SELECTED_BORDER_COLOR, highlight_rect, width=BORDER_THICKNESS)
# Опциональная сетка для лучшей видимости границ
for i in range(GRID_SIZE + 1):
line_color = (60, 60, 60)
# Горизонтальные линии
pygame.draw.line(screen, line_color, (0, i * CELL_SIZE), (WINDOW_WIDTH, i * CELL_SIZE), 1)
# Вертикальные линии
pygame.draw.line(screen, line_color, (i * CELL_SIZE, 0), (i * CELL_SIZE, WINDOW_HEIGHT), 1)
pygame.display.flip()
clock.tick(FPS)
pygame.quit()
sys.exit()
if __name__ == '__main__':
main()
2 минуты
25 августа