Гайд PyGame

substandard rank
Забаненный
Статус
Оффлайн
Регистрация
21 Янв 2019
Сообщения
424
Реакции[?]
113
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всех приветствую, сегодня попробую разъяснить основы 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 -
Пожалуйста, авторизуйтесь для просмотра ссылки.
(noad)

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

Чтобы отобразить ее, используем blit surface`a - screen.blit(image, (X, Y)) # blit(картинка, (x, y))
Советую ознакомиться с surface`ом pygame`a -
Пожалуйста, авторизуйтесь для просмотра ссылки.
(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 секунды

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

Исходник -
Пожалуйста, авторизуйтесь для просмотра ссылки.

VT (Python) -
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
gaysex
Начинающий
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
184
Реакции[?]
23
Поинты[?]
0
1.1. Запрещено размещение любых бессмысленных сообщений, которые не относятся к контексту темы, а так же размещение сообщений, состоящих из одних смайлов. Текст сообщения должен быть понятен любому пользователю.
стена
 
Забаненный
Статус
Оффлайн
Регистрация
19 Дек 2019
Сообщения
542
Реакции[?]
73
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всех приветствую, сегодня попробую разъяснить основы 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 -
Пожалуйста, авторизуйтесь для просмотра ссылки.
(noad)

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

Чтобы отобразить ее, используем blit surface`a - screen.blit(image, (X, Y)) # blit(картинка, (x, y))
Советую ознакомиться с surface`ом pygame`a -
Пожалуйста, авторизуйтесь для просмотра ссылки.
(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 секунды

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

Исходник -
Пожалуйста, авторизуйтесь для просмотра ссылки.

VT (Python) -
Пожалуйста, авторизуйтесь для просмотра ссылки.
хороший, для новичков будет полезен, а для меня нет, я это всё и до тебя знал((
 
Сверху Снизу