“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

74.HSPでゲーム&ウォッチのファイアを作ろう その4

いよいよ落下人の処理を作る。
画像は考えた末、1ファイルずつ読み込むのは面倒だし、処理も面倒なので、1つのPNGファイルにまとめ直した。これを読み込み、celdiv命令とcelput命令を組み合わせて表示することにした。
地味に切り出した画像のサイズが違ったので、画像編集ソフトで調整しながら、同じサイズにまとめ直すのが面倒だった…

次は、落下人の状態を管理する処理を作る。
BASIC!では、リストを使って管理したが、HSPにはリストを扱う関数が用意されていない。有志の方がHSPでリスト構造を使用できるライブラリを作ってくれているが、単純に先頭を取って、末尾に追加するだけに使うにはオーバースペックで、使いづらかった。

そこで、文字列で管理しようと考えた。表示場所が23か所(救急車に入ったときのランプ含む)あるので、場所をA~Wの文字列で表す。
1文字取得したら、文字コードを求めて、Aの文字コード分を引けば、0~23の数字にできる。

Aの文字コード:65
Bだったら
 → Bの文字コード-Aの文字コード
  → 66-65=1
   → 2番目の位置(0から始まるので)

実際に作って動かすと、あら不思議。2人目を表示したら、BASIC!の時と同じように処理落ちした。
よーく考えたら当たり前だった…

実機では、落下人が次の場所に移動するとき、同時に全員動くのではなく、少しずつタイミングがずれて、次の位置に表示される。
なので、1サイクルごとに1人だけ動かせば再現できると思っていた。これが大きな間違い。
この方法だと、人数が増えるほどに、移動処理がどんどん遅くなるだけ(先送りになる)だった…

この間違ってるロジックを組み直す。まずは、同時に全部の落下人を動かしてみよう。
3カ所の位置で受け止める必要があるが、落下人が同時に落ちることになると、必ずミスになるので、ゲームとして成り立たない。ここをどうするかが問題だ。

続きは次のエントリーで。