“RUN” それは魔法の言葉

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

147.HSPでゲームを作ろう:培養臼(BAIOUS) その24

コンティニューとステージ練習機能を追加したところで、コンテストは締切になった。
今年は複数の方からの評価とコメントをいただけた。ありがたい。

基本的に遊んだ感想や、改善点についてだったのだが、気になったのが、非アクティブウィンドウ時にもキー操作を受け付けるというもの。ツイートもしてたやつ。

原因は、getkey命令だった。
こいつが非アクティブウィンドウ時でも、キー入力を受け付けてしまっていた。今まで作っていたゲームウォッチ再現シリーズでも、Windows対応するときにgetkeyを使っていたので、見事に該当。
こっちはandroidでのタッチ操作がメインで作っていたので、まったく気にしていなかった。

培養臼はWindowsで遊ぶので、非アクティブウィンドウ時はキー入力を受け付けないようにしたかった。
でも、getkeyは基本的に使ってないのよね。キー入力を行っているのはstick命令だったはず。そして、stick命令で非アクティブウィンドウ時にも入力を受け付けるには、明示的に引数で書かなきゃならなかった。そんなの書いたことないしw。ここで「PAD設定さん」のJStick命令を使っているのを思い出した。
JStickStickに書き換えたら、非アクティブウィンドウ時のキー操作は受け付けてなかった。

じゃあ、Stick命令に戻せばと思われたかもしれないが、それだとせっかくのジョイスティック対応ができないし、キーコンフィグも追加したいので、このまま使いたい。
さて、どうしようか。

146.HSPでゲームを作ろう:培養臼(BAIOUS) その23

思いのほか早くコンティニュー機能を作れたので、ステージ練習機能の作成に取り掛かった。
とりあえず思いついた仕様はこれ。

  • 選択したステージが終わったらゲームオーバー
  • 本編で進んだステージまでしか選べない
  • ボーナスステージは対象外(ボーナスステージで終わった場合は前ステージまで)
  • ラストステージも対象外

とりあえずステージ選択画面を先に作った。

ステージデータはCSVファイルを読み込めばよいのだが、ステージ選択のために使うことは考えていなかったので、ちょっとだけ面倒だった。
何ステージでも作れるようにしたり、; が先頭の行は、コメントとして扱い、読み込み時はスキップしたりしていた。

ステージデータのCSV

全部の行を最初に読み込んで、配列に入れるのは非効率と考え、ステージ開始時に1行分のデータを読み込み、各変数にセットするようにしていた。

こんな作りなので、各ステージの始めに実際のCSVの何行目を読み込むかを変数で指定する。同じCSVデータを使うので、練習するステージを選択したら、実際のCSVの行数を渡さなくてはならない。

そこで、ステージデータのCSVを全部読み込んで、ステージ番号とその行数を配列に格納することにした。
選択したステージの行数を持ってる配列の値を、ステージ最初にCSVファイルを行数指定して読み込むルーチンに渡してやった。

あとは練習モードであるフラグを設定して、ステージクリアとゲームオーバーの判定処理に、練習モードならば無条件にゲームオーバーになる処理を加えた。
ただ、画面が全く同じままだと判別できないので、ゲームの進行中は、画面左下に「PRACTICE」の文字を点滅表示させた。

これで、コンテストの〆切前に機能追加したバージョンをアップすることができた。

145.HSPでゲームを作ろう:培養臼(BAIOUS) その22

新年あけましておめでとうございます。
今年もHSP3で、アラフィフの趣味プログラムを続けていきますので、どうぞよろしくお願い致します。

さて、昨年からの続き。コンテストに応募した後に、新たな機能を作るようにした。

 ・コンティニュー機能
 ・ステージ練習機能

まずはコンティニュー機能からとりかかった。
ゲームオーバー画面にコンティニューするか、そのまま終わるかの選択肢を表示する。
ついでにコンティニューを無限にできても仕方ないので、回数を3回にした。
ちゃんと定数に定義したので、ソースの冒頭を書き換えれば回数を増やしたり、減らしたりできるようにした。

ゲームオーバー画面は、BGMの長さを考慮した長さのループを作って、ループが終わったらタイトルに戻るように構成していたので、キー入力を受け付けていなかった。まずキー入力のルーチンを組み込み、コンティニューするか終了するかの選択ができるようにした。

コンティニューを選択したら、同じステージを繰り返すように、フラグを立てて、ステージデータの読み込み行数を変更せずに、ステージ初期化ルーチンに飛ばしたのだが、スプライトの表示初期化や、フラグの処理が足りておらず、それらの処理の実行場所を変えたり、処理を追加した。

コンティニューの仕様をもう少し詰める必要があった。
まず、エンディングをどうするか。
せっかくなので頑張ってもらうために、エンディングはノーコンティニューじゃないと見れないようにした。

よくある処理だが、コンティニューしたとわかるように、スコアを1足すことにした。ゲーム中の最低点が100点なので、1の位は0より増えない。これで見た目でコンティニューしたかがわかる。

ボーナスステージでもゲームオーバーになることがある。ここでコンティニューしたら、次のステージに進むようにした。
あと、最終ステージはコンティニューできないようにした。

このような条件を満たすための条件分岐と、フラグの追加などを行って、コンティニュー機能が完成した。

もともとコンティニューさせることを決めずに作っていた割には、比較的簡単に処理を追加できたのはラッキーだった。
なにせ、フローチャート作成も、プログラムの構造設計も全く行わずに作ってるからww

まぁ、このレベルのソース量ならスパゲッティにならずに見渡せるからいいかな。
構造設計、今後は多少やっておくかw

144.HSPでゲームを作ろう:培養臼(BAIOUS) その21

無事、HSPプログラムコンテストに応募して、友人たちにも完成版を遊んでもらうことにした。
友人たちは既にプロト版をテストしてもらっていたので、すんなり受け入れてもらったのだけど、他の人にはそうはいかなかった。

もともとシューティングゲーム好きな私なので、壊しちゃだめなシューティングは面白くないかね?と思ったのがきっかけ。
プレイすると、爽快に敵を破壊できるけど、ゲームオーバーになる。あれ?なんで?と思ってほしかった。

でも、これは逆効果だった。結局ルールが分かりにくいのだ。
最初は画面端に細胞がくっついたのがバグだと思われ、報告をいただく。
次に、目的が分かりにくい。わかってからでないと遊べないと。
さらに、爽快感を味わってもらうはずのボーナスステージ。細胞は吸着するものだと思って、破壊せずに膨らませたまま画面外に逃していたと。

完全に自分よがりだった。ただただ反省。

そこで急遽、プロモーションビデオもどきの動画を作成してyoutubeへアップして、リンクを紹介した。
紹介文の中にも簡単なルールを記載した。

こういう気配りと、何も説明しなくてもすぐに遊べるようなゲームデザインが大事だなと痛感した。

で、もう一つの気がかりとして、シューターとしての腕は自分よりも上、と思っている友人たちが難しすぎてステージ3を超えられないとの報告があった。
確かにステージ3以降は、細胞の方向が変わったり、武器固定になったりするけど、自分でもギリギリクリアできるぐらいの難易度に調整したはず。
追尾される細胞の出現など、ステージの変化を味わってもらう前に、ゲームを終わられは困る。
そこで、〆切まで2週間あったので、新たな機能を作ることにした。

 ・コンティニュー機能
 ・ステージ練習機能

2022年内の更新は、最後になります。
今年もつたないブログながら、ご覧いただきありがとうございました。
2023年もよろしくお願い致します。