> For the complete documentation index, see [llms.txt](https://pygame.gitbook.io/razrabotchiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://pygame.gitbook.io/razrabotchiki/teoriya/grafika-i-animaciya.md).

# Графика и анимация

<https://colorscheme.ru/color-names.html> здесь можно узнать цвет[<br>](https://colorscheme.ru/color-names.html)<https://colorscheme.ru/> подобрать цвета можно здесь

В Pygame можно выполнять различные операции с изображениями для создания динамичных и визуально привлекательных игр. Вот основные операции, которые можно выполнить с изображениями:

#### Загрузка и отображение изображений

1. **Загрузка изображения**:

   ```python
   image = pygame.image.load('path_to_image.png').convert_alpha()
   ```
2. **Отображение изображения**:

   ```python
   screen.blit(image, (x, y))
   ```

#### Обработка прозрачности

1. **Установка прозрачности**:

   ```python
   image = pygame.image.load('path_to_image.png').convert_alpha()
   ```
2. **Установка цвета ключевой прозрачности**:

   ```python
   image.set_colorkey((255, 0, 255))  # Розовый цвет станет прозрачным
   ```

#### Масштабирование изображений

1. **Изменение размера изображения**:

   ```python
   scaled_image = pygame.transform.scale(image, (new_width, new_height))
   ```
2. **Масштабирование изображения с сохранением пропорций**:

   ```python
   scaled_image = pygame.transform.scale(image, (int(image.get_width() * scale_factor), int(image.get_height() * scale_factor)))
   ```

#### Поворот изображений

1. **Поворот изображения**:

   ```python
   rotated_image = pygame.transform.rotate(image, angle)  # Угол в градусах
   ```
2. **Мгновенный поворот изображения** (влево и вправо):

   ```python
   rotated_image = pygame.transform.flip(image, flip_x, flip_y)  # flip_x и flip_y - логические значения
   ```

#### Обрезка изображений

1. **Обрезка изображения**:

   ```python
   cropped_image = image.subsurface((x, y, width, height))
   ```

#### Работа с цветами

1. **Изменение цвета пикселей**:

   ```python
   for y in range(image.get_height()):
       for x in range(image.get_width()):
           if image.get_at((x, y)) == (255, 0, 0):  # Если пиксель красный
               image.set_at((x, y), (0, 255, 0))  # Заменить на зеленый
   ```
2. **Заполнение изображения цветом**:

   ```python
   image.fill((0, 255, 0))  # Заполнить изображение зеленым цветом
   ```

#### Анимация изображений

1. **Создание анимированного спрайта**:

   ```python
   class AnimatedSprite(pygame.sprite.Sprite):
       def __init__(self, images, x, y):
           super().__init__()
           self.images = [pygame.image.load(img).convert_alpha() for img in images]
           self.index = 0
           self.image = self.images[self.index]
           self.rect = self.image.get_rect()
           self.rect.topleft = (x, y)
           self.animation_speed = 0.1
           self.current_time = 0

       def update(self, dt):
           self.current_time += dt
           if self.current_time >= self.animation_speed:
               self.current_time = 0
               self.index = (self.index + 1) % len(self.images)
               self.image = self.images[self.index]

   images = ['frame1.png', 'frame2.png', 'frame3.png']
   animated_sprite = AnimatedSprite(images, 100, 100)
   ```

#### Спрайты и группы спрайтов

1. **Создание спрайта**:

   ```python
   class Player(pygame.sprite.Sprite):
       def __init__(self, image_path, x, y):
           super().__init__()
           self.image = pygame.image.load(image_path).convert_alpha()
           self.rect = self.image.get_rect()
           self.rect.topleft = (x, y)

       def update(self, keys):
           if keys[pygame.K_LEFT]:
               self.rect.x -= 5
           if keys[pygame.K_RIGHT]:
               self.rect.x += 5
           if keys[pygame.K_UP]:
               self.rect.y -= 5
           if keys[pygame.K_DOWN]:
               self.rect.y += 5

   player = Player('player_image.png', 100, 100)
   ```
2. **Создание группы спрайтов**:

   ```python
   all_sprites = pygame.sprite.Group()
   all_sprites.add(player)
   ```
3. **Обновление и отрисовка спрайтов**:

   ```python
   all_sprites.update()
   all_sprites.draw(screen)
   ```

#### Работа с альфа-каналом

1. **Применение альфа-канала**:

   ```python
   image.set_alpha(128)  # Установить прозрачность изображения на 50%
   ```

#### Повторяющиеся изображения (тайлы)

1. **Отображение тайлов на фоне**:

   ```python
   tile = pygame.image.load('tile_image.png').convert_alpha()
   for y in range(0, HEIGHT, tile.get_height()):
       for x in range(0, WIDTH, tile.get_width()):
           screen.blit(tile, (x, y))
   ```

#### Пример игры с использованием различных операций с изображениями (для примера файлы можно скачать [здесь](https://drive.google.com/drive/folders/16EFf4fRzO6NINEMZHwk1M65Ia91DdXvm?usp=sharing))

```python
import pygame
import sys

# Инициализация Pygame
pygame.init()

# Создание окна
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Image Operations Example")

# Цвета
WHITE = (255, 255, 255)

# Загрузка и масштабирование изображения
player_image = pygame.image.load('player_image.png').convert_alpha()
player_image = pygame.transform.scale(player_image, (50, 50))

# Загрузка фона
background_image = pygame.image.load('background_image.png').convert()

# Создание спрайта игрока
class Player(pygame.sprite.Sprite):
    def __init__(self, image, x, y):
        super().__init__()
        self.image = image
        self.rect = self.image.get_rect()
        self.rect.topleft = (x, y)

    def update(self, keys):
        if keys[pygame.K_LEFT]:
            self.rect.x -= 5
        if keys[pygame.K_RIGHT]:
            self.rect.x += 5
        if keys[pygame.K_UP]:
            self.rect.y -= 5
        if keys[pygame.K_DOWN]:
            self.rect.y += 5

# Создание группы спрайтов
player = Player(player_image, WIDTH // 2, HEIGHT // 2)
all_sprites = pygame.sprite.Group()
all_sprites.add(player)

# Основной игровой цикл
running = True
clock = pygame.time.Clock()
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    all_sprites.update(keys)

    screen.blit(background_image, (0, 0))  # Отображение фона
    all_sprites.draw(screen)  # Отображение всех спрайтов
    pygame.display.flip()

    clock.tick(30)

pygame.quit()
sys.exit()
```

Этот пример показывает, как выполнять различные операции с изображениями, включая загрузку, отображение, масштабирование, поворот, обработку прозрачности, создание анимации и работу со спрайтами.
