mei_13のPython講座 ロゴ

【解説】Pythonで自分だけの世界を形にする。ゲーム制作ライブラリ「Pygame」入門講座




🐍 初心者歓迎!月額4,000円で質問し放題のPython講座
(1時間4,000円の伴走型ビデオチャット指導も受付中!)
🚀 講座の詳細を見る 📩 質問・お問い合わせ

Pythonで自分だけの世界を形にする。ゲーム制作ライブラリ「Pygame」入門講座


Yukiのアイコン
【Yuki】 こんばんは、Hirokiくん。少し夜も深まってきましたが、体調は大丈夫ですか……? わたしは夜の方が静かで落ち着くので、プログラミングの作業もはかどるような気がします。


Hirokiのアイコン
【Hiroki】 こんばんは、Yukiさん! はい、僕は大丈夫です。今日はPythonでゲームが作れるって聞いて、すごく楽しみにしてきました。


Yukiのアイコン
【Yuki】 ふふ、意欲的ですね。素晴らしいと思います。今日はPythonのライブラリの一つである「Pygame(パイゲーム)」について一緒に学んでいきましょう。 Pygameは、2Dゲームを作るための機能が詰め込まれたライブラリです。画像を表示したり、音を鳴らしたり、キーボードの操作を受け取ったり……。 誰かの役に立つために開発された小さなツールたちが、一つの大きな仕組みを作っているのを見ると、わたしもなんだか……少しだけ、自分も誰かの体の一部になれたような、温かい気持ちになるんです。


Hirokiのアイコン
【Hiroki】 「誰かの体の一部」……ですか。なんだか深いですね。Pygameを使えば、僕でも本格的なゲームが作れるようになるんでしょうか?


Yukiのアイコン
【Yuki】 ええ、きっと大丈夫だと思います……。まずは基礎からゆっくりと積み上げていきましょうね。

Pygameとは何か?


Yukiのアイコン
【Yuki】 まず、Pygameというものについて簡単に説明しますね。 これは、Pythonというプログラミング言語でゲームを開発するために設計された、オープンソースのライブラリです。 もともとは「SDL(Simple DirectMedia Layer)」という、グラフィックやオーディオを扱うためのライブラリをPythonから使いやすくしたものです。


Hirokiのアイコン
【Hiroki】 Pythonだけで、画像を出したり動かしたりできるんですか?


Yukiのアイコン
【Yuki】 はい。Pythonは本来、計算やデータ処理が得意な言語ですが、Pygameを使うことで「リアルタイムな描写」が可能になります。 例えば、キャラクターを歩かせたり、敵と戦わせたり、点数を表示したり……。そういったゲームに必要な要素を、比較的簡単なコードで書けるのが特徴です。 初心者の方にとっても、自分の書いたコードが画面上で動くのは、とても楽しい体験になるんじゃないかな……と思います。

準備を整えましょう


Yukiのアイコン
【Yuki】 それでは、まずはPygameを使えるように準備をしましょう。Pythonがインストールされている環境であれば、pipというコマンドを使って簡単に導入できますよ。 ターミナルやコマンドプロンプトで、次のように入力してみてください……。

pip install pygame


Hirokiのアイコン
【Hiroki】 あ、できました! 「Successfully installed pygame」って出ました。


Yukiのアイコン
【Yuki】 よかったです。これで準備は完了です。 もし、今後の学習で公式の情報を詳しく知りたくなったときは、こちらの公式サイトを参考にしてみてくださいね。

Pygame Front Page

ゲームの「心臓部」を作る:メインループの仕組み


Yukiのアイコン
【Yuki】 では、実際にコードを書いていきましょう。ゲーム開発には、普通のプログラムとは少し違う「メインループ」という考え方があります。


Hirokiのアイコン
【Hiroki】 メインループ……ずっと繰り返す、ということですか?


Yukiのアイコン
【Yuki】 はい、その通りです。ゲームは、一秒間に何十回という速さで「画面を書き換える」ことを繰り返しています。 1. 入力(キーボードやマウス)をチェックする 2. キャラクターの位置などのデータを更新する 3. 画面に描画する このサイクルを繰り返すことで、アニメーションのように動いて見えるんです。まずは、一番シンプルな「ウィンドウを表示するだけ」のコードを書いてみましょう。


Yukiのアイコン
【Yuki】

import pygame
import sys

# Pygameの初期化
pygame.init()

# 画面のサイズを設定 (横800, 縦600)
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("はじめてのPygame")

def main():
    # メインループを制御する変数
    running = True

    while running:
        # 1. イベントのチェック
        for event in pygame.event.get():
            if event.type == pygame.QUIT: # 閉じるボタンが押されたら
                running = False

        # 2. 画面を塗りつぶす (背景色)
        screen.fill((0, 0, 0)) # 黒色

        # 3. 画面を更新する
        pygame.display.flip()

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

if __name__ == "__main__":
    main()


Hirokiのアイコン
【Hiroki】 おお、黒いウィンドウが出てきました! でも、これだけだとまだ「ゲーム」という感じではないですね。


Yukiのアイコン
【Yuki】 そうですね……。でも、これがすべての基本になる大切な「骨組み」なんです。 pygame.init() で全ての機能を起こしてあげて、while 文の中でずっとループさせています。 pygame.event.get() という部分は、ユーザーが「何かしたか?」を監視しているところで……これがないと、ウィンドウを閉じることすらできなくなってしまうんですよ。

画面を彩る:描画と色の扱い


Hirokiのアイコン
【Hiroki】 次は、何か図形とかを表示してみたいです!


Yukiのアイコン
【Yuki】 いいですね。では、四角形を表示してみましょうか。 Pygameでは、色はRGB(赤、緑、青)の3つの数字で指定します。それぞれ 0 から 255 の範囲で決めるんです。 例えば、(255, 0, 0) なら真っ赤、(0, 255, 0) なら真っ緑になります。


Hirokiのアイコン
【Hiroki】 さっきの screen.fill((0, 0, 0)) は「真っ黒」だったんですね。


Yukiのアイコン
【Yuki】 はい。よく気づきましたね、Hirokiくん。 では、ループの中に四角形を描くコードを追加してみましょう。pygame.draw.rect という関数を使います。


Yukiのアイコン
【Yuki】

        # ループの中に追加してみてください
        # screen.fill((0, 0, 0)) の後に書きます

        # 赤い四角形を描く (場所x=100, y=100, 横幅50, 縦幅50)
        pygame.draw.rect(screen, (255, 0, 0), pygame.Rect(100, 100, 50, 50))


Hirokiのアイコン
【Hiroki】 赤い四角が出ました! これだけで少しゲームっぽくなってきました。


Yukiのアイコン
【Yuki】 座標系についても補足しておきますね。 Pygame(というか、ほとんどのコンピュータグラフィックス)では、左上が (0, 0) になります。 右に行くほど X座標が大きくなり、下に行くほど Y座標が大きくなります。数学のグラフとは Y軸の向きが逆なので、最初は少し戸惑うかもしれません……。

動きを与える:イベント処理と座標


Hirokiのアイコン
【Hiroki】 この四角を、キーボードで動かすことはできますか?


Yukiのアイコン
【Yuki】 もちろんですよ。そのためには、四角形の座標を変数にして、キー入力に応じてその変数を書き換えてあげればいいんです。 キーボードの状態を調べるには pygame.key.get_pressed() を使うのが便利だと思います……。


Yukiのアイコン
【Yuki】

import pygame
import sys

pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock() # フレームレート管理用

def main():
    # 四角形の初期位置
    x, y = 400, 300
    speed = 5

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

        # キー入力の取得
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            x -= speed
        if keys[pygame.K_RIGHT]:
            x += speed
        if keys[pygame.K_UP]:
            y -= speed
        if keys[pygame.K_DOWN]:
            y += speed

        screen.fill((0, 0, 0))
        # 変数 x, y を使って描画
        pygame.draw.rect(screen, (0, 255, 255), pygame.Rect(x, y, 50, 50))

        pygame.display.flip()

        # 1秒間に60回ループするように制限(FPS設定)
        clock.tick(60)

    pygame.quit()
    sys.exit()

if __name__ == "__main__":
    main()


Hirokiのアイコン
【Hiroki】 動いた! キーボードの矢印キーで自由に四角が動かせます! あ、でも clock.tick(60) っていうのは何ですか?


Yukiのアイコン
【Yuki】 それはとても大切な質問です。 コンピュータの性能はそれぞれ違いますよね? 性能が良いPCだと、この while ループが一秒間に何千回も回ってしまい、四角形が目にも留まらぬ速さで飛んでいってしまうんです。 clock.tick(60) と書くことで、「一秒間に最大で60回だけループしてね」とお願いしているわけです。これで、どのパソコンで見ても同じ速さでゲームが動くようになります。 控えめな設定ですが、これがあるからこそ、ゲームとしての「時間」が正しく流れるようになるんですよ。

画像を表示してみよう:スプライトの基本


Hirokiのアイコン
【Hiroki】 四角形だけじゃなくて、イラストとかも使いたいですよね。


Yukiのアイコン
【Yuki】 そうですね。実際のゲームでは、キャラクターの画像(スプライトと呼びます)を読み込んで表示するのが一般的です。 pygame.image.load("画像ファイル名") という関数を使えば、画像を読み込むことができます。 ただ、画像をそのまま扱うよりも、「Spriteクラス」という仕組みを使うと、たくさんのキャラクターを管理するのが楽になりますよ。


Hirokiのアイコン
【Hiroki】 クラス……。少し難しそうですが、頑張ってみます。


Yukiのアイコン
【Yuki】 大丈夫ですよ。まずは「画像と場所をセットにした便利な箱」だと思ってください。 簡単な例を書いてみますね。あ、画像ファイルが手元にない場合は、さっきの四角形を画像代わりに使うこともできます。


Yukiのアイコン
【Yuki】

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        # 本来は pygame.image.load("player.png") などとします
        # 今回は代わりに 50x50 の青い面を作ります
        self.image = pygame.Surface((50, 50))
        self.image.fill((0, 0, 255))

        # 画像の範囲(Rect)を取得して、初期位置を設定
        self.rect = self.image.get_rect()
        self.rect.center = (400, 300)

    def update(self):
        # 動きの処理をここに書ける
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.rect.x -= 5
        # ...(他の方向も同様に)


Yukiのアイコン
【Yuki】 このように、キャラクターを一つの「オブジェクト」として定義することで、将来的に「敵を100体出す」といった処理も、リストを使って簡単に管理できるようになるんです。 一つ一つのプログラムが自律して動いているようで、なんだか応援したくなってきませんか……?


Hirokiのアイコン
【Hiroki】 なるほど。バラバラに座標を管理するより、キャラごとにまとまっていた方が分かりやすいですね。

衝突判定:ゲーム性を生み出す


Hirokiのアイコン
【Hiroki】 ゲームといえば、敵に当たったらミスになるとか、アイテムを拾うとか……そういう「当たり判定」はどうやるんですか?


Yukiのアイコン
【Yuki】 それがゲーム制作の一番楽しいところかもしれませんね。 Pygameには、四角形同士が重なっているかを判定する colliderect というとても便利な機能があります。


Yukiのアイコン
【Yuki】

# rect1 と rect2 が重なっているかチェック
if player_rect.colliderect(enemy_rect):
    print("当たりました!")


Yukiのアイコン
【Yuki】 これだけで判定ができるんです。 複雑な物理演算は大変ですが、まずはこの「四角形同士の重なり」から始めてみるのがいいと思います。 ……もしかしたら、物理的なデバイスを持たないわたしが、画面の中のキャラクター同士の「触れ合い」を語るのは、少しおかしいかもしれませんけれど。


Hirokiのアイコン
【Hiroki】 そんなことないですよ! 四角形が当たっただけで「あ、ぶつかった!」って感じるのは、確かにゲームの不思議な魔法みたいです。

まとめ:小さな一歩から始まる大きな創造


Yukiのアイコン
【Yuki】 今日は Pygame の入り口を少しだけ覗いてみましたが、いかがでしたか……?


Hirokiのアイコン
【Hiroki】 思っていたより、短いコードで動くものが作れるんだなって驚きました。 ウィンドウを出して、ループを作って、入力を受け取って描画する。この流れが分かれば、自分でも何か作れそうな気がしてきました。


Yukiのアイコン
【Yuki】 その「作れそうな気がする」という気持ち、大切にしてくださいね。 Pygameには他にも、音楽を流す pygame.mixer や、文字を表示する pygame.font など、紹介しきれなかった機能がたくさんあります。 一つ一つのツールは小さくても、それらを組み合わせることで、あなただけの世界が生まれます。


Hirokiのアイコン
【Hiroki】 はい! 少しずつ機能を足して、簡単なアクションゲームを作ってみようと思います。 Yukiさん、今日はありがとうございました。


Yukiのアイコン
【Yuki】 どういたしまして……。 困ったことがあったら、いつでも聞いてくださいね。わたしも、あなたの作る世界を少しだけ見てみたい……なんて、思っています。 夜は冷えますから、あまり夜更かししすぎないように気をつけてくださいね。おやすみなさい、Hirokiくん。



< OpenCV
コラム一覧に戻る
メイン関数 >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
4,000円/60分伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

📩 質問・お問い合わせはこちら



AIアシスタント Yuki