【Python】GUIアプリを作ってみる【Pygame編】※初心者向け


管理人
Pythonのゲーム作成に特化したGUIライブラリ、
Pygameを試してみました!

今回はPygameを使ってGUIアプリを作成します。

 

Pygameは、他のGUIライブラリと異なり、ゲーム作成に特化したライブラリです。

 

今回は、基礎の基礎をメインにするため、

  • Pygameの雰囲気
  • 基礎的なPygameの実装方法

をつかんでいただけたらと思います。

 

 


Pygameの概要

Wikipediaによると、

pygame は、ビデオゲームを製作するために設計されたクロスプラットフォームのPythonモジュール集であり、Pythonでコンピュータグラフィクスと音声を扱うためのライブラリを含んでいる。

pygameは、SDL ライブラリの上に構築されており、C言語のような低水準の機構を使わずにリアルタイムのコンピュータゲームを開発できるようにするための配慮がなされている。

ライセンス GNU Lesser General Public License

「PyQt」『フリー百科事典 ウィキペディア日本語版』より。
2020年7月02日 (木) 20:30 UTC
URL: https://ja.wikipedia.org/wiki/Pygame

※SDLとは、音声を出したり、グラフィックを描画したりする、C言語で書かれたライブラリです。

 

Pygameの特徴をまとめると、

  • ゲームに特化したライブラリ
  • 音声を出すことや、図形の描画が可能
  • SDLライブラリを使用

 

管理人
Unityには劣るかもしれませんが、取っ掛かりにはちょうど良いと思います!

 

 

参考までに、他のGUIライブラリは、こちらでご紹介しています。

【Python】GUIライブラリ13個を比較【初心者へのオススメあり】

 

開発環境とPygameのインストール

開発環境

  • OS Windows 10
  • Pythonバージョン 3.7.1
  • エディタ VS Code
  • Pygameバージョン pygame 1.9.6

Pygameのインストール

コマンドプロンプトからpipを使ってインストールします(Windows10)。

pip install pygame
⇒「Successfully installed pygame-X.X.X」のようにでればOK

 

 

 

Pygameのサンプルゲームで遊んでみる

Pygameをインストールすると、いくつかのサンプルプログラムがついてきます

どんなゲームが作れるのか、プログラムを書いてみる前に動かしてみました。

サンプルゲーム

格納フォルダ

Pygameをインストールした後には、下記フォルダにサンプルプログラム(○○.py)が入っています。

C:\Users\【ユーザ名】\AppData\Local\Programs\Python\PythonXX(バージョン)\Lib\site-packages\pygame\examples

 

実行方法

コマンドプロンプトで、Pythonのモジュール実行することで、サンプルプログラムを動かすことができます。

python -m pygame.examples.〇〇
※○○にはプログラム名(○○.pyの○○の部分)を入れましょう。

 

また、格納フォルダにて、通常のPythonファイル実行コマンドでも、実行できます。

python 〇〇.py

 

注意

沢山のサンプルプログラムが用意されていますが、中には「開発版のPygameが無いと動かないもの」など、
環境によっては動かないプログラムがあります

 

 

管理人
それでは実際に動かしてみましょう!

 

chimp チンパンジーゲーム

Pythonのモジュール実行コマンドを使って、実行してみます。

 

Pygameの画面が立ち上がりました。

マウスをクリックして、左右に逃げるチンパンジーを叩くゲームのようです。

chimp.pyのプログラム行数は、197行でした!

 

aliens シューティングゲーム

次は、格納フォルダにて、Pythonファイル実行コマンドを使って、実行します。

 

こちらを使っても、Pygameの画面が立ち上がりました。

これは、戦車に乗って、UFOを打ち落とすシューティングゲームです。

aliens.pyのプログラム行数は、351行でした!

 

 

管理人
Pygameでどんなプログラムが作れるか、確認できますね!
コードを見ると、少ないプログラム行数でゲームが作れていますね。
piyo
ソースコードもあるので、プログラム作成の参考になりそうですね

【Python】GUIアプリを作ってみる【Pygame編】

それでは、実際にGUIアプリを作ってみましょう。

 

他のライブラリと比較して、少しだけ複雑になっていますが、頑張って説明します!!!

 

サンプルプログラム1 Hello World

ソースコード

import sys
import pygame


def main():
    # pygameの初期化
    pygame.init()
    # メイン画面(Surface)初期化(横, 縦)
    main_surface = pygame.display.set_mode((300, 300)) 
    # メイン画面のタイトル
    pygame.display.set_caption("Pygame Sample")
    # フォントオブジェクト生成(引数:フォント名とフォントサイズ)
    # フォント名にNoneを指定するとPygameの既定のフォントになる
    font = pygame.font.Font(None, 30)
    # テキストのSurfaceオブジェクトの生成(引数:テキスト内容、antialias、文字の色RGB)
    text_surface = font.render("Hello World", True, (0, 0, 255))
    #メイン画面の色設定(引数:RGB)
    main_surface.fill((220, 220, 220))
    # メイン画面上にテキストを配置(引数:配置するSurface、座標)
    main_surface.blit(text_surface, (100, 100)) 
    # メイン画面の更新
    pygame.display.update()
    # Clockオブジェクトの生成
    clock = pygame.time.Clock()

    # ループを続けるかのフラグ
    going = True
    # 終了イベント発生までループをまわす
    while going:
        # イベントを取得
        for event in pygame.event.get():
            # 終了イベント(画面の×ボタン押下など)の場合、
            # ループを抜ける
            if event.type == pygame.QUIT:
                going = False
 
        # フレームレート(1秒間に何回画面を更新するか)の設定
        clock.tick(10)

    # 終了処理
    pygame.quit()
    sys.exit()

if __name__ == '__main__':
    main()

 

実行結果

 

解説1 文字の描画について

Pygameでは、Tkinterのようにラベルウィジェットが無く、画面に直接文字を書くことができません

文字を書くためには、テキストが書かれたSurfaceオブジェクトを作成し、それをメイン画面に張り付けていきます。

<Pygameの文字の書き方>

1.フォントオブジェクトの生成 14行目

font = pygame.font.Font(None, 30)

2.フォントオブジェクトからテキスト用のSurfaceオブジェクトの生成 16行目

text_surface = font.render("Hello World", True, (0, 0, 255))

3.メイン画面にテキスト用のSurfaceオブジェクトを配置 20行目

main_surface.blit(text_surface, (100, 100))

4.メイン画面の更新

pygame.display.update()

 

解説2 フレームレートについて

Pygameのコードの理解には、「フレームレート」の概念の理解が必要です。

piyo
フレームレートって何や?

とはいっても難しい話ではありません。

フレームレートとは、動画などで、1秒間あたりに見せるフレーム(静止画像数)のことです。

 

ゲームにおいても、動画と同様、動きを見せるために静止画を更新する必要があります。

Pygameは、ゲームを作るためのライブラリのため、プログラムの実装にもこの考え方が必要となります。

サンプルプログラムでは、下記の部分です。

# Clockオブジェクトの生成
clock = pygame.time.Clock()

# ループを続けるかのフラグ
going = True
# 終了イベント発生までループをまわす
while going:
    # イベントを取得
    for event in pygame.event.get():
        # 終了イベント(画面の×ボタン押下など)の場合、
        # ループを抜ける
        if event.type == pygame.QUIT:
            going = False
 
    # フレームレート(1秒間に何回画面を更新するか)の設定
    clock.tick(10)

画面で×ボタンが押されるなどの終了イベントが発生するまで、while分での無限ループとなり、画面が更新され続けます。

キャラクターを動かしたりする場合は、このwhile分の中に処理を書く必要があります。

38行目でフレームレートを設定しています。

 

管理人
これで基本は押さえましたね!
次は実際にボールを画面上で動かしてみましょう!

 

サンプルプログラム2 ボールの落下

ソースコード

import sys
import pygame


def main():
    # pygameの初期化
    pygame.init()
    # メイン画面(Surface)初期化(横, 縦)
    main_surface = pygame.display.set_mode((300, 300)) 
    # メイン画面のタイトル
    pygame.display.set_caption("Pygame Sample 2")
    # Clockオブジェクトの生成
    clock = pygame.time.Clock()
    
    #ボールのy座標
    y = 0
    # ループを続けるかのフラグ
    going = True
    # 終了イベント発生までループをまわす
    while going:
        # イベントを取得
        for event in pygame.event.get():
            # 終了イベント(画面の×ボタン押下など)の場合、
            # ループを抜ける
            if event.type == pygame.QUIT:
                going = False
 
        # メイン画面の初期化
        main_surface.fill((220, 220, 220))
        # ボールの座標を更新
        y += 3
        # ボールの描画
        pygame.draw.circle(main_surface, (255,0,0), (150, y), 20)
        # メイン画面の更新
        pygame.display.update()

        # フレームレート(1秒間に何回画面を更新するか)の設定
        clock.tick(10)

    # 終了処理
    pygame.quit()
    sys.exit()

if __name__ == '__main__':
    main()

Hello Worldのプログラムと異なる点は、while文の中に、ボールを動かすアルゴリズムが実装されていることです

28~35行目にて、

  1. メイン画面の初期化
  2. ボールの座標を更新
  3. ボールをメイン画面に描画
  4. メイン画面の更新

のように、ボールの位置をフレーム毎に更新しています。

 

実行結果

 

管理人
やった!ちゃんと動いてますね!
今回はここまで!

 

まとめ

Pygameを使って、簡単なGUIを作ることができました。

  • Hello Worldを表示するGUIアプリ
  • 動きをつけたGUIアプリ

 

ゲーム作成に特化したライブラリのため、簡単に動きをつけることができましたね。

 

最後に、Pygameは書籍で取り扱われているため、勉強がしやすいと思います。

ゲーム作成を通して楽しくPythonを学びたい方にお勧めです!

参考書籍

■Pygameを学べる書籍

 

 

★実践に向けたゲーム開発の基礎・ノウハウが学べます。(Pygameは5章から
 Pythonをある程度使える人にはこちらがオススメ
管理人
最後までご覧いただきありがとうございました。