substandard rank
-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всех приветствую, сегодня попробую разъяснить основы PyGame, библиотеки для языка Python.
Первым действием будет установка библиотеки. Для ее установки нажимаем Win + R, в открывшееся окно пишем - pip install pygame.
1. Основы
Подключаем библиотеку - import pygame. После этого создадим простой цикл:
Чтобы задать название нашему окну, прописываем эту строку
Во всех играх есть FPS (Frames per second). Чтобы добавить его в PyGame, нужно создать переменную с внутри игровым временем, а после задать количество FPS.
2. Работа с изображениями
Для загрузки изображений в PyGame есть модуль - image.load("путь до картинки").
Остальные функции модуля image -
Добавим 2 переменные - X и Y, они нужны для обозначения начальной точки изображения по X и Y.
У меня они будут равны 100.
Чтобы отобразить ее, используем blit surface`a -
Советую ознакомиться с surface`ом pygame`a -
В итоге получится такой код:
3. Перемещение изображения
На самом деле тут ничего трудного нет, добавляем проверку на новый тип KEYDOWN, а после проверяем какая кнопка нажата.
В коде это выглядит вот так:
Обязательно нужно перенести screen.fill((r, g, b)), чтобы изображение не оставалось на экране (иначе изображение будет "тянуться" за собой)
4. Добавление условных стен
Тут так же все просто, нужно просто проверять в каком месте наше изображение.
5. Вывод текста на экран
Создаем новую функцию:
Чтобы испытать ее, импортируем библиотеку time
В итоге получилось маленькое приложение, в котором изображение может передвигаться, но не может выйти за пределы стен.
При столкновении со стеной, выводится текст "Стена".
Исходник -
VT (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()
На самом деле тут ничего трудного нет, добавляем проверку на новый тип 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 пикселя (+-)
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() #Обнавляем экран
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) -
Пожалуйста, авторизуйтесь для просмотра ссылки.