ゲームシステムの調整

 おひさしぶりです。ひらひさです。現在プレイヤーと敵モンスターのターン性バトルを実現するためにプログラムを考えています。いまだ程遠い段階なのですが、考えている途中で新しい要素を加えたり、細かいゲームシステムを調整しました。今回はそれらの動作とプログラムの解説を行いたいと思います。

今回解説するプログラム目次

  • 連続で同じマップを表示させないようにする
  • ゲームクリアの条件を設定する
  • ゲームクリア、ゲームオーバー画面の作成

連続で同じマップを表示させないようにする

 現在制作しているゲームはランダムでマップを表示させてマップをクリアしていくというコンセプトで作成しております。しかし、開発段階でゲームを進めていると同じマップが選ばれてしまう現象が多々発生しています。現在用意しているマップが少ないことも原因であると考えられますが、マップが多くなっても同様の事例が発生することを考えますと、前回表示したマップを表示させないようなゲームシステムにするのが良いと考えました。


 上はマップをランダムに選ぶ際に該当条件に当たった場合に再度マップをランダムに選ぶという条件文です。この中に Stage == behindstage1 という条件を追加しました。behindstage1にはひとつ前に表示されたマップの値が格納されています。つまり、現在選んだステージがひとつ前に表示されたマップの値と同じ場合、再度マップを選択しなおすようにしています。stage == behindstage2 は二つ前に表示されたマップの値を格納しています。


 上はマップ移動時に動作させるプログラムです。
469行目では変数behindstage1にstageの値を代入しています。これにより、一つ前のマップの値をbehindstage1に代入することができます。
470行目では変数behindstage2にbehindstage1の値を代入しています。これにより、二つ前のマップの値をbehindstage2に代入しています。
 このようにして以前表示されたマップの値を記憶し、連続で表示されないようにしています。

ゲームクリアの条件を設定する

 このゲームはランダムに表示されるマップを攻略するコンセプトになっています。これでは無限にゲームが続いてしまい、終わりが見えなくなってしまいます。そのため、ゲームクリアの条件を設定します。


 またまたフロア移動時のプログラムです。今回は9回フロア移動をしたマップでフロア移動するときにボスマップに移動するプログラムを組みました。
468行目で変数fcをインクリメントしています。これにより、フロアを移動した回数をカウントしています。
480行目~485行目がフロア移動時のマップを選ぶための条件式です。
480~482行目では変数fcが10でないときにランダムにマップを選ぶようにしています。
483行目では変数fcが10の時にボスマップに勝手に移動するようにしています。
移動先のボスマップでボスを倒すとステージクリアです。


 初期画面です。下のfcの値が9になっていることがわかります。初めから変数fcに9を代入して次の階段移動でボスマップに移動するようにしています。


この状態で右ボタンを押します。


ボスマップに強制的に移動しました。弱そうなのですぐに倒しちゃいましょう。


敵を倒しました。これでゲームクリアです。

ゲームオーバー、ゲームクリア画面を作る

敵を倒したり、逆にやられたりするとゲームが終わります。その際、ゲームが終わったことを示す内容を画面内に描きます。

ゲームクリア、ゲームオーバーの条件を満たしたかどうかを判定するのはtick関数内で行います。


tick関数のプログラムです。tick関数を動かす際にキャラクターの体力が0かつおなかの値が0であることを条件にしています。どちらかの値が0になったとき、tick関数は動作しなくなります。代わりに、ゲームオーバー画面の描画を行います。



このような画面です。


これはゲームオーバー画面を描画するプログラムです。
885,886行目でキー操作を受け付けなくします。これでゲームオーバー後はキャラクターを動かすことできなくなります。
887,888行目で画面中央部に赤枠を描画しています。
889~895行目ではGAME OVERの文字を描画します。少しかっこよくするために同じ大きさで色を黒くした文字をずらして描画するようにします。
897~902行目ではゲームオーバーに陥った状況によって表示するテキストを変えています。
897~899行目は体力がなくなった時に描画されるテキストです。条件分岐により、キャラクターの体力が0になったときにのみ描画されるようにしています。
900~902行目はおなかの値が0になったときに描画されるテキストです。これも条件文気によりキャラクターのおなかの値が0になったときにのみ描画されるようにしています。
903~905行目ではゲームオーバー後のプレイヤー操作を支持しています。F5キーを押すことによりブラウザを更新してもらい、ゲームをリセットしてもらいます。これにより、プレイヤーはゲームを新しく再開させることができます。
906行目ではtick処理を止める関数です。

次に、ゲームクリア時の画面を描画するプログラムの解説に移ります。
ゲームクリアはボスを倒したときに画面を描画するようにします。

これがゲームクリア画面です。
プログラムを見ていきましょう。


909行目でflagClearがtrueになったときにゲームクリア判定とし、この画面を描画するようにしています。
他はゲームオーバー画面を描画する際のプログラムと同じです。

コメント

このブログの人気の投稿

自己紹介と作成するゲームの説明

ランダムにモンスターを出現させる

マップをランダムで生成する