Menu
CoddyTech

初めてのクラス

CoddyのPygameジャーニー「スプライトと画像」セクションの一部。レッスン 10/36。

星を表す変数は3つあります。star_x、star_y、star_speedです。星が1つならこれで十分ですが、空いっぱいの星を扱うには、それぞれの星の数値をまとめて管理するもっとよい方法が必要です。

クラスは、ある種類のオブジェクトを作るための設計図です。そこから作られた各オブジェクトは、属性と呼ばれる独自の値を持ちます。

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__を実行します。これはクラス内にある、各オブジェクトを新しく作るときに初期設定する関数です(両側にアンダースコアが2つずつ付いた名前は、Pythonが探す名前です)。その際、x = 320とy = 0が渡されます。関数内では、selfは新しいオブジェクトを指すため、self.x = xによって320がそのオブジェクトに保存されます。クラスの外では、同じ値にstar.xでアクセスでき、同じように変更できます。star.y += star.speedのように書きます。

クラス名は大文字で始めます。Starは設計図で、starはそこから作られた星の1つです。

challenge icon

チャレンジ

簡単
  1. self.x、self.y、self.speed = 2を格納するクラスStarを作成します。__init__(self, x, y)を使います。
  2. 3つの変数を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プレイグラウンド