SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

レトロ風ゲームを作って学ぶPython入門

【作って学ぶPython】基本の文法を学んでコードを読み解けるようになろう!

レトロ風ゲームを作って学ぶPython入門 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Pygameの基本コードの読み解き

 前回示した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()関数を実行します。

 この.で区切られている関数は、pygamedisplayset_mode()関数という意味です。この関数を実行した結果の戻り値(ウィンドウの描画先)を、=で、変数screenに代入します。

 変数screenには、Surfaceオブジェクトというものが入ります。オブジェクトは、変数と関数を持ったデータ構造です。オブジェクトの変数や関数は、.を使ってscreen.変数名screen.関数名()と書くことで利用できます。

画像の読み込み

 次は画像の読み込みです。

画像の読み込み
image = pygame.image.load("icon.png")   # 画像読み込み

 "icon.png"は、ファイルのパスを表すテキストです。このテキストを引数にしてpygame.image.load()関数を実行します。この関数はpygameimageload()関数という意味です。この関数を実行した結果の戻り値(読み込んだ画像)を、変数imageに代入します。

 変数imageには、読み込んだ画像から作られたSurfaceオブジェクトが入ります。

Pygameの基本ループ

 次はwhile文です。

Pygameの基本ループ
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文のインデントした処理のグループを実行します。その際は、変数runningFalseを代入します。

 変数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座標の向きが異なるので注意が必要です。

X座標とY座標
X座標とY座標

画面のフリップ

 次は、画面をフリップします。

画面のフリップ
    pygame.display.flip()   # 画面フリップ

 pygame.display.flip()関数で、画面をフリップします。画面のフリップ(入れ替え)は、ゲーム開発でよく出てきます。描いている途中の画面は表示せずに、描き終わったところで表示させる手法です。こうすると、描きかけの状態を画面に表示せずに済みます。

まとめと次回

 Pythonの文法を学び進めることで、Pygameの基本コードを読み解けるようになりました。次は自分で処理を書けるようになるための準備です。

 ゲームを開発するには、自分で処理を組み立ててプログラムを書いていく必要があります。そこで次回は、自分で関数を作る「関数の定義」と、長くなったプログラムのファイルを分ける「モジュールやパッケージ」について学んでいきます。

 また、ゲームを作る基本機能になる、Pygameの画像、図形、文字の描画、キーやマウスの入力、BGMやSEの再生について学んでいきます。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
レトロ風ゲームを作って学ぶPython入門連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19426 2024/05/13 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング