Примеры программ:
1. Вывод на экран зеленого квадратика размером 40х40
| 2. Перемещение красного квадрата по горизонтали в зеленом прямоугольнике
https://younglinux.info/pygame/surface
| import pygame
window = pygame.display.set_mode((400, 400))
pygame.display.set_caption("Hello!")
screen = pygame.Surface((40, 40))
done = True
while done:
for e in pygame.event.get():
if e.type == pygame.QUIT:
done = False
screen.fill((0, 250, 50))
window.blit(screen, (10, 70))
pygame.display.flip()
| from random import randint
import pygame
pygame.init()
sc = pygame.display.set_mode((400, 400))
background = pygame.Surface((400, 200))
background.fill((0, 255, 0))
xb = 0
yb = 100
hero = pygame.Surface((100, 100))
hero.fill((255, 0, 0))
x = 0
y = 50
# порядок прорисовки важен!
background.blit(hero, (x, y))
sc.blit(background, (xb, yb))
pygame.display.update()
while 1:
for i in pygame.event.get():
if i.type == pygame.QUIT:
exit()
elif i.type == pygame.MOUSEBUTTONUP:
yb = randint(0, 200)
if x < 400:
x += 2
else:
x = 0
sc.fill((0, 0, 0))
background.fill((0, 255, 0))
background.blit(hero, (x, y))
sc.blit(background, (xb, yb))
pygame.display.update()
pygame.time.delay(30)
|
3. Бесконечное перемещение черного прямоугольника по вертикали.
https://younglinux.info/pygame/surface
| 4. https://www.pvsm.ru/python/43434
| import pygame
pygame.init()
WIN_WIDTH = 800
WIN_HEIGHT = 600
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
class Rocket:
# ширина и высота у всех
# экземпляров-ракет будут одинаковы
width_rocket = 20
height_rocket = 50
def __init__(self, surface, color):
"""Конструктору необходимо передать поверхность, по которой
будет летать ракета и цвет самой ракеты"""
self.surf = surface
self.color = color
# Методы поверхности get_width() и get_height() возвращают ее размеры.
# Координаты верхнего левого угла ракеты устанавливаются так,
# чтобы ракета летела ровно по центру поверхности по горизонтали
# и появлялась снизу.
self.x = surface.get_width()//2 - Rocket.width_rocket//2
self.y = surface.get_height()
def fly(self):
"""Вызов метода fly() поднимает ракету на 3 пикселя.
Если ракета скрывается вверху, она снова появится снизу"""
pygame.draw.rect(self.surf, self.color, (self.x, self.y,
Rocket.width_rocket, Rocket.height_rocket))
self.y -= 3
# Если координата y ракеты уходит за -50, то значит она
# полностью скрылась вверху.
if self.y < -Rocket.height_rocket:
# Поэтому перебрасываем ракету под нижнюю границуокна.
self.y = WIN_HEIGHT
sc = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
# левая белая поверхность, равная половине окна
surf_left = pygame.Surface((WIN_WIDTH//2, WIN_HEIGHT))
surf_left.fill(WHITE)
# правая черная поверхность, равная другой половине окна
surf_right = pygame.Surface((WIN_WIDTH//2, WIN_HEIGHT))
# размещаем поверхности на главной, указывая координаты
# их верхних левых углов
sc.blit(surf_left, (0, 0))
sc.blit(surf_right, (WIN_WIDTH//2, 0))
# создаем черную ракету для левой поверхности
# ибелую - дляправой
rocket_left = Rocket(surf_left, BLACK)
rocket_right = Rocket(surf_right, WHITE)
# какая половина активна, до первого клика - никакая
active_left = False
active_right = False
while 1:
for i in pygame.event.get():
if i.type == pygame.QUIT:
exit()
elif i.type == pygame.MOUSEBUTTONUP:
# если координата X клика меньше половины окна,
# т. е. клик произошел в левой половине ...
if i.pos[0] < WIN_WIDTH//2:
# то активируем левую, отключаем правую
active_left = True
active_right = False
elif i.pos[0] > WIN_WIDTH//2:
# иначе - наоборот
active_right = True
active_left = False
if active_left:
# Если активна левая поверхность,
# то заливаем только ее цветом,
surf_left.fill(WHITE)
# поднимаем ракету,
rocket_left.fly()
# заново отрисовываем левую поверхность на главной.
sc.blit(surf_left, (0, 0))
elif active_right:
# Если активна правая -> аналогично
surf_right.fill(BLACK)
rocket_right.fly()
sc.blit(surf_right, (WIN_WIDTH//2, 0))
pygame.display.update()
pygame.time.delay(20)
| Создание игры. Более мотивированные учащиеся могут выполнить данное задание в индивидуальном порядке или во время дополнительных уроков.
| |