0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Python/Pygame] チーム開発で強化学習AI搭載の鬼ごっこゲームを作った話

Posted at

はじめに

日本アルゴリズム株式会社の2025年夏季インターンシップにて、4人チームで開発したゲーム『Grid Greed』についてご紹介します。本インターンシップは、5日間という短期間で企画から実装までを行う、実践的なチーム開発を学ぶ貴重な機会となりました。

私はこのチームで、UI(ユーザーインターフェース)とゲームシステムの設計・実装を担当しました。本記事では、その成果と開発から得た学びについてまとめます。

ゲーム画面

(画像の表示サイズを調整しました)



GitHubリポジトリ

開発したゲームの全ソースコードはこちらで公開しています。

ゲーム概要

本作は、プレイヤーが2体の鬼から逃げながらフィールド上のコインを15枚集め、出現する脱出路からの脱出を目指すアクションゲームです。

プレイヤーはW/A/S/Dキーで上下左右に移動できますが、フィールドに点在する「茂み」に立ち入ると移動速度が低下します。鬼の追跡をいかに振り切り、効率的にコインを集めるかがクリアの鍵となります。

技術的な挑戦:強化学習による鬼AI

このプロジェクトでは、敵である鬼の行動AIに強化学習を採用することに挑戦しました。

AIは、鬼2体の座標とプレイヤーの座標を「観測」し、次の行動(上下左右)を「決定」します。私たちは、鬼がプレイヤーに近づくほどプラスの報酬を、捕まえた際にはさらに大きな報酬を与えるように設計し、AIが自律的に追跡方法を学習することを目指しました。

開発期間が5日間ということもあり、学習時間に制約はありましたが、2体の鬼をそれぞれ独立したエージェントとして同時に動かすという目標は達成できました。プレイヤーを巧みに追い詰めるほどの精度には至らなかったものの、強化学習の環境構築からモデルをゲームに組み込むまでの一連のプロセスを、チームで協力して短期間で実装できたことは大きな経験です。

私の担当範囲と工夫した点

私はUIデザインと、ゲームの根幹をなすシステム部分の設計・実装を担当しました。

1. プレイヤー体験を重視したUIデザイン

私は「ゲームは見た目やデザインが面白さに直結する」と考えています。どんなに面白いシステムも、見た目が魅力的でなければプレイヤーに触れてもらえません。そこで、プレイヤーがゲームの世界観に没入し、直感的に楽しめるよう、多くの画像素材を用意・加工して、温かみのある画面作りを目指しました。

  • 世界観の演出: ゲームの顔となるスタート画面では、木の葉が舞い落ちるアニメーションを実装しました。また、草地のタイルやキャラクター、ステージ選択画面のパネルなど、ゲーム内の多くの要素に画像を使用し、統一感のあるデザインを心がけました。
  • 視認性の高い情報表示: コインの取得状況がすぐにわかるUIや、ステージクリア・ゲームオーバー画面など、プレイヤーが状況をひと目で理解できるような画面設計を行いました。
  • 継続して遊べる仕組み: ステージをクリアすると次のステージが解放され、その進行状況がセーブされる機能を実装し、プレイヤーが何度も遊びたくなるような工夫を施しました。

2. AIとゲームを繋ぐシステム構築

ゲームの基本的な動作(プレイヤー操作、ステージ進行、クリア・ゲームオーバー判定など)のプログラムを担当しました。

特に注力したのは、AIチームが作成した学習済みモデルをゲームに組み込む部分です。AIの推論結果(例:[鬼1の行動, 鬼2の行動])をリアルタイムに受け取り、それをゲーム内のキャラクターの動きとして正しく反映させる、AIとゲーム本体の「橋渡し」となる処理を実装しました。具体的には、AIが出した行動指示が壁や岩などの障害物に違反しないかチェックし、違反しない場合のみキャラクターを移動させる、といったゲームルールとの調停役を担いました。

使用技術

  • 言語: Python
  • ライブラリ: Pygame, Stable Baselines3, NumPy

開発を通じて学んだこと

5日間という限られた期間でのチーム開発は、技術的な挑戦以上に、チームで一つのものを作り上げるための方法論を学ぶ、非常に密度の濃い経験でした。

特に痛感したのは、プロジェクト序盤のコミュニケーションの重要性です。開発を始める前の自己紹介の段階で、各メンバーが「何ができるか(スキル)」「何をしたことがあるか(経験)」「何が苦手で、何を知らないか」を率直に共有することが、後のスムーズな連携に繋がると感じました。

また、チーム開発は単に人数が多ければ良いものができるわけではなく、いかに効果的に役割を分担するかが効率を大きく左右することも学びました。今回の開発を振り返ると、最初に大まかな要件定義をした後、より具体的に「どの機能を、誰が、いつまでに実装するのか」を細かく設定し、チーム内で合意形成すべきだったという反省点があります。

そうした学びの中でも、特に私が担当したUI/システムとAI担当者との連携は、密なコミュニケーションが不可欠でした。例えば、「AIが必要とするゲーム状態の情報は何か」「AIの応答を待つ間、ゲームの描画をどうするか」といった点を頻繁に議論し、問題を解決していきました。

この経験を通じて、技術的な挑戦と、プレイヤーにとっての「分かりやすさ」「面白さ」を両立させることの難しさ、そして何よりチームで協力して課題を乗り越えることのやりがいを実感できました。

おわりに

最後までお読みいただきありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?