Программирование. Питон.

Лекция 9. Pygame

Pygame – это фреймворк, разработанный специально для создания игр на Питоне, позволяющий работать с двумерной и трехмерной графикой, подключать графические и физические библиотеки.

Базовое приложение

import pygame

from pygame. locals import *

pygame. init() #иницилизация

window = pygame. display. set_mode((550, 480)) #размеры

pygame. display. set_caption('My own world') #заголовок

running = True; #обработка событий

while running:

for event in pygame. event. get(): #для каждого события

if event. type == pygame. QUIT: #нажатие кнопки ‘х’ окна

running = False #выйти из цикла обработки событий

if event. type == KEYDOWN: #нажатие клавиши

if event. key == K_ESCAPE: #ESC

running = False #выйти из цикла обработки событий

pygame. quit() #выход

Буферизация

Отрисовка объектов производится на «поверхность», surface.

Поверхность окна – pygame.display.get_surface()

Однако при отрисовке изменения появятся не сразу, так как Pygame поддерживает буферизацию вывода. Т. е. когда Вы отрисовываете что-то на поверхность окна – отрисовка происходит в задний буфер. Окно обновляется из буфера по специальной команде: pygame. display. flip()

Графические примитивы

surface = pygame. display. get_surface()

pygame. draw. line(surface,(10,100,100),(10,200),(20,300),20)

pygame. display. flip()

Методы:

pygame. draw. rect(Surface, color, Rect, width=0)
pygame. draw. polygon(Surface, color, pointlist, width=0)
pygame. draw. circle(Surface, color, pos, radius, width=0)
pygame. draw. ellipse(Surface, color, Rect, width=0)
pygame. draw. arc(Surface, color, Rect, start_angle, stop_angle, width=1)
pygame. draw. line(Surface, color, start_pos, end_pos, width=1)
pygame. draw. lines(Surface, color, closed, pointlist, width=1)
pygame. draw. aaline(Surface, color, startpos, endpos, blend=1)
pygame. draw. aalines(Surface, color, closed, pointlist, blend=1)

НЕ нашли? Не то? Что вы ищете?

Пример

import pygame

from pygame. locals import *

pygame. init()

window = pygame. display. set_mode((550, 480))

pygame. display. set_caption('My own little world')

screen = pygame. display. get_surface()

screen. fill((250, 150, 0))

x, y = screen. get_size() # размер экрана

background = rface((x / 2, y / 2)) #поверхность размером с половину экрана

background. fill((0, 150, 0)) # заполняем цветом

screen. blit(background, (x / 4, y / 4)) # рисуем заполненную одним цветом поверхность в центре

pygame. draw. line(screen,(10,100,10),(200,300),(20,300),20)

pygame. display. flip()

running = True;

while running:

for event in pygame. event. get():

if event. type == pygame. QUIT:

running = False

if event. type == KEYDOWN:

if event. key == K_ESCAPE:

running = False

pygame. quit()

Изображения

pygame. image. load(filename)

pygame. image. save(Surface, filename)

import pygame

from pygame. locals import *

def load_img (name):

try:

image = pygame. image. load(name)

except pygame. error, message:

print "Cannot load image:", name

raise SystemExit, message

return image

pygame. init()

window = pygame. display. set_mode((550, 480))

pygame. display. set_caption('View image')

screen = pygame. display. get_surface()

image = load_img('1.gif');

image = image. convert()

screen. blit(image, (0, 0))

pygame. display. flip()

running = True;

while running:

for event in pygame. event. get():

if event. type == pygame. QUIT:

running = False

if event. type == KEYDOWN:

if event. key == K_ESCAPE:

running = False

pygame. quit()

Звук

http://www. pygame. org/docs/ref/mixer. html

http://www. pygame. org/docs/ref/music. html

Возможно задание 1 потокового аудио (через pygame. mixer. music ) и множества отдельных звуковых каналов с предварительной загрузкой (через pygame. mixer. sound и pygame. mixer. channel).

Пример с фоновым звуком и звуком на событие (нажатие r)

import pygame

from pygame. locals import *

pygame. init()

window = pygame. display. set_mode((550, 480))

pygame. display. set_caption('My own little world')

window. fill((0,0,0), (0,0,10,10))

pygame. display. flip()

pygame. mixer. music. load('1.mp3')

pygame. mixer. music. play(-1) #цикличное воспроизведение

pygame. mixer. music. set_volume(0.1)

#music = pygame. mixer. Sound('music. ogg') #альтернативный вариант без стриминга

#music_channel = music. play(-1) #цикличное воспроизведение

#music_channel. set_volume(0.1)

sound = pygame. mixer. Sound('step. ogg')

running = True;

while running:

for event in pygame. event. get():

if event. type == pygame. QUIT:

running = False

if event. type == KEYDOWN:

if event. key == K_ESCAPE:

running = False

if event. key == K_m:

pygame. mixer. music. pause()

if event. key == K_l:

pygame. mixer. music. unpause()

if event. key == K_r:

sound. play()

pygame. quit()