Pygameの基本コードの読み解き
前回示したPygameの基本コードをふたたび示します。今回学んだ内容で読み解くことができます。一部足りない部分を補いつつ、処理の内容を確かめましょう。
import pygame # Pygameをインポート pygame.init() # Pygameを初期化 screen = pygame.display.set_mode((800, 600)) # 画面作成 image = pygame.image.load("icon.png") # 画像読み込み running = True # 実行継続フラグ while running: for event in pygame.event.get(): # イベント if event.type == pygame.QUIT: # 種類がQUITなら running = False # 終了 screen.fill((0, 0, 0)) # 画面を塗りつぶす screen.blit(image, (32, 32)) # 描画 pygame.display.flip() # 画面フリップ pygame.quit() # Pygameを終了
冒頭は、前回読み解いた部分です。Pygameをインポートして初期化します。
import pygame # Pygameをインポート pygame.init() # Pygameを初期化
画面の作成
続いて画面の作成です。
screen = pygame.display.set_mode((800, 600)) # 画面作成
(800, 600)
は、横幅と高さの2つの整数を持つタプルです。このタプルを引数にしてpygame.display.set_mode()
関数を実行します。
この.
で区切られている関数は、pygame
のdisplay
のset_mode()
関数という意味です。この関数を実行した結果の戻り値(ウィンドウの描画先)を、=
で、変数screen
に代入します。
変数screen
には、Surface
オブジェクトというものが入ります。オブジェクトは、変数と関数を持ったデータ構造です。オブジェクトの変数や関数は、.
を使ってscreen.変数名
、screen.関数名()
と書くことで利用できます。
画像の読み込み
次は画像の読み込みです。
image = pygame.image.load("icon.png") # 画像読み込み
"icon.png"
は、ファイルのパスを表すテキストです。このテキストを引数にしてpygame.image.load()
関数を実行します。この関数はpygame
のimage
のload()
関数という意味です。この関数を実行した結果の戻り値(読み込んだ画像)を、変数image
に代入します。
変数image
には、読み込んだ画像から作られたSurface
オブジェクトが入ります。
Pygameの基本ループ
次はwhile
文です。
running = True # 実行継続フラグ while running: # 処理のグループ # runningがTrueのあいだ繰り返す pygame.quit() # Pygameを終了
変数running
に、真偽値True
を代入します。そして、while
文で、この変数running
の値がTrue
のあいだ、インデントした処理のグループを繰り返します。
変数running
の値がFalse
に変更されたら、while
文を抜けて、pygame.quit()
関数を実行します。pygame.quit()
関数が実行されたら、Pygameは終了します。
イベント処理
次はwhile
文の内側の、for
文の処理です。
for event in pygame.event.get(): # イベント if event.type == pygame.QUIT: # 種類がQUITなら running = False # 終了
pygame.event.get()
関数はリストを返します。for event in pygame.event.get():
の部分は、for 変数 in リスト:
という処理と同じです。
pygame.event.get()
で得たリストには、ウィンドウ操作やキー操作、マウス操作といった、イベントの情報が入っています。イベントとは「発生した出来事」という意味です。
リストに入ったイベントを、for
文で1つずつ見ていき、event.type
が、pygame.QUIT
と同じかを、比較演算子==
で確認します。同じなら、if
文のインデントした処理のグループを実行します。その際は、変数running
にFalse
を代入します。
変数running
の値がFalse
になると、先ほど説明したwhile running:
の条件式がFalse
になります。そのときはwhile
文を抜けて、Pygameの処理を終了します。
画面の塗りつぶし
次は、画面を黒色で塗りつぶす処理です。
screen.fill((0, 0, 0)) # 画面を塗りつぶす
fill()
というのは、PygameのSurface
オブジェクトの関数の1つです。この関数は、色を表すタプルか、pygame.Color
オブジェクトを引数にします。ここでは色を表すタプルを引数にします。
色を表すタプルには、RGB(赤緑青)の3つの値を書きます。各色は0〜255(0が暗い、255が明るい)です。
画像の描画
次は、画像を描画します。
screen.blit(image, (32, 32)) # 描画
変数screen
(ウィンドウの描画先)のblit()
関数で画像を描画します。描画する画像は、変数image
(読み込んだ画像)で、位置は(32, 32)
のタプルです。
(32, 32)
は、X座標とY座標を表します。画面の描画は、左上がX座標0、Y座標0になります。数学のグラフとはY座標の向きが異なるので注意が必要です。
画面のフリップ
次は、画面をフリップします。
pygame.display.flip() # 画面フリップ
pygame.display.flip()
関数で、画面をフリップします。画面のフリップ(入れ替え)は、ゲーム開発でよく出てきます。描いている途中の画面は表示せずに、描き終わったところで表示させる手法です。こうすると、描きかけの状態を画面に表示せずに済みます。
まとめと次回
Pythonの文法を学び進めることで、Pygameの基本コードを読み解けるようになりました。次は自分で処理を書けるようになるための準備です。
ゲームを開発するには、自分で処理を組み立ててプログラムを書いていく必要があります。そこで次回は、自分で関数を作る「関数の定義」と、長くなったプログラムのファイルを分ける「モジュールやパッケージ」について学んでいきます。
また、ゲームを作る基本機能になる、Pygameの画像、図形、文字の描画、キーやマウスの入力、BGMやSEの再生について学んでいきます。