とりあえずRPG作ってみよう(無謀)

開発日記

PHP・MySQL・JavaScriptでブラウザRPGを作ろうとした話

〜無謀な挑戦と、Phaser3との出会い〜

前回の記事では、自己紹介とこれまでの流れについて書きました。
今回はそこから一歩進んで、実際にブラウザゲームを作ろうとした話を書いてみます。

最初に選んだジャンルは、今思えばなかなか無謀でした。


最初に選んだのは、まさかのRPG

PHP、MySQL、JavaScriptを使ってブラウザゲームを作ってみよう。
そう思い立ったとき、最初に選んだジャンルは RPG でした。

理由はシンプルで、

  • 自分が一番好きなジャンルだった
  • 作れたら絶対に楽しい
  • システム的にもやりがいがありそう

という、わりと勢い任せな判断です。


ChatGPTがいれば、なんとかなると思っていた

もうひとつ、無謀さを後押しした理由があります。

それは、ChatGPTを普段から使っていたことです。

コードを書く場面でも、

  • ロジックの相談
  • サンプルコードの生成
  • バグの原因調査

など、かなり助けられていました。

「コーディングもAIにお願いすれば、いけるんじゃないか?」

正直、そう思っていました。


現実はそんなに甘くなかった

実際に作り始めてみると、すぐに壁にぶつかります。

ChatGPTはとても優秀ですが、
複数ファイルにまたがる構成の管理になると、途端に弱くなります。

  • さっきまで作っていた処理を忘れる
  • ファイル間の関係性がズレる
  • 修正したはずのコードが元に戻る

それでも、少しずつ形にはなっていました。


ブラウザゲーム特有の「音」の制約

そんな中で、決定的な壁になったのが
ブラウザにおける音声再生の制約です。

ブラウザでは基本的に、

ユーザーが画面をタップ・クリックしないと
音楽や効果音を再生できない

という制限があります。


シーン切り替えで起きた問題

RPGなので、当然シーンの切り替えがあります。

  • フィールド
  • メニュー
  • 戦闘画面

当初は、シーンごとに
別のPHPファイルへ遷移する構成にしていました。

しかし、画面遷移すると…

  • 自動でBGMを鳴らしたい
  • でもユーザー操作がない
  • 結果、音が鳴らない

という問題が発生します。


大量のコードを書き直す羽目に

この制約のせいで、
これまで書いてきたコードの設計そのものを
見直す必要が出てきました。

「これはさすがにまずいな…」

そう思い、考えたのが、

  • ゲーム本体となるページを1つ作る
  • そこに他のPHPファイルを include して呼び出す
  • 画面遷移をJavaScript側で管理する

という構成です。


そんなときに知った「Phaser3」

ちょうどそのタイミングで、
Phaser3 というゲームフレームワークを知りました。

名前だけは聞いたことがありましたが、
本格的に調べたのはこのときが初めてです。


Phaser3とは何か

Phaser3は、
JavaScriptで2Dゲームを作るためのフレームワークです。

主にブラウザゲーム向けで、

  • PC
  • スマートフォン
  • タブレット

といった環境で動作します。


Phaser3の特徴と強み

実際に調べてみて、
「これは今の自分に合っているかもしれない」と感じた点がいくつかありました。

● ゲーム向けの仕組みが最初から揃っている

  • シーン管理
  • スプライト描画
  • アニメーション
  • 入力処理
  • サウンド管理

RPGに必要な要素が、かなり揃っています。


● ブラウザ制約を考慮した設計

音声再生や入力周りも、
ブラウザの仕様を前提に作られているため、
自前で悩む部分が大幅に減りそうだと感じました。


● 学習コストと自由度のバランス

  • JavaScriptが分かれば始められる
  • でも、自由度は高い
  • フレームワークに縛られすぎない

「ツールに振り回される」感じが少なそうなのも好印象でした。


方針転換、そして学習へ

こうして、
PHP中心でRPGを作るという当初の方針は一度立ち止まり、
Phaser3を学習する という方向へ舵を切ることになります。

遠回りかもしれませんが、
今振り返ると、この判断は悪くなかったと思っています。


おわりに

「AIがあるから何でも簡単にできる」
そう思っていた自分にとって、
この経験は良い意味での現実確認になりました。

それでも、
試行錯誤する過程そのものはやっぱり楽しい。

次回は、
Phaser3を実際に触ってみた感想や、最初に作ったもの
について書いていこうと思います。


コメント

タイトルとURLをコピーしました