Pygameでシューティングゲーム『Space Cave Adventure』を作ろう!~ゲーム開発の基本から実装まで①

記事
IT・テクノロジー


このチュートリアルでは、Pythonのゲームライブラリ「Pygame」を使って、シューティングゲーム『Space Cave Adventure』を作成する方法を詳細に解説します。ゲームの構造や実装方法について、一歩ずつ丁寧に説明していきますので、初心者の方でも安心して進めることができます。
Game Over 2025_02_10 19_18_22.png

1. ゲームの初期設定
まずはゲームの初期設定を行います。必要なライブラリをインポートし、
Pygameの初期化を行います。

import pygame
import sys
import random
import subprocess # gameover.py を起動するために必要
# 初期化
pygame.init()
pygame.mixer.quit() # 前のサウンドを停止
pygame.mixer.init() # サウンドの再初期化

Pygameを使うために、まずは初期化処理が必要です。pygame.init() で基本的な初期化を行い、音楽関連の設定も行います。
次に、ゲーム画面のサイズを設定します。画面サイズは

WIDTH = 800 と HEIGHT = 600 で、Pygameの pygame.display.set_mode() を使ってウィンドウを作成します。
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Space Cave Adventure")

背景画像やキャラクター、敵キャラクターの画像もここで読み込みます。

bg_images = [
    pygame.image.load("assets/image/space_cave_background.png"),
    pygame.image.load("assets/image/space_cave_deep.png"),
    pygame.image.load("assets/image/start_background.png")
]
player_image = pygame.image.load("assets/image/player_ship.png")
player_image = pygame.transform.scale(player_image, (60, 60))

これらの画像はゲームのビジュアルに使います。画像は事前に用意しておき、pygame.image.load() で読み込み、pygame.transform.scale()
サイズを調整しています。

2. プレイヤーキャラクターの移動と弾の発射
プレイヤーキャラクターは矢印キーで上下左右に移動し、スペースキーで弾を発射します。これらはイベント処理で制御します。
# プレイヤーの入力処理
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        running = False
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_SPACE:
            if spread_shot:
                bullets.append({"rect": spread_bullet_image.get_rect(midright=(player_rect.right, player_rect.centery)), "speed": 10})
            else:
                bullets.append({"rect": bullet_image.get_rect(midright=(player_rect.right, player_rect.centery)), "speed": 10})
            shoot_sound.play()

ここでは、スペースキーを押すと、弾が発射される処理を実装しています。また、弾が広がる「広がりショット」機能もあります。
プレイヤーの移動は pygame.key.get_pressed() を使って、キー入力を監視し、矢印キーでプレイヤーの位置を変更します。

keys = pygame.key.get_pressed()
if keys[pygame.K_UP]: player_rect.y -= 5
if keys[pygame.K_DOWN]: player_rect.y += 5
if keys[pygame.K_LEFT]: player_rect.x -= 5
if keys[pygame.K_RIGHT]: player_rect.x += 5

3. 敵キャラクターの生成と衝突判定
ゲームにはランダムに敵キャラクターが出現します。敵キャラクターは一定の速度で画面を横切ります。敵キャラクターとプレイヤーが衝突した場合、ライフが減少します。
# 敵の生成

def spawn_enemy():
    enemy_type = random.randint(0, 2)
    x, y = WIDTH + 50, random.randint(0, HEIGHT - 60)
    speed = random.randint(3, 6)
    enemies.append({"rect": enemy_images[enemy_type].get_rect(topleft=(x, y)), "speed": speed, "image": enemy_images[enemy_type]})

敵は spawn_enemy() 関数でランダムに生成され、画面外から左に向かって移動します。また、弾が敵に当たると、敵が消え、スコアが加算されます。
# 弾と敵の衝突判定

for bullet in bullets[:]:
    for enemy in enemies[:]:
        if bullet["rect"].colliderect(enemy["rect"]):
            enemies.remove(enemy)
            bullets.remove(bullet)
            score += 100 # スコアを加算
            explosion_sound.play()
            break # 衝突した弾は1回のみ削除

4. アイテムの管理
宝箱を画面上にランダムに出現させ、プレイヤーがその宝箱に触れると「広がりショット」が使えるようになります。
# 宝箱の生成

def spawn_treasure():
    x, y = WIDTH + 50, random.randint(50, HEIGHT - 50)
    treasures.append({"rect": treasure_image.get_rect(topleft=(x, y)), "speed": 3})

宝箱に触れると、treasure_count がカウントされ、2個以上宝箱を拾うと、広がりショットが使えるようになります。
5. ゲームオーバーと再スタート
プレイヤーのライフが0になるとゲームオーバーとなり、gameover.py を起動してゲームオーバー画面を表示します。
if lives <= 0:
    running = False
    pygame.quit()
    subprocess.run(["python", "gameover.py"])

ゲームオーバー時には、サウンドが鳴り、gameover.py によってゲームオーバー画面が表示されます。

まとめ:
Pygameを使ったシューティングゲームの作成は、ゲームプログラミングの基本を学ぶ絶好の機会です。この記事では、プレイヤーキャラクター、弾の発射、敵キャラクター、衝突判定、スコアの管理、宝箱のアイテム処理、ゲームオーバー処理など、シューティングゲームに必要な基本的な要素を実装しました。これらの要素を自分なりにカスタマイズして、オリジナルのゲームを作り上げていく楽しさを感じていただけたと思います。
Pygameの魅力をさらに感じていただけたでしょうか?ぜひ、このチュートリアルを参考にして、あなた自身のゲームを作ってみてください!
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら