ГАЙД PyGame

Статус
В этой теме нельзя размещать новые ответы.
  • 80
  • 4
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всех приветствую, сегодня попробую разъяснить основы PyGame, библиотеки для языка Python.
Первым действием будет установка библиотеки. Для ее установки нажимаем Win + R, в открывшееся окно пишем - pip install pygame.

1. Основы

Подключаем библиотеку - import pygame. После этого создадим простой цикл:
Python:
import pygame #Импортируем библиотеку
from pygame.locals import * #Импортируем названия/типы и тд

def main(): #Создаем основную функцию
IsWorking = True #Добавляем переменную для цикла

pygame.init() #Инитиализируем pygame
screen = pygame.display.set_mode((640, 480)) #Задаем параметры окна set_mode((x, y), flags, depth)
screen.fill((0, 150, 200)) #Заполняем окно цветом fill((r, g, b), rect, flags)

pygame.display.flip() #Обновляем дисплей (иначе все что мы делали не отобразится)

while IsWorking: #Пока наша переменная равна True цикл работает
for event in pygame.event.get(): #Создаем цикл event`ов pygame`a (нажатие клавиш, выход и тд)
if event.type == QUIT: #Если текущий event = нажатию на кнопку закрытия окна
IsWorking = False #Приравниваем нашу переменную к False, чтобы завершить цикл
pygame.display.update() #Обновляем дисплей до завершения цикла
pygame.quit() #Заканчиваем работу с pygame



if __name__ == '__main__': #Запускаем основную функцию
main()
Чтобы задать название нашему окну, прописываем эту строку

pygame.display.set_caption('Название') #Задаем название нашему окну

Во всех играх есть FPS (Frames per second). Чтобы добавить его в PyGame, нужно создать переменную с внутри игровым временем, а после задать количество FPS.

clock = pygame.time.Clock() #Внутриигровое время
clock.tick(60) #Количество фреймов в секунду (FPS)
#Ставить после display.update()


2. Работа с изображениями

Для загрузки изображений в PyGame есть модуль - image.load("путь до картинки").

image = pygame.image.load("golf.png") #Загружаем картинку

Остальные функции модуля image - pygame.image — pygame v2.6.0 documentation (noad)

Добавим 2 переменные - X и Y, они нужны для обозначения начальной точки изображения по X и Y.
У меня они будут равны 100.

Чтобы отобразить ее, используем blit surface`a - screen.blit(image, (X, Y)) # blit(картинка, (x, y))
Советую ознакомиться с surface`ом pygame`a - pygame.Surface — pygame v2.6.0 documentation (noad)

В итоге получится такой код:
Python:
import pygame #Импортируем библиотеку
from pygame.locals import * #Импортируем названия/типы и тд

def main(): #Создаем основную функцию
IsWorking = True #Добавляем переменную для цикла

pygame.init() #Инитиализируем pygame

clock = pygame.time.Clock() #Внутриигровое время

pygame.display.set_caption('PyGame Lib') #Задаем название нашему окну

screen = pygame.display.set_mode((500, 500)) #Задаем параметры окна set_mode((x, y), flags, depth)
screen.fill((0, 150, 200)) #Заполняем окно цветом fill((r, g, b), rect, flags)

pygame.display.flip()

X = 100
Y = 100

image = pygame.image.load("golf.png") #Загружаем картинку
image = pygame.transform.scale(image, (100, 100)) #Масштабируем изображение


while IsWorking: #Пока наша переменная равна True цикл работает
for event in pygame.event.get(): #Создаем цикл event`ов pygame`a (нажатие клавиш, выход и тд)
if event.type == QUIT: #Если текущий event = нажатию на кнопку закрытия окна
IsWorking = False #Приравниваем нашу переменную к False, чтобы завершить цикл


screen.blit(image, (X, Y)) #Помещаем изображение на экран
pygame.display.update() #Обновляем экран
clock.tick(60) #Устанавливаем задержку

pygame.quit() #Заканчиваем работу с pygame




if __name__ == '__main__': #Запускаем основную функцию
main()
3. Перемещение изображения

На самом деле тут ничего трудного нет, добавляем проверку на новый тип KEYDOWN, а после проверяем какая кнопка нажата.
В коде это выглядит вот так:
Python:
if event.type == KEYDOWN: #Если любая из кнопок нажата
if event.key == K_LEFT: #Левая стрелка
x_moving = -2 #Приравниваем переменную отвечающую за перемещение к -2 (влево на 2 пикселя)
elif event.key == K_RIGHT: #Правая стрелка
x_moving = 2 #Вправо на 2 пикселя
elif event.key == K_UP: #Верхняя стрелка
y_moving = -2 #Перемещение вверх на 2 пикселя
elif event.key == K_DOWN: #Нижняя стрелка
y_moving = 2 #Вниз на 2 пикселя

if event.type == KEYUP: #Если любая кнопка отжата
if event.key == K_LEFT or event.key == K_RIGHT or event.key == K_UP or event.key == K_DOWN: #Проверка "отжатости" кнопок
x_moving = 0 #Эта проверка нужна для остановки движения
y_moving = 0

X += x_moving #Прибавляем к X 2 пикселя (+-)
Y += y_moving #Прибавляем к Y 2 пикселя (+-)
Обязательно нужно перенести screen.fill((r, g, b)), чтобы изображение не оставалось на экране (иначе изображение будет "тянуться" за собой)
Python:
screen.fill((0, 150, 200)) #Заполняем окно цветом fill((r, g, b), rect, flags)

screen.blit(image, (X, Y))
pygame.display.update()
clock.tick(60)

4. Добавление условных стен

Тут так же все просто, нужно просто проверять в каком месте наше изображение.
Python:
if X > 0 and X <= (500 - 100): # Если позиция по X не возле стен
X += x_moving #Прибавляем к X 2 пикселя (+-)
elif X < 1: #Если X < края левой стены
X += 2
elif X > (500 - 100): #Если X > края правой стены
X -= 2

if Y > 0 and Y <= (500 - 100): # Если позиция по X не возле стен
Y += y_moving #Прибавляем к Y 2 пикселя (+-)
elif Y < 1: #Если Y < край верхней стены
Y += 2
elif Y > (500 - 100): #Если Y > края нижней стены
Y -= 2


5. Вывод текста на экран

Создаем новую функцию:
Python:
def msg(screen, text):
textsize = pygame.font.Font('freesansbold.ttf',50) #Добавляем шрифт
textsurface = textsize.render(text, True, (0,0,0)) #"Добавляем на картинку текст"
textrect = textsurface.get_rect() #Получаем размеры
textrect.center = ((500/2),(500/2)) #Устанавливаем центр (размер окна X/2, размер окна Y/2)
screen.blit(textsurface, textrect) #Добавляем на экран

pygame.display.update() #Обнавляем экран
Чтобы испытать ее, импортируем библиотеку time import time и добавим этот код перед screen.fill((0, 150, 200))
:

Python:
if X < 1 or X > (500 - 100) or Y < 1 or Y > (500 - 100): #Проверка на стены
msg(screen, "Стена") #Выводим сообщение "Стена"
time.sleep(0.5) #Останавливаем скрипт на 0.5 секунды

В итоге получилось маленькое приложение, в котором изображение может передвигаться, но не может выйти за пределы стен.
При столкновении со стеной, выводится текст "Стена".

Исходник - Yandex
VT (Python) - https://www.virustotal.com/gui/file...db38554a541f7d94d279aa97da70e9f29ba/detection
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу