100日後に完成するゲームシステム 27日目「戦闘ロジック完成!」

2021年2月8日

テクノロジー 特集

久しぶりに、プログラムの構成設計に悩みまくった、弓削田です。 このブログ、1日おきに書いているように見えますが、実際は、前回から1週間ぐらい間が空いてしまいました。 その種明かしをすると、記事を予定的に溜め込んで書いているんですが、10日ほどあったストックが、今ではほぼ無くなってしまいましたwww。 そんな、ハマリングな感じでようやく、戦闘ロジックができたので、そのご報告になります。

デモ

まずは、デモ画面をイジってみてください。
画面内を歩いていると、大体1/10ぐらいの感覚でモンスターが出現して、ドラクエ風の戦闘が始まります。 今現在は、「たたかう」と「にげる」しか、コマンドは機能しないんですが、戦うことでモンスターのHPを削っていって、倒すことができます。 逆に自分のHPが0以下になると、GameOver画面に移動します。 本来なら、教会にすっ飛ばして、お金を半分減らして・・・とやりたい所ですが、 まだ教会もないので・・・ そして、「どうぐ」もやくそうなどが使えないし、魔法のじゅもんなども全く用意していないので、 お寒い戦闘モードですが、 おおまかなロジックができたということは、進行にとって非常に大きな一歩になりました。

全体構成との戦い

今回、なんでこんなに、ハマっていたのかというと、 「戦闘」モードは、コメントパネルも使うし、メッセージも使うし、道具などの連携も必要なので、 そうしたあらゆる要素との連携が必要になるんだけど、これまで部分的な構築しかしていなかったので、 ボタン操作から、メッセージ操作などのプログラムが、それぞれ散らばった形で別ファイルに格納されて判定されていたので、 その整合性を合わせる作業をしていたところ、 非常に大きな判定が必要になることがわかり、更にゲーム全体としてまとめたほうが、今後の拡張性にも対応できると判断して、 分割されていた処理の核になる部分を一括にまとめ、 また、類似だけど、モードの違う処理は、それぞれのモードファイルに書き込むといった、関数の整理を行っていたわけです。 もちろん、そんな中、メモリーリークしているというエラーメッセージに出会ったり、 Uncaught RangeError: Maximum call stack size exceeded こんなエラーです。 これは、メモリーオーバーというエラーメッセージなんですが、javascript特有のthisで関数を言ったり来たりする処理で、 無限ループ状態が発生していたということで、1日ほど無駄な時間を過ごしたりしたんですが、 なんとか、構成し直しに成功したというワケです。 モンスターを倒しても、経験値も得られなければ、お金も増えないので、まだゲームモチベーションが上がる状態にはなっていないですが、 ここまでできれば、あとはチマチマ作り足していけば、さらにいい感じになるでしょう。 もちろん、モンスター数も、今回は3体しか出していませんが、無限に表現することは可能になっている状態なので、ゴールがちらっと見えてきました。 さて、そろそろ、ストーリー作りにでも入りたいですね・・・

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。