一つ前のページではpygameの導入方法について学習しました。
今回は ゲームループの基本 について見ていきましょう。
Chapter1:pygame入門|画面を表示しよう
・Chapter1-1:pygameを導入しよう
・Chapter1-2:ゲームループの基本を理解しよう ◁今回はここ
・Chapter1-3:画面に画像を表示しよう
・Chapter1-4:画面に文字を表示しよう
・Chapter1-5:画面上の画像を動かそう
Chapter2:簡単なノベルゲームを作ろう
Chapter3:簡単なアクションゲームを作ろう
Chapter4:ブロック崩しを作ろう
Chapter5:シューティングゲームを作ろう
Chapter6:pygameのお役立ち情報
ゲーム開発において、「ゲームループ」はゲームの動作を支える重要な仕組みの一つです。
ゲームではキャラクターを動かしたり、敵の出現を管理したり、スコアを更新したりといったさまざまな処理を常に繰り返し行う必要があります。これらの処理をまとめて制御するのが「ゲームループ」です。
例えばテレビゲームをプレイするとき、プレイヤーがボタンを押すとキャラクターが移動し、それに応じて背景や敵も変化します。
このような「画面を更新し続ける仕組み」がなければ、ゲームは静止画のままで動くことはありません。つまりゲームループがなければ、ゲームは成立しないのです。
この章ではまずゲームループの仕組みを学び、実際にコードを動かしてその動作を理解していきます。
プログラムを作成しながら、ゲーム開発の第一歩を踏み出してみましょう!
ゲームループとは?その仕組みと重要性
ゲームループとは、ゲームが動作している間、常に繰り返される一連の処理 のことを指します。
ゲームがリアルタイムで動作し続けるためには、以下のような処理を繰り返し行う必要があります。
ゲームの流れと基本構成を理解しよう
ゲームの基本的な動作は、以下のような流れになっています。
- 初期化(ゲームの準備をする)
- メインループ(以下の5つの動作を繰り返す)
- 入力処理(ユーザーの操作を受け取る)
- ゲームの更新(キャラクターの動き、当たり判定、スコア更新など)
- 描画処理(画面の更新)
- 画面の表示(変更を画面に反映)
- 終了判定(ゲームを終了するかどうかを判定)
この流れを 1秒間に何十回も繰り返す ことで、ゲームはリアルタイムに動作します。
ゲームループが必要な理由と役割
ゲームは普通のプログラムとは異なり、「常に動き続ける」 ことが求められます。
たとえば普通のPythonプログラムでは、処理が終わればプログラムも終了します。しかしゲームではユーザーが操作している間、ずっと動き続けなければなりません。
もしゲームループがなかったら、キャラクターが一度だけ動いて止まったり、ボタンを押しても画面が変化しなかったりと、ゲームとして成り立たなくなってしまいます。
ゲームループを使ってリアルタイムで処理を繰り返すことが重要 なのです。
実際にゲームループを作ってみよう
ゲームループの仕組みを理解するために、簡単なPygameプログラムを実装して実際に動作を確認してみましょう。
このプログラムでは、「白い背景に赤い円を表示する」だけのシンプルなゲームループを作成します。
ゲームループを実装するコード
以下のコードをエディタに書き込んで実行してください。
コピーして貼り付けることもできますが、このコードはゲームループの基礎中の基礎であるため、覚えるためにもぜひ手打ちすることを推奨します。
# pygameとsysモジュールをインポート import pygame, sys # pygameを初期化 pygame.init() # 画面のサイズを設定(幅800px、高さ600px) screen = pygame.display.set_mode((800,600)) # 無限ループでゲームを動作させる while True: # 画面を白色で塗りつぶす(毎フレームの更新) screen.fill(pygame.Color("WHITE")) # 赤い円を描画(座標(100,100)から幅100、高さ100の楕円) pygame.draw.ellipse(screen, pygame.Color("RED"), (100, 100, 100, 100)) # 画面の更新(描画した内容を反映) pygame.display.update() # イベント処理(ウィンドウの閉じるボタンが押されたら終了) for event in pygame.event.get(): if event.type == pygame.QUIT: # 閉じるボタンが押されたか確認 pygame.quit() # pygameを終了 sys.exit() # プログラムを終了
このコードを実行すると、以下のような動作をします。
- ウィンドウが開き、白い背景に赤い円が表示される。
- ×ボタン(ウィンドウの閉じるボタン)を押すと、プログラムが終了する。
ゲームループを使って 画面の更新 や イベントの処理 を行っています。
ゲームループの各処理を詳しく解説
先ほどの ウィンドウに赤い円を表示するコード を詳しく分解し、各部分の役割を細かく解説していきます。
最初なので初めて見る内容ばかりになるでしょうが、ここでしっかりと記憶しておけば後々楽になりますので、頑張りましょう!
(1) Pygameの初期化
import pygame, sys # pygameライブラリとsysライブラリをインポート pygame.init() # pygameライブラリのinit関数を呼び出して、Pygameを初期化
- import pygame はゲーム開発用のライブラリを使用するためのインポート文。これを使ってウィンドウを作成し、図形を描画できる。
- sys はプログラムの終了処理に使用する標準ライブラリ。コンマ「,」で区切ってpygameと一緒にインポートしている。
- pygame.init()はPygameのすべての機能を使えるようにするための初期化処理。この1行がないとPygameの機能を使えない。
Lesson1-6でRandomモジュールをインポートして乱数生成しましたが、それと同じことをしています。
- コラム:ライブラリやモジュールって何?
-
プログラミングを学んでいると「ライブラリ」や「モジュール」という言葉をよく目にします。
特に Pygame では、
pygame.display
やpygame.event
のように、ライブラリとモジュールを組み合わせて使います。ライブラリとは?
ライブラリ(Library) とは、特定の機能を提供する 「便利な機能の集まり」 のことです。
Pythonには、標準ライブラリ(最初から使えるもの)と、外部ライブラリ(追加でインストールするもの)があります。
コードの冒頭でインポートすることにより、そのライブラリ内に定義された特殊な関数を呼び出せるようになります。
- 標準ライブラリの例:
random
(乱数)、sys
(システム操作)、math
(数学計算) - 外部ライブラリの例:
pygame
(ゲーム開発)、pandas
(データ分析)
モジュールとは?
モジュール(Module) とは、Pythonのコードが書かれた 「1つのファイル(.pyファイル)」 のことです。
Pythonでは、ライブラリの中に複数のモジュールが含まれていることが多いです。例えば、Pygameの
display
やevent
も「モジュール」です。ライブラリ同様、インポートすることで特殊な関数が使用できるようになります。
- 標準ライブラリの例:
(2) 画面の作成
screen = pygame.display.set_mode((800,600)) # 幅800px、高さ600pxのウィンドウを作成 # pygameライブラリのdisplayモジュールのset_mode関数を呼び出して、変数screenに代入
- 幅 800px、高さ 600px のウィンドウを作成する。
-
(800, 600)
の部分を変更すれば、好きなサイズのウィンドウを作ることができる。
ここまでが、最初に紹介したゲームループの基本的な流れの中の「① 初期化(ゲームの準備をする)」に該当します。
(3) ゲームループ
while True:
- 無限ループ を使い、ゲームが動作し続けるようにする。
- ゲームが終了しない限り、このループがずっと実行される。
ここから、ゲームループの基本的な流れの中の「② メインループ(以下の5つの動作を繰り返す)」に入ります。
(4) 画面の背景を更新
screen.fill(pygame.Color("WHITE")) # 画面を白色で塗りつぶす # 変数screenを、fill(色)関数を用いて塗りつぶす # pygameライブラリのcolorクラスを使用する
- 画面全体を白色 (
WHITE
) にする。 - メインループの中の最初に実施することで、前のフレームの描画が残ってしまうことを防ぐ。
(5) 図形の描画
pygame.draw.ellipse(screen, pygame.Color("RED"), (100, 100, 100, 100)) # pygameライブラリのdrawモジュールのellipse関数(円を描写する関数)を呼び出す
- (100,100) の位置に、幅100px、高さ100pxの赤い円(楕円)を描画 する。
- 座標を変えると、円の位置を変更できる。
図形の描写に関しては、次のチャプターでもう少し詳細に学習します。
(6) 画面の更新
pygame.display.update() # pygameライブラリのdisplayモジュールのupdate関数を呼び出し
- 最新の描画内容を画面に表示する処理。
- これを実行しないと、画面に何も表示されない。
(7) イベント処理
for event in pygame.event.get: if event.type == pygame.QUIT: pygame.quit() # pygameライブラリのquit関数を呼出し sys.exit() # sysライブラリのexit関数を呼び出し
pygame.event.get()
:発生したイベント(ユーザーの操作)を取得 する。event.type == pygame.QUIT
:ウィンドウの閉じるボタン(×ボタン)が押されたらゲームを終了する処理。pygame.quit()
:Pygameを終了する処理。sys.exit()
:プログラムを完全に終了する処理。
よく使う関数とその使い方まとめ
ここでは、ゲームループのコード内で使用した関数を一覧にまとめました。
これらの関数を理解すると、ゲームの仕組みがより明確になります。
(表の中にない関数は次回以降のChapterで詳細の解説があります)
ライブラリ | モジュール | 関数 | 内容 |
---|---|---|---|
pygame | – | init() | Pygameの機能を利用するための初期化を行う |
display | set_mode() | 指定したサイズのウィンドウを作成する | |
update() | 最新の描画内容を画面に反映する | ||
– | Color(“色”) | 指定した色のRGBデータを取得する | |
event | get() | ユーザーの入力やウィンドウ操作などのイベントを取得 | |
– | quit() | Pygameのすべてのモジュールを終了する | |
sys | – | exit() | Pythonのスクリプトを強制終了する |
ゲームプログラムを作成するとき、Pygameの基本的な関数を 自然に使えるようになる ことがとても重要です。
上記の関数は特に、ゲームループ内で頻繁に出てきますので、使いながら覚えていきましょう。
4. まとめ
このチャプターでは、ゲーム開発の基本となる 「ゲームループ」 について学びました。
ゲームループは、リアルタイムに画面を更新し、ユーザーの操作を受け付けるために必要不可欠な仕組み です。
ここまで学習を進めてきたことで、皆さんは ゲーム開発の第一歩 を踏み出しました!
最初は単純な図形の描画でしたが、これが キャラクターや敵を動かす基盤 になります。
ぜひ次の学習に進んでみてください!
お疲れさまでした!
FAQ|ゲームループの基本と実装方法について
- Q1. ゲームループがないとどうなるの?
-
ゲーム画面が更新されず、ユーザーの入力やオブジェクトの動きに対応できなくなります。
- Q2. pygameのイベント処理で注意すべき点は?
-
pygame.event.get()
をループ内で正しく使わないと、ウィンドウが応答しなくなることがあります。
- Q3. ゲームループ内の処理順序は重要ですか?
-
はい、入力→更新→描画→画面更新の順序を守ることで、スムーズなゲーム挙動になります。
質問用コンタクトフォーム
この記事を書くにあたりAIを活用しています。
人間の目による確認も行っていますが、もし間違い等ありましたらご指摘頂けると大変助かります。