序章
pygame ライブラリは、ゲームやその他のマルチメディアアプリケーションの作成を支援することを特に目的としたPythonプログラミング言語用のオープンソースモジュールです。 移植性の高いSDL(Simple DirectMedia Layer)開発ライブラリの上に構築されたpygameは、多くのプラットフォームやオペレーティングシステムで実行できます。
pygameモジュールを使用することで、ビデオやオーディオの操作に必要なバックエンドの複雑さを気にすることなく、ゲームのロジックとグラフィックスを制御できます。
このチュートリアルでは、最初にpygameをPythonプログラミング環境にインストールしてから、pygameとPython3を使用してゲームを開発するためのテンプレートを作成する手順を説明します。
前提条件
このチュートリアルを使用できるようにするには、Python3とプログラミング環境がローカルコンピューターまたはサーバーに既にインストールされていることを確認してください。
また、次のPythonプログラミングの概念にも精通している必要があります。
プログラミング環境がセットアップされ、 Pythonプログラミングに精通していれば、pygameでの作業を開始する準備が整います。
pygameのインストール
Python3プログラミング環境をアクティブ化することから始めましょう。
- . my_env/bin/activate
これを有効にすると、pipを使用してpygameをインストールできます。
- pip install pygame
このコマンドを実行すると、次のような出力が表示されます。
OutputCollecting pygame
Using cached pygame-1.9.3-cp35-cp35m-manylinux1_x86_64.whl
Installing collected packages: pygame
Successfully installed pygame-1.9.3
ビデオとオーディオが利用可能なシステムにpygameをインストールした場合は、次のコマンドを実行してインストールを確認できます。このコマンドは、pygameがグラフィックとサウンドで何ができるかを示す模擬ゲームを実行します。
- python -m pygame.examples.aliens
サンプルを開きたくない場合、またはセットアップの一部としてAVがない場合は、Pythonインタラクティブコンソールにアクセスして、pygameモジュールをインポートできることを確認することもできます。 まず、 python
コンソールを起動するコマンド:
- python
次に、コンソール内でモジュールをインポートできます。
- import pygame
を押してもエラーが発生しない場合 ENTER
コマンドの後にキーを押すと、pygameが正常にインストールされたことがわかります。 Pythonインタラクティブコンソールを終了するには、 quit()
指図。
コマンドラインでのインストールで問題が発生した場合は、pygameの[GettingStarted wiki]( http://pygame.org/wiki/GettingStarted#Pygame インストール)を確認できます。
後のステップでは、コードを検証するためのこのチュートリアルの一部として、モニターを使用してグラフィカルユーザーインターフェイスを表示することを想定しています。
pygameのインポート
pygameに慣れるために、というファイルを作成しましょう。 our_game.py
、たとえば、nanoテキストエディタで作成できます。
- nano our_game.py
pygameでプロジェクトを開始するときは、 import
モジュールのインポートに使用されるステートメント。ファイルの先頭に追加できます。
import pygame
オプションで、最初の行の下に別のimportステートメントを追加して、pygameの定数と関数の一部をファイルのグローバル名前空間に追加することもできます。
import pygame
from pygame.locals import *
pygameがプログラムファイルにインポートされたら、それを使用してゲームテンプレートを作成する準備が整いました。
pygameを初期化しています
ここから、pygameの機能を初期化します init()
「初期化」の略である関数。
import pygame
from pygame.locals import *
pygame.init()
The init()
関数は、初期化する必要のあるすべてのpygameモジュールを自動的に起動します。
次のように、pygameの各モジュールを個別に初期化することもできます。
pygame.font.init()
The init()
必要に応じて、関数はタプルを返します。 このタプルは、初期化の成功と失敗を示します。 私たちは一般的に両方のためにこれを行うことができます init()
特定のモジュールの初期化を呼び出して(これらのモジュールが使用可能かどうかを示します):
i = pygame.init()
print(i)
f = pygame.font.init()
print(f)
上記のコードを実行すると、次のような出力が返されます。
Output(6, 0)
None
この場合、 i
variableはタプルを返しました (6, 0)
、これは、pygameの初期化が6回成功し、失敗が0回あったことを示しています。 The f
返された変数 None
、モジュールがこの特定の環境内で使用できないことを示します。
表示面の設定
ここから、ゲームの表示面を設定する必要があります。 使用します pygame.display.set_mode()
表示用にウィンドウまたは画面を初期化し、それを変数に渡します。 関数に、タプルの幅と高さを表す数値のペアである表示解像度の引数を渡します。 この関数をプログラムに追加しましょう。
import pygame
from pygame.locals import *
pygame.init()
game_display = pygame.display.set_mode((800, 600))
タプルを渡しました (800, 600)
の引数として set_mode()
関数、幅(800ピクセル)と高さ(600ピクセル)の解像度を表します。 タプルは関数の括弧内に含まれているため、上記の関数には二重括弧があることに注意してください。
ゲームの解像度にはintegersを頻繁に使用する可能性があるため、数値を何度も使用するのではなく、これらの数値を変数に割り当てることをお勧めします。 これにより、変数に渡されるものを変更するだけでよいため、プログラムを変更する必要がある場合に簡単になります。
変数を使用します display_width
私たちのゲームのディスプレイの幅のために、そして display_height
高さについては、それらの変数をに渡します set_mode()
関数:
import pygame
from pygame.locals import *
pygame.init()
display_width = 800
display_height = 600
game_display = pygame.display.set_mode((display_width, display_height))
この時点で、ゲームの表示面はその幅と高さの解像度で設定されます。
表示の更新
次に、2つの使用可能な機能のいずれかを使用して、ゲームの表面の表示を更新する必要があります。
アニメーションは通常、時間の経過とともに異なるフレーム間で変化します。 パラパラマンガは、1ページから次のページへと徐々に変化する一連の画像で構成されているため、アニメーションについて考えるときに思い浮かぶかもしれません。 これらのページは、ページのコンテンツが動いているように見えるため、すばやくめくったときの動きのシミュレーションを提供します。 コンピュータゲームでは、ページではなくフレームが使用されます。
ページやフレームをめくるという概念のため、ゲームの表面の表示を更新するために使用できる関数の1つは次のように呼ばれます。 flip()
、および上記のファイルで次のように呼び出すことができます。
pygame.display.flip()
The flip()
関数は、表示面全体を画面に更新します。
より頻繁に、 update()
の代わりに関数が使用されます flip()
領域全体ではなく画面の一部のみを更新し、メモリを節約するため、機能します。
追加しましょう update()
の下部に機能 our_game.py
ファイル:
import pygame
from pygame.locals import *
pygame.init()
display_width = 800
display_height = 600
game_display = pygame.display.set_mode((display_width, display_height))
pygame.display.update()
この時点で、エラーなしでプログラムを実行できますが、表示面は単に開いてすぐに閉じます。
ゲームループの作成
pygameをインポートして初期化し、表示セットを設定し、ゲームサーフェスを更新したら、メインのゲームループの作業を開始できます。
ゲームを実行するwhileループを作成します。 ループはブール値を呼び出します True
、ループが中断されない限り、ループは永久にループすることを意味します。
プログラムのこのメインゲームループ内で、 for loop を構築して、イベントキュー内のユーザーイベントを反復処理します。これは、 pygame.event.get()
関数。
この時点では、 for
ループしますが、追加できます print()
コードが期待どおりに動作していることを示すステートメント。 反復内のイベントを次のようにステートメントに渡します。 print(event)
.
これらの2つのループと print()
プログラムファイルへのステートメント:
import pygame
from pygame.locals import *
pygame.init()
display_width = 800
display_height = 600
game_display = pygame.display.set_mode((display_width, display_height))
pygame.display.update()
while True:
for event in pygame.event.get():
print(event)
コードが機能していることを確認するために、プログラムを実行してみましょう。
- python our_game.py
ファイルを実行すると、800×600のウィンドウがポップアップ表示されます。 イベントをテストするには、ウィンドウの上にマウスを置き、ウィンドウ内をクリックして、キーボードのキーを押します。 これらのイベントはコンソールウィンドウに出力されます。
受け取る出力は次のようになります。
Output<Event(4-MouseMotion {'rel': (616, 355), 'buttons': (0, 0, 0), 'pos': (616, 355)})>
<Event(5-MouseButtonDown {'button': 1, 'pos': (616, 355)})>
<Event(6-MouseButtonUp {'button': 1, 'pos': (616, 355)})>
<Event(2-KeyDown {'scancode': 3, 'key': 102, 'unicode': 'f', 'mod': 0})>
<Event(3-KeyUp {'scancode': 3, 'key': 102, 'mod': 0})>
...
この出力には、発生しているユーザーイベントが表示されます。 これらのイベントは、ユーザーによって生成されるときにゲームを制御するものです。 あなたが実行するときはいつでも pygame.event.get()
関数、あなたのコードはこれらのイベントを取り入れます。
を押してプログラムの実行を停止します CTRL
+ C
ターミナルウィンドウで。
この時点で、削除またはコメントアウトすることができます print()
このターミナル出力のすべてを持っている必要はないので、ステートメント。
ここから、ゲームを終了する方法を学習して、テンプレートの完成に取り組むことができます。
やめる
pygameプログラムを終了するには、最初に関連するモジュールの初期化を解除してから、通常どおりPythonを終了します。
The pygame.quit()
関数はすべてのpygameモジュールとPythonの初期化を解除します quit()
関数はプログラムを終了します。
ユーザーはゲームの機能とイベントを管理しているので、次のことも知っておく必要があります。 pygame.QUIT
ユーザーがゲームウィンドウの上隅にある「X」をクリックしてプログラムのシャットダウンを要求すると、イベントキューに送信されます。
イベント処理内の条件付きifステートメントを使用してプログラムのフローの制御を開始しましょう for
ループ:
import pygame
from pygame.locals import *
pygame.init()
display_width = 800
display_height = 600
game_display = pygame.display.set_mode((display_width, display_height))
pygame.display.update()
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
quit()
上記のコードでは、ユーザーがプログラムのシャットダウンを要求した場合、プログラムはpygameモジュールを次のように初期化解除する必要があると言っています。 pygame.quit()
でプログラムを終了します quit()
.
輸入してから pygame.locals
呼び起こすことができます event.type
と QUIT
現状のまま(ではなく pygame.
これらの前に)。
ユーザーはゲームウィンドウの上隅にある[X]をクリックすることを知っているかもしれませんが、他の特定のユーザーイベントがプログラムの終了要求をトリガーするようにしたい場合があります。 私たちはこれを行うことができます KEYDOWN
イベントタイプと1つ以上のキー。
The KEYDOWN
イベントは、ユーザーがキーボードのキーを押し下げていることを意味します。 私たちの目的のために、 Q
キー(「終了」のように)または ESC
キーはプログラムを終了できます。 これを示すコードを私たちの中に追加しましょう for
ループ:
import pygame
from pygame.locals import *
pygame.init()
display_width = 800
display_height = 600
game_display = pygame.display.set_mode((display_width, display_height))
pygame.display.update()
while True:
for event in pygame.event.get():
if event.type == QUIT or (
event.type == KEYDOWN and (
event.key == K_ESCAPE or
event.key == K_q
)):
pygame.quit()
quit()
ブール論理演算子を追加して、ユーザーがゲームウィンドウの上部コーナーにある「X」をクリックした場合、またはユーザーがエスケープキーのいずれかであるキーを押した場合にプログラムを終了できるようにしました。または Q
キー(大文字と小文字は区別されないことに注意してください)。
この時点で、 python our_game.py
コマンドを実行すると、「X」アイコンでウィンドウを終了するか、いずれかのボタンを押して、実行して終了するゲームの機能をテストできます。 Q
また ESC
鍵。
コードの改善と次のステップ
上記のプログラムは完全に機能していますが、コードを改善するためにできることがいくつかあります。
手始めに、私たちはにあるコードを置くことができます while
代わりに関数定義にループします。
def event_handler():
for event in pygame.event.get():
if event.type == QUIT or (
event.type == KEYDOWN and (
event.key == K_ESCAPE or
event.key == K_q
)):
pygame.quit()
quit()
これにより、 while
特にゲームに機能を追加すると、ループが少しきれいになり、凝縮されます。
さらに、ゲームをより洗練されたものにするために、ウィンドウのタイトルバーにキャプションを追加できます(現在、 pygame window
). これは、次の行で実行できます。
pygame.display.set_caption('Our Game')
文字列を設定できます 'Our Game'
上記のゲームと呼びたいものは何でも。
さらに、移動することができます pygame.display.update()
メインゲームループに機能します。
これで、完全なコードは次のようになります。
import pygame
from pygame.locals import *
pygame.init()
display_width = 800
display_height = 600
game_display = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('Our Game')
def event_handler():
for event in pygame.event.get():
if event.type == QUIT or (
event.type == KEYDOWN and (
event.key == K_ESCAPE or
event.key == K_q
)):
pygame.quit()
quit()
while True:
event_handler()
pygame.display.update()
また、 breakステートメントを使用してゲーム終了に移動する前にループから抜け出すなど、上記のコードにアプローチするさまざまな方法を検討することもできます。
ここから、描画やスプライトを使用して画像を表示する方法、画像をアニメーション化してフレームレートを制御する方法などについて学習します。 公式のpygameドキュメントを読むことで、pygameゲームの開発について引き続き学ぶことができます。
結論
このチュートリアルでは、オープンソースモジュールpygameをPython 3プログラミング環境にインストールする方法と、Pythonゲームのメインループを制御するために使用できるテンプレートを設定してゲーム開発に取り組む方法について説明しました。
Pythonモジュールを使用する他のプログラミングプロジェクトを行うには、「Tweepyライブラリを使用してTwitterbotを作成する方法」または「matplotlibを使用してデータをプロットする方法」を学習できます。