「KurachanActionGame」の開発に関する個人的な振り返り
私は大学で所属しているプログラミングサークルで以下のようなアクションゲームを共同開発しました.
10670点獲得! #KurachanActionGame pic.twitter.com/OVu1uqYe0M
— 榊 統 (@sakaki_tohru) October 30, 2021
@sakaki_tohruさんには,プレイ動画を公開してくださいましたことについて,感謝いたします.
このゲームでは,プレイヤが「クラちゃん」(クラゲのような生物のイラスト)をクリックすると,クラちゃんは分裂し,プレイヤは得点を得ます. プレイヤはできるだけ高い合計得点を得ることを目指します.
このゲームに関する詳細な情報は,GitHubのリポジトリを参照してください.
以下では,このゲーム開発プロジェクトに関して個人的に振り返ります.
動機
本ゲーム開発を実行しよう思い至ったのは,以下の気持ちが絡まって溶け合い,弾けた結果でした.
- サークルの同学年の中で進学したのが自分だけで,さびしかった.
- 前年度,サークル活動が全くできていなかったため,サークルで何かしたいという気持ちが高まっていた.
- サークルで,既にAPG4b勉強会とSiv3D勉強会が開催されており,ゲーム開発の下地が整っていると感じていた.
- サークルで,AtCoder勢力に対抗するためゲーム開発勢力を増やしたかった.
プロジェクトの開始
サークルのリモート部会に頻繁に遊びに来る3名に声をかけました. また,これを聞きつけて自分も参加したいと言ってくれた1名も加えて,全部で5名のチームでゲーム開発プロジェクトをスタートしました. サークル内で共同開発する上で工夫した点の一つは連絡手段でした. サークルのDiscordサーバ内のチャンネルの中に本ゲーム開発用の公開スレッドを作成し,本ゲーム開発での連絡は全てこれを利用しました. これにより,以下の効果が得られると考えました.
- サークル内ではプロジェクト外のメンバにも情報が公開されるため,進行状況がサークル内で共有される.また,後輩が後から参照して参考にすることもできる.
- スレッドは時間が経つと自動的にアーカイブされるため,プロジェクト終了後はチャンネル内で邪魔にならない.
- サークル内ではスレッドがそもそも公開されているため,メッセージの送り先を間違えて別のチャンネルやスレッドに送ってしまっても被害が出にくい.
実際,自分も参加したいと言ってくれた1名は,本プロジェクト用のスレッドのやりとりを見たことで本プロジェクトの存在を知ってくれました.
開発期間
2021年9月12日に最初の打ち合わせを開き,2021年10月31日のリリースを行いました. リリースまでの間,毎週2〜4回集まって,毎回2時間くらい開発を行いました. 全員集まれない回もありましたが,集まれる人だけゆるく集まって開発を行いました.
開発場所
開発期間中は対面で集まって開発することができませんでした. そのため,開発はGather.town ( https://www.gather.town ) というビデオチャットプラットフォーム上で行いました. Gather.townは,Discordなどのグループ通話に比べて,「部室に集まってる感じ」があって良かったと思っています.
バージョン管理
学部の頃からずっとGitとGitHubでバージョン管理しながらプログラムを書いてきた私は,バージョン管理されていないプログラムに触わると心が不安に蝕まれるようになっていました. また,複数人で一つの成果物を作り上げる時のバージョン管理方法として,GitとGitHubを利用したものより良い方法が思いつきませんでした.
GitとGitHubを利用したバージョン管理は,慣れていないメンバにとって非常に高いハードルでしたが,GitとGitHubを使ってもらえるように使い方を教えました.
役割分担
開発では以下のように役割分担をしました.
- 1年生2人,2年生1人:タイトルシーン,ゲームシーン,クレジットシーン,ルールシーンの開発
- 4年生1人:上記以外のプログラムの作成,プログラミングのサポート
- 私:イラストの作成,プログラミングのサポート,日程調整
ここでプログラミングのサポートとは,画面共有してデバッグを手伝ったり,設計やアルゴリズムに関する相談を受けたり,レビューと動作確認したり,C++,Siv3D,Git,GitHub,Visual Studioなどについて教えたりといったものです. また,日程調整とは,各回の終了時に「次はいつ集まれますか?」と聞いて次回集まる日時を決めるものです. どんなにプログラミングの得意なメンバを集めたとしても誰かが日程調整をしないとプロジェクトは空中分解してしまいます.実際,過去に一度そうして空中分解したプロジェクトに参加したことがあります.
上記ような役割分担にしたのは,以下が理由となっています.
- 私以外のメンバが,できるだけプログラミングの楽しさに触れられるようにしたかった.
- 1,2年生をできるだけ手厚くサポートしたかった.
- オリジナルのイラストが描いて,それがゲームの中で動くさまを見てみたかった.
また,各シーンの開発では基本的にシーン単位で役割を分担しました. 各メンバには,それぞれの担当するシーンについて,動きやデザインの実装を任せました. これにより,それぞれの作業の独立させやすくなり,作業の競合を避けることができると考えました. 欠点として,全体の統一感が損なわれがちになることが挙げられますが,今回の開発ではそれは気にしないこととしていました.
成果物
まず,ゲーム開発の最低限の要求として,遊ぶことが可能な実行ファイルをダウンロードできる状態にする,ということは達成されました. プログラミング経験の浅い1年生もいるチームでゲームを完成させたという成果は,個人的に満足して良いものだと感じています.
一方で,成果物は以下に挙げるような問題点も抱えています.
- 「パラちゃん」という既存のゲームに類似しており,新規性があるとは言い難い.
- ハイスコアデータがテキストファイルで保存されるため,プレイヤによる不正が容易である.
- 全体のデザインなどに統一感が無い.
- macOS版ではBGMが正常に再生されない.
しかしながら,面白いゲームを作ることや完成度の高いゲームを作ることは私がこのプロジェクトを開始した動機には含まれていないため,これらの問題点については個人的にはあまり気になっていません.
一応,オープンソースとしてソースコードも公開してますので,もし改善案などがあれば,Issue,Pull request,forkなどは歓迎します.
作成したイラスト
個人的な成果として,作成したイラスト「クラちゃん」を以下に示します.
良かったこと
まず,前述の成果物を完成させて大きな達成感を得られたことはとても良かったです. 以下では,このゲーム開発を通じてと感じたものづくりの楽しさと共同開発の楽しさについて述べます.
ものづくりの楽しさ
開発中,ゲームが少しずつ出来ていく様子や自分が描いたイラストがゲーム内で動くようになっていく様子を見ていると楽しかったです. 私の役割の一つであるイラストでは,「クラちゃん」というクラゲのような生物を自分の手によってこの世に生まれさせることが創造的で楽しかったです.
共同開発の楽しさ
今回の開発では他のメンバのプログラミングのサポートもしましたが,イラストの作成に注力することができたと思っています.実際,感覚的には自分の作業時間の50%くらいはイラストの作成をしていた気がします. これは,すなわち,他のメンバにコーディングを任せていたということであり,他のメンバと協力してゲームを完成させたという実感の源泉にもなっています.
また,今回のプロジェクトにはこれまで自分が参加した共同開発ではあまり感じたことのなかった感動もありました. 今まで共同開発は,同学年でチームを組んでいたのですが,このプロジェクトではチームは下級生とチームを組みました. そして,プロジェクトはチームのメンバにプログラミングを教えながら進めました. このような進め方は初めてでしたが,チームのメンバがプログラミングに慣れていく様子やアドバイスしたことが実装に反映されていく様子を見て感動していました.
上級生にプログラミングのサポートに割り当てるという今回の役割分担は,プログラミングの得意なメンバだけが作業を独占してしまうということが発生せず,メンバ全員が開発に関わることができたため,正解だったと感じています.
悪かったこと
プロジェクトの名前の決め方の雑さ
開始時にプロジェクトの名前を決めていませんでした. これはゲームタイトルが決定してから,それをプロジェクト名にしようと思っていたためです. 「パラちゃん」のようなアクションゲームを作ろうということだけは決まっていたため,GitHubに組織とリポジトリを作成するときに雑に「ParachanActionGame」と命名してしまいました. これは良くありませんでした. なぜなら,リポジトリの名前は後から変更できるのですが,組織の名前は後から変更できないからです.
プロジェクト名はゲームタイトルとは独立に最初に決めるべきでした.
プログラミングのサポートの見通しの甘さ
プログラミングの勉強を始めてわずか半年の1年生が2人いる中で,GitとGitHubでバージョン管理しながら,クラスベースのプログラミングを進めていくというのは,振り返ってみると非常にチャレンジングだったと感じています. それでも,プロジェクト開始前は,私がプログラミングのサポートをしながらプロジェクトを無理なく進めることはできるだろうと思っていましたが,その見通しは甘いものでした. プロジェクトを進める中でプログラミングのサポートを実際に行ってみると,一つのことを教えるためにはその背景にある多くのことを教える必要があり,とてもハードであるということに気が付きました.
今回はラッキーなことに,自分から参加したいと言ってくれた4年生がメンバに加わってくれたため,2人で協力しながらプログラミングのサポートをすることができ,何とかゲームを完成させるまで至ることができたと思っています.
まとめ
- サークルで幅広い学年のメンバで構成されたチームを結成し,ゲームを共同開発した.
- KurachanActionGameという名前のアクションゲームを完成させ,実行ファイルをGitHubで一般に公開した.
- プログラミングやバージョン管理に慣れてないメンバのサポートをしながらプロジェクトを進めた.
- 開発中はものづくりや共同開発の楽しさを感じ,完成時には達成感を味わった.
謝辞
プロジェクトに付き合ってくれたメンバの皆さんには,一緒に開発してくれたことについて大変感謝しております. 本当にありがとうございました! これからもよろしくお願いいたします!