ながみえ

Chapter1:pygame入門|画面を表示しよう
Chapter2:簡単なノベルゲームを作ろう
Chapter3:簡単なアクションゲームを作ろう
Chapter4:ブロック崩しを作ろう
Chapter5:シューティングゲームを作ろう

Extra1:横スクロールのアクションゲームを作ろう ◁今回はここ

本記事では、当サイトのオリジナルアクションゲーム「SuperNekoWorld」のサンプルコードを公開します。

これまでのチャプターで学んだpygameの知識を活かし、本格的なゲーム制作に挑戦できる内容です。

なお、Chapter1から5までのような詳しいコードの解説は、記事内では行いません。

コード内に各処理のポイントをコメントとして詳しく記載していますので、そちらを参考に読み進めてください。

ここまで学習してきた知識があれば理解できるはずです。

まずはデモ版のコードを無料公開していますので、ぜひ動かして遊んでみて、SuperNekoWorldの魅力を体感してください。(デモ版にはコードの解説はありません)

より作り込んだSuperNekoWorldのコードやそのコードの詳しい解説については、会員向けの続きでご案内しています。

あなたの手でさらに拡張していける内容となっていますので、サンプルを気に入った方はぜひフルバージョンのご購入もご検討ください!

<<前のページ

pygameの記事一覧

Pythonのゲームライブラリ pygame を使ってゲームアプリを制作するページのアイキャッチ画像

次のページ>>

SuperNekoWorld デモ版のサンプルコード

ここでは、SuperNekoWorldのデモ版となるサンプルコードを公開します。

注:Chapter1-1で公開しているのと同じものです。

デモ版は様々な機能が制限されており、見た目も整えていませんが、どのようなゲームかはよく分かると思います。

コードの解説はありませんが、まずはこのサンプルを実際に動かし、プレイしながらプログラムの流れやゲームの仕組みを考えてみてください。

SuperNekoWorldのファイル構成

正規版のSuperNekoWorldのファイル構成は以下のようになっています。

SuperNekoWorld/
├── main.py                  # ゲーム全体の起動・制御(メインループ)
│
├── nekolib/
│   ├── __init__.py         # nekolibパッケージの初期化用 空ファイル
│   ├── config.py           # 各種定数・画像読み込みなど設定系
│   ├── stagebuilder.py     # マップデータからステージを生成
│   ├── player.py           # プレイヤー(猫)の挙動管理
│   ├── enemy.py            # 敵キャラ(犬・幽霊・うさぎ等)の挙動管理
│   ├── image.py            # 各種画像スプライト・動く床ブロックなど
│   ├── item.py             # アイテム(魚)の定義
│   └── goal.py             # ゴール(白猫)の定義
│
├── mapdata/
│   ├── __init__.py         # mapdataパッケージの初期化用 空ファイル
│   ├── mapdata1.py         # ステージ1のマップデータ・レイアウト
│   ├── mapdata2.py         # ステージ2のマップデータ・レイアウト
│   ├── mapdata3.py         # ステージ3のマップデータ・レイアウト
│   └── mapdata4.py         # ステージ4のマップデータ・レイアウト
│
└── image/                   # 各種画像素材(png等)格納ディレクトリ

デモ版では全てを1つのコード内に書いていましたが、完成版ではPythonのオブジェクト指向を活用し、役割毎に分けています。

こうすることにより各コードの内容が分かりやすくなり、また修正する際にもポイントを探しやすくなっています。

Q
サンプルコード:config.py

config.pyは、SuperNekoWorld内で使われる各種定数(画面サイズやプレイヤー速度、重力など)や、画像ファイルを読み込む関数をまとめた、設定用ファイルです。

ゲーム全体で共通して使う値や処理を管理し、他ファイルからインポートされる前提のファイルとなっています。

from pathlib import Path
import pygame

# --- ゲーム内定数 ---
SCREEN_WIDTH, SCREEN_HEIGHT = 640, 480 # 画面サイズ
TILE_SIZE = 32    # 1マスの大きさ
GRAVITY = 1       # 重力の強さ
JUMP_POWER = -17  # 猫のジャンプ力
PLAYER_SPEED = 5  # 猫の移動速度
GHOST_SPEED = 1   # 幽霊の移動速度
DOG_SPEED = -2    # 犬の移動速度
MAX_STAGE = 4     # ステージ数

# 画像フォルダのパスを構築
ASSET_DIR = Path(__file__).parent.parent / "images"
""" 【解説】
    Path(__file__) で「このファイルのパス」オブジェクトを取得(例:...SuperNekoWorld/nekolib/config.py)
    .parentで一つ上のフォルダへ(例:...SuperNekoWorld/nekolib)
    .parentでもう一つ上のフォルダへ(例:...SuperNekoWorld/)
    / "images"でフォルダ結合(例:...SuperNekoWorld/images)
"""

# 画像を読み込む関数
def load_img(name, size=None): # 引数は画像名と画像の描画サイズ
    # 画像ファイルを読み込んでSurfaceを返す。なければ仮画像。
    path = Path(ASSET_DIR) / name # 指定画像の保存場所(パス)を作成
    """ 【解説】
        / name で ASSET_DIR,と画像名を繋ぐ。
        変数には例えば「...SuperNekoWorld/images/neko.png」などと代入される
    """

    try:
        img = pygame.image.load(path).convert_alpha() # 画像を変数に代入
        # .convert_alpha()で pygameで扱いやすいSurface型への変換
        if size: # もしサイズが指定されているなら
            img = pygame.transform.scale(img, size)
        return img # 戻り値として画像を返す

    except Exception: # 画像ファイルが無い場合など例外発生時は「仮画像(ダミー画像)」を作って返す。
        surf = pygame.Surface(size if size else (TILE_SIZE, TILE_SIZE), pygame.SRCALPHA)
        surf.fill((100, 200, 255) if "fish" in name else (200, 200, 200, 255))
        pygame.draw.rect(surf, (0, 0, 255), surf.get_rect(), 2)
        return surf

SuperNekoWorld フルコードのダウンロードはこちら

こちらから、SuperNekoWorldのサンプルゲームの全コードをダウンロードできます。

ダウンロードファイルにはソースコード一式と画像一式、そして詳しい解説コメントが含まれています。

※このリンクは有料会員限定です。ダウンロード後は、ご自身の学習や改造、オリジナルゲーム制作に自由にご利用ください。

ここから先は限定公開です

すでに購入済みの方はこちら

購読には会員登録が必要です

「半角英数字」と「大文字1個以上」を含む、8文字以上

会員登録には 利用規約/特定商取引法に基づく表記 への同意が必要です。

すでに会員の方はこちら

ログインして記事を読む

メールアドレス
パスワード
パスワードを忘れた方
新規会員登録はこちら

パスワード再設定

パスワードを再設定します。入力したメールアドレスに再設定用のURLをお送りしますので、パスワードの再設定を行なってください。
キャンセル
記事URLをコピーしました