Menu
CoddyTech

Lớp đầu tiên của bạn

Thuộc phần Sprite và hình ảnh trong hành trình Pygame của Coddy. Bài học 10 trên 39.

Ngôi sao gồm ba biến: star_x, star_y và star_speed. Cách này ổn với một ngôi sao, nhưng bầu trời đầy sao cần một cách tốt hơn để nhóm các con số của từng ngôi sao lại với nhau.

Một lớp là bản thiết kế cho một loại đối tượng. Mỗi đối tượng được tạo từ lớp đó có các giá trị riêng, gọi là thuộc tính:

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


star = Star(320, 0)

Star(320, 0) tạo một đối tượng Star mới. Sau đó, Python chạy __init__ trên đối tượng đó, hàm bên trong lớp dùng để thiết lập từng đối tượng mới (Python tìm tên này, có hai dấu gạch dưới ở mỗi bên), với x = 320 và y = 0. Bên trong hàm, self là đối tượng mới, nên self.x = x lưu giá trị 320 vào đối tượng đó. Bên ngoài lớp, bạn truy cập cùng giá trị bằng star.x và thay đổi theo cách tương tự: star.y += star.speed.

Tên lớp bắt đầu bằng chữ in hoa: Star là bản thiết kế, còn star là một ngôi sao được tạo từ bản thiết kế đó.

challenge icon

Thử thách

Dễ

Lưu các giá trị của ngôi sao trong một đối tượng.

  1. Viết một lớp Star có __init__(self, x, y) lưu self.x, self.y và self.speed = 2.
  2. Thay ba biến bằng star = Star(320, 0).
  3. Trong vòng lặp, dùng star.x, star.y và star.speed ở những chỗ có các biến cũ.

Nhấn Chơi: ngôi sao rơi như trước. Sau đó nhấn Kiểm tra.

Tự làm thử

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()

Tất cả bài học trong Sprite và hình ảnh

Tự luyện tập: Playground Pygame