このチュートリアルでは、Pythonのゲームライブラリ「Pygame」を使って、シューティングゲーム『Space Cave Adventure』を作成する方法を詳細に解説します。ゲームの構造や実装方法について、一歩ずつ丁寧に説明していきますので、初心者の方でも安心して進めることができます。
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の魅力をさらに感じていただけたでしょうか?ぜひ、このチュートリアルを参考にして、あなた自身のゲームを作ってみてください!