2023年11月30日
プログラムのロジック
ゲームで「こういうことがしたい!」と思いロジックを考える時、閃いたロジックにより、プログラミングの難度や、処理速度、プログラムの長さが全然変わります。
結果は全く同じなのに、それを実現するプログラムのロジックは全く違う訳です。
そこがプログラミングの面白いところです。
ただ、全く閃かない時もあります。
そんな時は、無駄に長く、効率の悪いプログラムを組んでしまいます。
後で、「あれ?なんでこんなロジック組んでるの!?」と、猛省する事も…。
例えば、今制作中の3Dロールプレイングゲームのシステムメッセージの表示で、今回、アイテム名+メッセージの表示を組みました。
アイテム名が10桁で、後ろにスペースが付いているのでそれを除いて表示するロジックです。
私は今回、アイテム名をワークにセットし、10桁目から前に(9桁目)スペースかどうかチェックをかけて行き、スペースでなくなった位置から、残りのメッセージをワークにセットし、VRAMに一括転送して表示するロジックとしました。
特に問題はありませんが、桁が変動する部分を前に持ってこなければならないため、回復薬を使った時にこのロジックだと「25たいりょくが、かいふくした。」としか表示できませんし、合成用のメッセージルーチンを専用に組まなければなりません。
他の方法としては、メッセージデータとして「たいりょくが、〇〇〇かいふくした。」と用意しておき、〇部分にゼロサプレス若しくは左詰めで3桁の数値をセットし、表示する際VRAMに一括転送するのではなく、1文字ずつスペースかどうかチェックしながら転送すれば良いです。
これだと他のメッセージ表示ルーチンと共通で使えます。
ただ、この場合メッセージ中にスペースは含められません。
(&H20以外にスペースFONTを用意して、それをメッセージ中のスペース代わりにする事で対応可。)
今回反省点は、標準のメッセージ表示ルーチンがあるのに、それを使わずなぜわざわざシステムメッセージ表示専用のルーチンを作ってしまったのか…!?
言い訳ですが、一応毎日更新しているので、深く考慮できていません。
最初の方に組んだサブルーチンは、ほぼ忘れています。
でも、ここまで進んでしまったので、もう今更修正する気力はありません…。
こんな感じでロジックを考えていきますが、時々、自分でも驚くような、もの凄い効率的なロジックを組むことが出来ます。
凄い感動です。
こうしてプログラミングにハマっていくのでした…。