Menu
CoddyTech

Ваш первый класс

Часть раздела Спрайты и изображения путешествия по Pygame на Coddy. Урок 10 из 36.

Звезда — это три переменные: star_x, star_y и star_speed. Для одной звезды этого достаточно; для неба, полного звёзд, нужен более удобный способ хранить числа каждой звезды вместе.

Класс — это план для определённого типа объекта. Каждый созданный на его основе объект хранит собственные значения, называемые атрибутами:

class Star:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = 2


star = Star(320, 0)

Star(320, 0) создаёт новый объект Star. Затем Python запускает для него __init__ — функцию внутри класса, которая настраивает каждый новый объект (это имя, окружённое с обеих сторон двумя символами подчёркивания, ищет Python), — с x = 320 и y = 0. Внутри self — это новый объект, поэтому self.x = x сохраняет в нём значение 320. За пределами класса получить то же значение можно через star.x, а изменить его можно так же: star.y += star.speed.

Имена классов начинаются с заглавной буквы: Star — это план, а star — созданная по нему звезда.

challenge icon

Задание

Легко
  1. Создай класс Star, в котором __init__(self, x, y) сохраняет self.x, self.y и self.speed = 2.
  2. Замени три переменные на star = Star(320, 0).
  3. В цикле используй star.y, star.speed и star.x вместо прежних переменных.

Попробуйте сами

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Falling Star")
clock = pygame.time.Clock()

star_x = 320
star_y = 0
star_speed = 2

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    star_y += star_speed
    if star_y > 480:
        star_y = 0

    screen.fill((20, 22, 40))
    pygame.draw.circle(screen, (255, 255, 255), (star_x, star_y), 4)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Все уроки раздела Спрайты и изображения

Потренируйтесь самостоятельно: Песочница Pygame