Найти в Дзене

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 минуты