前書き

pygameライブラリは、特にゲームやその他のマルチメディアアプリケーションの作成を支援することを目的としたPythonプログラミング言語用のオープンソースモジュールです。 移植性の高いhttp://www.libsdl.org/[SDL](Simple DirectMedia Layer)開発ライブラリの上に構築されたpygameは、多くのプラットフォームとオペレーティングシステムで実行できます。

pygameモジュールを使用すると、ビデオとオーディオの操作に必要なバックエンドの複雑さを心配することなく、ゲームのロジックとグラフィックを制御できます。

このチュートリアルでは、最初にPythonプログラミング環境にpygameをインストールし、次にpygameとPython 3でゲームを開発するためのテンプレートを作成します。

前提条件

このチュートリアルを使用するには、https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-にPython 3とプログラミング環境が既にインストールされていることを確認してくださいlocal-programming-environment-for-python-3 [ローカルコンピューター]またはhttps://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-programming- environment-on-an-ubuntu-16-04-server [サーバー]。

また、次のPythonプログラミングの概念にも精通している必要があります。

プログラミング環境が設定され、https://www.digitalocean.com/community/tutorial_series/how-to-code-in-python-3 [Pythonプログラミング]に精通していれば、pygameを使い始める準備ができています。

pygameのインストール

Python 3プログラミング環境をアクティブにすることから始めましょう。

. /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が正常にインストールされていることがわかります。 ` quit()+`コマンドでPythonインタラクティブコンソールを終了できます。

コマンドラインでのインストールで問題が発生した場合は、pygameのhttp://pygame.org/wiki/GettingStarted#Pygame%20Installation[GettingStarted wiki]をご覧ください。

後の手順では、このチュートリアルの一部としてモニターを使用してグラフィカルユーザーインターフェイスを表示し、コードを検証することを想定します。

Pygameのインポート

pygameに慣れるために、 `+ our_game.py +`という名前のファイルを作成しましょう。これはnanoテキストエディターで作成できます。たとえば、

nano our_game.py

pygameでプロジェクトを開始するとき、https://www.digitalocean.com/community/tutorials/how-to-import-modules-in-python-3 [モジュールのインポートに使用される `+ import +`ステートメントで開始します]、ファイルの上部に追加できます:

our_game.py

import pygame

オプションで、pygameの定数と関数の一部をhttps://www.digitalocean.com/community/tutorials/how-to-import-modules-in-python-に追加するために、最初の行の下に別のインポートステートメントを追加することもできます3#using-from—​import [ファイルのグローバル名前空間]:

our_game.py

import pygame

プログラムファイルにpygameをインポートすると、それを使用してゲームテンプレートを作成する準備ができました。

Pygameの初期化

ここから、「+ init()+」関数を使用してpygameの機能を初期化します。これは「初期化」の略です。

our_game.py

import pygame
from pygame.locals import *

`+ init()+`関数は、初期化が必要なすべてのpygameモジュールを自動的に起動します。

次のように、pygameの各モジュールを個別に初期化することもできます。

pygame.font.init()

`+ init()`関数は、必要に応じてhttps://www.digitalocean.com/community/tutorials/understanding-tuples-in-python-3[tuple]を返します。 このタプルは、初期化の成功と失敗を示します。 これは、一般的な ` init()+`呼び出しと特定のモジュールの初期化(これらのモジュールが利用可能かどうかを示す)の両方で行うことができます:

i = pygame.init()
print(i)

f = pygame.font.init()
print(f)

上記のコードを実行すると、次のような出力が表示されます。

Output(6, 0)
None

この場合、 + i + variableはタプル +(6、0)+を返しました。これは、pygameの初期化が6回成功し、失敗が0回あったことを示しています。 `+ f `変数は ` None +`を返し、この特定の環境ではモジュールが利用できないことを示します。

ディスプレイサーフェスのセットアップ

ここから、ゲームの表示面を設定する必要があります。 `+ pygame.display.set_mode()+`を使用して、ウィンドウまたは画面を表示用に初期化し、変数に渡します。 関数に、タプルの幅と高さを表す数値のペアであるディスプレイ解像度の引数を渡します。 この関数をプログラムに追加しましょう。

our_game.py

import pygame
from pygame.locals import *


pygame.init()

タプル `(800、600)`を `+ set_mode()+`関数の引数として渡し、幅(800 px)と高さ(600 px)の解像度を表します。 タプルは関数の括弧内に含まれているため、上記の関数には二重括弧があります。

ゲームの解像度にhttps://www.digitalocean.com/community/tutorials/understanding-data-types-in-python-3#numbers[integers]を頻繁に使用するため、おそらく割り当てたいでしょう。これらの数値を何度も使用するのではなく、変数に使用します。 これにより、プログラムを変更する必要がある場合に簡単になります。変数に渡されるもののみを変更する必要があるからです。

ゲームのディスプレイの幅に変数「+ display_width」を使用し、高さに「+ display height」を使用して、これらの変数を「+ set_mode()+」関数に渡します。

our_game.py

import pygame
from pygame.locals import *


pygame.init()




game_display = pygame.display.set_mode((, ))

この時点で、ゲームの表示面は、幅と高さの解像度で設定されます。

ディスプレイの更新

次に、利用可能な2つの機能のいずれかを使用して、ゲーム画面の表示を更新する必要があります。

アニメーションは通常、時間の経過とともに異なるフレーム間で変化します。 アニメーションについて考えるとき、http://imgur.com/epkHzo4 [フリップブック]を考えることができます。これは、1ページから次のページへと徐々に変化する一連の画像で構成されているためです。 これらのページは、ページのコンテンツが動いているように見えるため、ページをすばやくめくったときの動きのシミュレーションを提供します。 コンピュータゲームでは、ページではなくフレームが使用されます。

ページまたはフレームをめくるという概念のため、ゲームサーフェスの表示を更新するために使用できる関数の1つは `+ flip()+`と呼ばれ、上記のファイルで次のように呼び出すことができます。

pygame.display.flip()

`+ flip()+`関数は、画面の表示面全体を更新します。

より頻繁に、 `+ flip()`関数の代わりに ` update()+`関数が使用されます。これは、領域全体ではなく画面の一部のみを更新し、メモリを節約するためです。

`+ our_game.py `ファイルの下部に ` 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がインポートおよび初期化され、ディスプレイセット、およびゲームサーフェスが更新されると、メインゲームループの作業を開始できます。

ゲームを実行するhttps://www.digitalocean.com/community/tutorials/how-to-construct-while-loops-in-python-3 [+ while + loop]を作成します。 ループはhttps://www.digitalocean.com/community/tutorials/understanding-boolean-logic-in-python-3[Boolean]値の `+ True +`を呼び出します。混乱した。

このプログラムのメインゲームループ内で、https://www.digitalocean.com/community/tutorials/how-to-construct-for-loops-in-python-3 [+ for + loop]イベントキュー内のユーザーイベントを反復処理します。これは、 `+ pygame.event.get()+`関数によって呼び出されます。

この時点で、 `+ for `ループ内には何もありませんが、 ` print()`ステートメントを追加して、コードが期待どおりに動作していることを示すことができます。 反復内のイベントを ` print(event)+`としてステートメントに渡します。

これらの2つのループと `+ print()+`ステートメントをプログラムファイルに追加しましょう。

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()

コードが機能していることを確認するために、プログラムを実行しましょう。

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()+`ステートメントを削除するかhttps://www.digitalocean.com/community/tutorials/how-to-write-comments-in-python-3 [コメントアウト]することができます。このすべての端末出力を用意する必要はありません。

ここから、ゲームを終了する方法を学習して、テンプレートの仕上げに取り組むことができます。

終了

pygameプログラムを終了するには、最初に関連するモジュールの初期化を解除してから、通常どおりPythonを終了します。

`+ pygame.quit()`関数はすべてのpygameモジュールの初期化を解除し、Pythonの ` quit()+`関数はプログラムを終了します。

ユーザーはゲームの機能とイベントを制御しているため、ユーザーがゲームウィンドウの上部にある[X]をクリックしてプログラムのシャットダウンを要求すると、 `+ pygame.QUIT +`がイベントキューに送信されることも知っておく必要があります。コーナー。

conditional + if + statement内でプログラムのフローの制御を開始しましょうイベント処理の「+ for +」ループ:

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()

while True:
   for event in pygame.event.get():

上記のコードでは、ユーザーがプログラムにシャットダウンを要求した場合、プログラムはpygameモジュールを `+ pygame.quit()`で初期化解除し、 ` quit()+`でプログラムを終了する必要があると言っています。

`+ pygame.locals `をインポートしたので、 ` event.type `と ` QUIT `をそのまま呼び出すことができます(これらの前に ` pygame。+`を使用するのではなく)。

ユーザーはゲームウィンドウの上部隅にある「X」をクリックすることを知っているかもしれませんが、他の特定のユーザーイベントがプログラムを終了する要求をトリガーするようにしたい場合があります。 これは、 `+ KEYDOWN +`イベントタイプと1つ以上のキーを使用して実行できます。

`+ KEYDOWN `イベントは、ユーザーがキーボードのキーを押していることを意味します。 ここでは、「 Q 」キー(「quit」など)または「 ESC 」キーでプログラムを終了できるとしましょう。 ` for +`ループ内にこれを示すコードを追加しましょう:

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()

while True:
   for event in pygame.event.get():
       if event.type == QUIT




           pygame.quit()
           quit()

https://www.digitalocean.com/community/tutorials/understanding-boolean-logic-in-python-3#logical-operators [ブール論理演算子]を追加して、ユーザーが「X 」、またはゲームウィンドウの上部コーナーで、またはユーザーがエスケープキーまたは「+ Q +」キーのいずれかであるキーを押した場合(大文字と小文字が区別されないことに注意してください)。

この時点で、 `+ python our_game.py `コマンドでプログラムを実行すると、実行中のゲームの機能をテストし、「X」アイコンでウィンドウを終了するか、 ` Q `または ` ESC +`キーを押します。

コードの改善と次のステップ

上記のプログラムは完全に機能しますが、コードを改善するためにできることがいくつかあります。

まず、 `+ while +`ループにあるコードをhttps://www.digitalocean.com/community/tutorials/how-to-define-functions-in-python-3 [関数定義]に入れることができます代わりに:

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’ +`を、ゲームを呼び出したいものに設定できます。

さらに、 `+ pygame.display.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.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()

また、https://www.digitalocean.com/community/tutorials/how-to-use-break-continue-and-pass-statements-when-working-withを使用するなど、上記のコードにアプローチするさまざまな方法を検討することもできます-loops-in-python-3#break-statement [break statement]ゲームの出口に移動する前にループを抜けます。

ここからは、描画とスプライトを使用して画像を表示する方法、画像をアニメーション化する方法、フレームレートを制御する方法などについて学習します。 公式のhttp://www.pygame.org/docs/[pygame documentation]を読むことで、pygameゲームの開発について学習し続けることができます。

結論

このチュートリアルでは、Python 3プログラミング環境にオープンソースモジュールpygameをインストールする方法と、Pythonゲームのメインループを制御するために使用できるテンプレートを設定してゲーム開発に取り組む方法を説明しました。

Pythonモジュールを使用する他のプログラミングプロジェクトを行うには、「https://www.digitalocean.com/community/tutorials/how-to-create-a-twitterbot-with-python-3-and-the- tweepy-library [Tweepy LibraryでTwitterbotを作成する方法]、または「https://www.digitalocean.com/community/tutorials/how-to-plot-data-in-python-3-using-matplotlib [ matplotlibを使用してデータをプロットする方法]。