Статья Автор: Омарбек Нұр-Мұхаммед

Примеры 1

Пример проекта - Виртуальное пианино

Идея проекта проста: на экране отображаются клавиши виртуального пианино, и если клавиши нажаты, то они воспроизводят определённую ноту.

 

1. Начать стоит со структуры проекта.

import sys
import pygame
pygame.init()

SIZE = WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode(SIZE)
clock = pygame.time.Clock()

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    screen.fill((255, 255, 255))

    pygame.display.update()

    clock.tick(30)

 

2. Затем следует описать класс для создания клавиш виртуального пианино.

Свойства класса:

  • x и y - стартовая позиция клавиши
  • image - поверхность объекта
  • rect - прямоугольник объекта

 

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

pygame.draw.rect(self.image, (0, 0, 0), (0, 0, ширина, высота), 1)

 

Метод класса:

  • .draw() - метод для рисования клавиши на экране

 

Размер клавиши в примере 40 x 120.


3. С помощью цикла нужно создать 8 клавиш (8 экземпляров класса). Каждую клавишу можно сохранить в список. Тогда внутри основного цикла программы нужно перебрать каждый элемент списка и к каждому элементу применить метод .draw().

 

 

4. С помощью анимации нужно показать активную клавишу. Например, можно изменять цвет границ при касании с курсором мыши. Для этого нужно добавить метод .update() и описать условие пересечения прямоугольника с координатами мыши.

class Key(pygame.sprite.Sprite):
    def __init__(self, x, y):
        ...

    def update(self, x, y):
        if self.rect.collidepoint(x, y):
            pygame.draw.rect(self.image, (255, 0, 0), (0, 0, 40, 120), 1)
        else:
            pygame.draw.rect(self.image, (0, 0, 0), (0, 0, 40, 120), 1)

    def draw(self):
        ...
  • Если клавиша пересекается с курсором мыши, то границы клавиши будут красными
  • А иначе - чёрными

 

В основной цикл программы нужно добавить проверку события pygame.MOUSEMOTION:

...

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        elif event.type == pygame.MOUSEMOTION:
            x = event.pos[0]
            y = event.pos[1]
            ...

    ...

И для каждого элемента списка вызвать метод .update().

 

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать