You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							630 lines
						
					
					
						
							23 KiB
						
					
					
				
			
		
		
	
	
							630 lines
						
					
					
						
							23 KiB
						
					
					
				| ---
 | |
| title: Библиотека Pygame Python
 | |
| excerpt: Библиотека для разработки игр Pygame
 | |
| date: '2023-11-08'
 | |
| tags:
 | |
|   - Информатика
 | |
|   - Программирование
 | |
|   - Python
 | |
|   - Задачи
 | |
|   - Pygame
 | |
| ---
 | |
| 
 | |
| <TableOfContents>
 | |
| - [Урок 1](#урок-1)
 | |
| - [Урок 2](#урок-2)
 | |
| </TableOfContents>
 | |
| 
 | |
| # Урок 1
 | |
| 
 | |
| pygame - это библиотека модулей для языка Python, созданная для разработки 2D игр.
 | |
| 
 | |
| Для того чтобы установить pygame на свой компьютер необходимо открыть командную строку или терминал и написать команду
 | |
| 
 | |
| ```python
 | |
| pip3 install pygame
 | |
| ```
 | |
| После установки необходимо создать новый файл и импортировать модуль pygame и написать шаблон игры
 | |
| 
 | |
| ```python
 | |
| # Импортируем библиотеку pygame
 | |
| import pygame
 | |
| # Импортируем системную функцию exit
 | |
| from sys import exit
 | |
| 
 | |
| # Инициализируем pygame
 | |
| pygame.init()
 | |
| 
 | |
| # Создаем окошко 800 пикселей шириной
 | |
| # и 600 пикселей высотой и записываем его
 | |
| # в переменную display.
 | |
| # Переменную display называют поверхностью.
 | |
| display = pygame.display.set_mode( (800, 600) )
 | |
| 
 | |
| # Основной цикл игры
 | |
| while True:
 | |
|     # Ждем события (действия пользователя)
 | |
|     for event in pygame.event.get():
 | |
|         # Если нажали на крестик,
 | |
|         # то закрываем окно
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
| 
 | |
|     # Обновляем поверхность игры
 | |
|     # на каждом шаге основного цикла игры
 | |
|     pygame.display.update()
 | |
| ```
 | |
| 
 | |
| Пользователь может взаимодействовать с нашей игрой. Каждое действие пользователя - это некоторое событие, которое мы можем обработать. Выражение pygame.event.get() - это список событий, произошедших в нашей игре.
 | |
| 
 | |
| Цикл for просто перебирает необработанные события. Каждое событие он присваивает переменной event (можно написать любую другую).
 | |
| 
 | |
| Поговорим о цикле while, основном цикле игры. Как часто он выполняется? Очень и очень часто, это зависит от мощности компьютера. Для обновления экрана в играх часто используют 60 кадров в секунду.
 | |
| 
 | |
| Ограничим количество выполнений цикла.
 | |
| ```python
 | |
| import pygame
 | |
| from sys import exit
 | |
| 
 | |
| pygame.init()
 | |
| 
 | |
| display = pygame.display.set_mode( (800, 600) )
 | |
| 
 | |
| FPS = 60 # Создаем переменную FPS
 | |
| clock = pg.time.Clock() # Создаем счетчик для FPS
 | |
| while True:
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
| 
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS) # Замедляем цикл до 60 выполнений в секунду
 | |
| ```
 | |
| Методу tick() передается желаемое количество кадров в секунду. Задержку он вычисляет сам. На каждой итерации основного цикла игры секунда делится на 60 и на вычисленную величину выполняется задержка.
 | |
| 
 | |
| Рисование фигур
 | |
| В библиотеке pygame существует множество функций для рисования различных фигур.
 | |
| 
 | |
| Функция polygon() рисует произвольную фигуру. Она принимает 3 обязательных параметра (поверхность, цвет и кортеж координат) и 1 необязательный (толщину линий).
 | |
| ```python
 | |
| import pygame
 | |
| from sys import exit
 | |
| 
 | |
| pygame.init()
 | |
| 
 | |
| display = pygame.display.set_mode( (800, 600) )
 | |
| 
 | |
| # Рисуем полигон (да, получится квадратик)
 | |
| pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) )
 | |
| 
 | |
| FPS = 60
 | |
| clock = pg.time.Clock()
 | |
| while True:
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
| 
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS)
 | |
| ```
 | |
| 
 | |
| display - наша поверхность
 | |
| 
 | |
| (255, 0, 0) - красный цвет, почитайте про rgb
 | |
| 
 | |
| ( (0, 0), (100, 0), (100, 100), (0, 100) ) - координаты вершин квадрата. Возьмите листочек и нарисуйте его координатах (замените сотню на единицу).
 | |
| 
 | |
| Давайте нарисуем треугольник
 | |
| ```python
 | |
| import pygame
 | |
| from sys import exit
 | |
| 
 | |
| pygame.init()
 | |
| 
 | |
| display = pygame.display.set_mode( (800, 600) )
 | |
| 
 | |
| # Рисуем квадратик
 | |
| pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) )
 | |
| # Рисуем синий треугольник
 | |
| pygame.draw.polygon( display, (0, 0, 255) , ( (100, 100), (200, 200), (100, 200) ) )
 | |
| 
 | |
| FPS = 60 # Создаем переменную FPS
 | |
| clock = pg.time.Clock()
 | |
| while True:
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
| 
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS)
 | |
| 
 | |
| display - поверхность
 | |
| ```
 | |
| (0, 0, 255) - синий цвет
 | |
| 
 | |
| ((100, 100), (200, 200), (100, 200)) - координаты вершин нашего треугольник.
 | |
| 
 | |
| Самостоятельно нарисуйте пятиугольник (вам помогут карандаш и лист бумаги)
 | |
| Рисование окружностей
 | |
| Чтобы нарисовать окружность нужно вызвать метод circle из модуля draw. Команда выглядит так: pygame.draw.circle(display, color, position, radius).
 | |
| 
 | |
| display - поверхность, на которой рисуем
 | |
| 
 | |
| color - цвет, записанный в кортеже из трех чисел. (еще раз про rgb)
 | |
| 
 | |
| position - координаты точки центра окружности (кортеж из двух чисел (x, y))
 | |
| 
 | |
| radius - радиус окружности в пикселях
 | |
| 
 | |
| ```python
 | |
| import pygame
 | |
| from sys import exit
 | |
| 
 | |
| pygame.init()
 | |
| 
 | |
| display = pygame.display.set_mode( (800, 600) )
 | |
| 
 | |
| # Рисуем квадратик
 | |
| pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) )
 | |
| # Рисуем синию линию
 | |
| pygame.draw.polygon( display, (0, 0, 255) , ( (100, 100), (200, 200), (100, 200) ) )
 | |
| # Рисуем желтую окружность с радиусом 100 пикселей
 | |
| pygame.draw.circle( display, (255, 255, 0) , (400,200), 100)
 | |
| 
 | |
| FPS = 60
 | |
| clock = pg.time.Clock()
 | |
| while True:
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
| 
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS)
 | |
| ```
 | |
| 
 | |
| display - наша поверхнотсть для рисования
 | |
| 
 | |
| (255, 255, 0) - желтый цвет
 | |
| 
 | |
| (400, 200) - координаты точки центра (в нашем случае 400 пикселей от верхнего левого угла по горизонтали и 200 пикселей по вертикали)
 | |
| 
 | |
| 100 - радиус нашей окружности в пикселях
 | |
| 
 | |
| Объявления переменных для цветов
 | |
| Для нашего с вами удобства давайте объявим несколько переменных, в которые сохраним используемые нами цвета
 | |
| ```python
 | |
| import pygame
 | |
| from sys import exit
 | |
| 
 | |
| pygame.init()
 | |
| 
 | |
| WHITE = (255, 255, 255)
 | |
| BLACK = (0, 0, 0)
 | |
| PURPLE = (156, 39, 176)
 | |
| INDIGO = (63, 81, 181)
 | |
| BLUE = (33, 150, 243)
 | |
| GREEN = (76, 175, 80)
 | |
| YELLOW = (255, 235, 59)
 | |
| ORANGE = (255, 152, 0)
 | |
| GREY = (158, 158, 158)
 | |
| 
 | |
| display = pygame.display.set_mode( (800, 600) )
 | |
| 
 | |
| # Рисуем квадратик
 | |
| pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) )
 | |
| # Рисуем синию линию
 | |
| pygame.draw.polygon( display, (0, 0, 255) , ( (100, 100), (200, 200), (100, 200) ) )
 | |
| # Рисуем желтую окружность с радиусом 100 пикселей
 | |
| pygame.draw.circle( display, (255, 255, 0) , (400,200), 100)
 | |
| 
 | |
| FPS = 60
 | |
| clock = pg.time.Clock()
 | |
| while True:
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
| 
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS)
 | |
| ```
 | |
| Рисование прямоугольников
 | |
| Для отрисовки прямоугольников можно использовать метод rect.
 | |
| 
 | |
| pygame.draw.rect(display, color, (x, y, width, height) )
 | |
| 
 | |
| color - цвет (теперь можно просто написать имя переменную)
 | |
| 
 | |
| (x, y, width, height) - кортеж из четырех значений. Первые два значения - это координаты верхнего левого угла прямоугольника, а два последних - это ширина и высота.
 | |
| 
 | |
| ```python
 | |
| import pygame
 | |
| from sys import exit
 | |
| 
 | |
| pygame.init()
 | |
| 
 | |
| WHITE = (255, 255, 255)
 | |
| BLACK = (0, 0, 0)
 | |
| PURPLE = (156, 39, 176)
 | |
| INDIGO = (63, 81, 181)
 | |
| BLUE = (33, 150, 243)
 | |
| GREEN = (76, 175, 80)
 | |
| YELLOW = (255, 235, 59)
 | |
| ORANGE = (255, 152, 0)
 | |
| GREY = (158, 158, 158)
 | |
| 
 | |
| display = pygame.display.set_mode( (800, 600) )
 | |
| 
 | |
| # Рисуем квадратик
 | |
| pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) )
 | |
| # Рисуем синию линию
 | |
| pygame.draw.polygon( display, (0, 0, 255) , ( (100, 100), (200, 200), (100, 200) ) )
 | |
| # Рисуем желтую окружность с радиусом 100 пикселей
 | |
| pygame.draw.circle( display, (255, 255, 0) , (400,200), 100)
 | |
| # Рисуем фиолетовый прямоугольник 200х300
 | |
| pygame.draw.rect( display, PURPLE , (600, 300, 200, 300))
 | |
| 
 | |
| FPS = 60
 | |
| clock = pg.time.Clock()
 | |
| while True:
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
| 
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS)
 | |
| ```
 | |
| 
 | |
| Если ваша творческая натура требует большего, то вот ссылка на документацию модулю draw
 | |
| 
 | |
| Там можно найти рисование линий, дуг, эллипсов.
 | |
| 
 | |
| Большой пример запусти его на компьтере:
 | |
| 
 | |
| ```python
 | |
| import pygame
 | |
| from sys import exit
 | |
| from random import randint
 | |
| # Функция, возвращающая случайный оттенок зеленого цвета
 | |
| def randomGreen():
 | |
|     return randint(0, 100), randint(100, 255), randint(0,100)
 | |
| # Функция, возвращающая случайный оттенок красного цвета
 | |
| def randomRed():
 | |
|     return randint(100, 255), randint(0, 100), randint(0,100)
 | |
| 
 | |
| pygame.init()
 | |
| display = pygame.display.set_mode( (600, 600) )
 | |
| display.fill((255,255,255))
 | |
| x = 100 # начальная позиция по оси X
 | |
| y = 100 # начальная позиция по оси Y
 | |
| while y < 500: # Пока мы не достигли точки с координатой y == 500
 | |
|     # Вложенный цикл для рисования линии из квадратиков
 | |
|     while x < 500: # Пока мы не достигли точки с координатой x == 500
 | |
|         # Рисуем квадратик с координатами x, y
 | |
|         pygame.draw.rect(display, randomGreen(), (x, y, 25, 25))
 | |
|         x += 25 # Смещаем позицию квадратика по оси X
 | |
|     # По завершению вложенного цикла увеличиваем переменную y
 | |
|     # для перехода на новую строчку
 | |
|     y += 25
 | |
|     x = 100 # Возвращаем позицию по оси X в начало строчки
 | |
| # Рисуем "мордочку" крипера
 | |
| pygame.draw.rect(display, (0,0,0), (150, 200, 100, 100))
 | |
| pygame.draw.rect(display, (0,0,0), (350, 200, 100, 100))
 | |
| pygame.draw.rect(display, (0,0,0), (250, 300, 100, 100))
 | |
| pygame.draw.rect(display, (0,0,0), (200, 350, 50, 100))
 | |
| pygame.draw.rect(display, (0,0,0), (350, 350, 50, 100))
 | |
| while True:
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
|     pygame.display.update()
 | |
| ```
 | |
| 
 | |
| Задания:
 | |
| 
 | |
| 1.Нарисуйте дерево из minecraft, используя полученные знания
 | |
| 
 | |
| 2.Нарисуйте оранжевую, красную, синию и фиолетовую звезды
 | |
| 
 | |
| <TableOfContents>
 | |
| - [Урок 1](#урок-1)
 | |
| - [Урок 2](#урок-2)
 | |
| </TableOfContents>
 | |
| 
 | |
| # Урок №2
 | |
| 
 | |
| Обработка нажатий клавиш клавиатуры
 | |
| 
 | |
| Создадим базовый шаблон для нашей игры
 | |
| 
 | |
| ```python
 | |
| import pygame
 | |
| from sys import exit
 | |
| 
 | |
| pygame.init()
 | |
| 
 | |
| WHITE = (255, 255, 255)
 | |
| BLACK = (0, 0, 0)
 | |
| PURPLE = (156, 39, 176)
 | |
| INDIGO = (63, 81, 181)
 | |
| BLUE = (33, 150, 243)
 | |
| GREEN = (76, 175, 80)
 | |
| YELLOW = (255, 235, 59)
 | |
| ORANGE = (255, 152, 0)
 | |
| GREY = (158, 158, 158)
 | |
| 
 | |
| display = pygame.display.set_mode( (800, 600) )
 | |
| 
 | |
| FPS = 60
 | |
| clock = pygame.time.Clock()
 | |
| while True:
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
| 
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS)
 | |
| ```
 | |
| 
 | |
| pygame отслеживает все происходящие в игре события и позволяет нам их обрабатывать. При возникновении события создается экземпляр класса Event. Каждый экземпляр этого класса имеет определенный список свойств. Одно из этих свойств - это свойство type. Именно оно позволяет нам понять, какое событие произошло.
 | |
| 
 | |
| События клавиатуры имеют тип KEYDOWN.
 | |
| 
 | |
| Еще одно важное свойство - это свойство key. Для нас оно представляет интерес, когда мы обнаружили событие с типом KEYDOWN. С помощью свойства key мы можем узнать, какая клавиша была нажата.
 | |
| 
 | |
| ```python
 | |
| import pygame
 | |
| from sys import exit
 | |
| 
 | |
| pygame.init()
 | |
| 
 | |
| WHITE = (255, 255, 255)
 | |
| BLACK = (0, 0, 0)
 | |
| PURPLE = (156, 39, 176)
 | |
| INDIGO = (63, 81, 181)
 | |
| BLUE = (33, 150, 243)
 | |
| GREEN = (76, 175, 80)
 | |
| YELLOW = (255, 235, 59)
 | |
| ORANGE = (255, 152, 0)
 | |
| GREY = (158, 158, 158)
 | |
| 
 | |
| display = pygame.display.set_mode( (800, 600) )
 | |
| 
 | |
| FPS = 60
 | |
| clock = pygame.time.Clock()
 | |
| while True:
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
|         elif event.type == pygame.KEYDOWN:
 | |
|             if event.key == pygame.K_LEFT:
 | |
|                 print('Левая стрелка')
 | |
|             elif event.key == pygame.K_RIGHT:
 | |
|                 print('Правая стрелка')
 | |
|             elif event.key ==pygame.K_UP:
 | |
|                 print('Стрелка вверх')
 | |
|             elif event.key ==pygame.K_DOWN:
 | |
|                 print('Стрелка вниз')
 | |
| 
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS)
 | |
| ```
 | |
| 
 | |
| После запуска скрипта при нажатии стрелок на клавиатуре в стандартный вывод будут выводится строки с информацией о нажатой клавише.
 | |
| 
 | |
| Напишем код, который будет рисовать кружок
 | |
| ```python
 | |
| pygame.draw.circle(display, BLUE, (400, 300), 5)
 | |
| # Добавьте этот скрипт после цикла while
 | |
| ```
 | |
| Заставим кружок двигаться. Нужно объявить две переменные - x и y. Эти переменные будут координатами нашего кружка. При нажатии клавиши мы будем изменять эти переменные. Если нажата стрелка вправо, увеличим переменную x на 10. Если - стрелка влево, уменьшим переменную x на 10. Проделаем то же самое с переменной y.
 | |
| ```python
 | |
| import pygame
 | |
| from sys import exit
 | |
| 
 | |
| pygame.init()
 | |
| 
 | |
| WHITE = (255, 255, 255)
 | |
| BLACK = (0, 0, 0)
 | |
| PURPLE = (156, 39, 176)
 | |
| INDIGO = (63, 81, 181)
 | |
| BLUE = (33, 150, 243)
 | |
| GREEN = (76, 175, 80)
 | |
| YELLOW = (255, 235, 59)
 | |
| ORANGE = (255, 152, 0)
 | |
| GREY = (158, 158, 158)
 | |
| 
 | |
| display = pygame.display.set_mode( (800, 600) )
 | |
| 
 | |
| FPS = 60
 | |
| clock = pygame.time.Clock()
 | |
| 
 | |
| x = 400 # начальная координата по оси X
 | |
| y = 300 # начальная координата по оси Y
 | |
| 
 | |
| while True:
 | |
|     # Рисуем кружок в точке с координатами x,y
 | |
|     pygame.draw.circle(display, BLUE, (x, y), 5)
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
|         elif event.type == pygame.KEYDOWN:
 | |
|             if event.key == pygame.K_LEFT:
 | |
|                 print('Левая стрелка')
 | |
|                 x -= 10
 | |
|             elif event.key == pygame.K_RIGHT:
 | |
|                 print('Правая стрелка')
 | |
|                 x += 10
 | |
|             elif event.key == pygame.K_UP:
 | |
|                 print('Стрелка вверх')
 | |
|                 y -= 10
 | |
|             elif event.key == pygame.K_DOWN:
 | |
|                 print('Стрелка вниз')
 | |
|                 y += 10
 | |
| 
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS)
 | |
| ```
 | |
| 
 | |
| Есть один нюанс. Шарик перемещается только один раз при зажатии одной из клавиш. Немного изменим наш код для того, чтобы он обратывал зажатые клавиш.
 | |
| 
 | |
| ```python
 | |
| # ... Код выше без изменений
 | |
| while True:
 | |
|     pygame.draw.circle(display, BLUE, (x, y), 5)
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
|     # Найдите 10 отличий
 | |
|     # Удаляем elif с KEYDOWN
 | |
|     keys = pygame.key.get_pressed() # Словарь всех нажатых клавиш
 | |
|     # Обрабатываем каждую клавишу по отдельности
 | |
|     if keys[pygame.K_LEFT]:
 | |
|         x -= 10
 | |
|     if keys[pygame.K_RIGHT]:
 | |
|         x += 10
 | |
|     if keys[pygame.K_UP]:
 | |
|         y -= 10
 | |
|     if keys[pygame.K_DOWN]:
 | |
|         y += 10
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS)
 | |
| ```
 | |
| 
 | |
| События мыши
 | |
| В pygame обрабатываются три типа событий мыши: нажатие кнопки (значение свойства type события соответствует MOUSEBUTTONDOWN), отпускание кнопки (MOUSEBUTTONUP), перемещение мыши (MOUSEMOTION). Какая именно кнопка была нажата, записывается в другое свойство события - button. Для левой кнопки это число 1, для средней - 2, для правой - 3, для прокручивания вперед - 4, для прокручивания назад - 5.
 | |
| 
 | |
| Другим атрибутом мышиных типов событий является свойство pos, в которое записываются координаты нажатия (кортеж из двух чисел).
 | |
| 
 | |
| При нажатии левой кнопки мыши будем рисовать оранжевый кружок
 | |
| ```python
 | |
| # Код выше без изменений...
 | |
| while True:
 | |
|     display.fill(BLACK)
 | |
|     pygame.draw.circle(display, BLUE, (x, y), 5)
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
|          elif event.type == pygame.MOUSEBUTTONDOWN:
 | |
|             if event.button == 1:
 | |
|                 pygame.draw.circle(display, ORANGE, (event.pos[0], event.pos[1]), 30)
 | |
|     keys = pygame.key.get_pressed()
 | |
|     if keys[pygame.K_LEFT]:
 | |
|         print('Левая стрелка')
 | |
|         x -= 10
 | |
|     if keys[pygame.K_RIGHT]:
 | |
|         print('Правая стрелка')
 | |
|         x += 10
 | |
|     if keys[pygame.K_UP]:
 | |
|         print('Стрелка вверх')
 | |
|         y -= 10
 | |
|     if keys[pygame.K_DOWN]:
 | |
|         print('Стрелка вниз')
 | |
|         y += 10
 | |
| 
 | |
| 
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS)
 | |
| ```
 | |
| Добавим появление белых кружков по нажатию правой кнопки мыши.
 | |
| ```python
 | |
| # Код выше без изменений...
 | |
| while True:
 | |
|     display.fill(BLACK)
 | |
|     pygame.draw.circle(display, BLUE, (x, y), 5)
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
|          elif event.type == pygame.MOUSEBUTTONDOWN:
 | |
|             if event.button == 1:
 | |
|                 pygame.draw.circle(display, ORANGE, (event.pos[0], event.pos[1]), 30)
 | |
|             elif event.button == 3:
 | |
|                 pygame.draw.circle(display, WHITE, (event.pos[0], event.pos[1]), 30)
 | |
|     keys = pygame.key.get_pressed()
 | |
|     if keys[pygame.K_LEFT]:
 | |
|         print('Левая стрелка')
 | |
|         x -= 10
 | |
|     if keys[pygame.K_RIGHT]:
 | |
|         print('Правая стрелка')
 | |
|         x += 10
 | |
|     if keys[pygame.K_UP]:
 | |
|         print('Стрелка вверх')
 | |
|         y -= 10
 | |
|     if keys[pygame.K_DOWN]:
 | |
|         print('Стрелка вниз')
 | |
|         y += 10
 | |
| 
 | |
| 
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS)
 | |
| ```
 | |
| Добавим очищение поверхности при скролле колесика мыши
 | |
| 
 | |
| ```python
 | |
| # Код выше без изменений...
 | |
| while True:
 | |
|     display.fill(BLACK)
 | |
|     pygame.draw.circle(display, BLUE, (x, y), 5)
 | |
|     for event in pygame.event.get():
 | |
|         if event.type == pygame.QUIT:
 | |
|             pygame.quit()
 | |
|             exit()
 | |
|          elif event.type == pygame.MOUSEBUTTONDOWN:
 | |
|             if event.button == 1:
 | |
|                 pygame.draw.circle(display, ORANGE, (event.pos[0], event.pos[1]), 30)
 | |
|             elif event.button == 3:
 | |
|                 pygame.draw.circle(display, WHITE, (event.pos[0], event.pos[1]), 30)
 | |
|             elif event.button == 5:
 | |
|                 display.fill(BLACK)
 | |
|     keys = pygame.key.get_pressed()
 | |
|     if keys[pygame.K_LEFT]:
 | |
|         print('Левая стрелка')
 | |
|         x -= 10
 | |
|     if keys[pygame.K_RIGHT]:
 | |
|         print('Правая стрелка')
 | |
|         x += 10
 | |
|     if keys[pygame.K_UP]:
 | |
|         print('Стрелка вверх')
 | |
|         y -= 10
 | |
|     if keys[pygame.K_DOWN]:
 | |
|         print('Стрелка вниз')
 | |
|         y += 10
 | |
| 
 | |
| 
 | |
|     pygame.display.update()
 | |
| 
 | |
|     clock.tick(FPS)
 | |
| ```
 | |
| 
 | |
| Задание:
 | |
| Создайте еще один перемещающийся объект, назначьте клавиши WASD для его перемещения. Ключи клавиш: W == K_w, A == K_a, D == K_d, S == K_s. Обратите внимание, что вам понадобятся новые переменные для координат, например, x1 и y1.
 | |
| 
 | |
| <TableOfContents>
 | |
| - [Урок 1](#урок-1)
 | |
| - [Урок 2](#урок-2)
 | |
| </TableOfContents> |