初心者のためのゲームプログラミング入門

プログラミングとゲームの杜

初心者のためのプログラミング入門 & ゲームプログラムの作り方入門

Small Basic 入門

29.ふらふらUFOゲームを作ろう その4

 

[ ふらふらUFOゲームを作ろう その3 ] の続きです。

 

 

ゲームオーバーを表示しよう

やられ演出の次はゲームオーバーを表示します。
絵は使わず Shapes の機能を使って次のような感じにします。

ゲームオーバーの表示

テキストに影があります。気が付きましたか?
これは2つのテキストを少しずらして表示しています。

Shapes を使ったテキストの登録は次のようになります。

shape を使ってテキストを表示する

影となる黒い文字を msg2 として先に登録します。(30行目)
緑の文字を msg1 として後に登録します。(34行目)
後に登録するほど表示優先は高くなります。(手前に表示されます)

今回の Shapes.AddText はテキストを図形のように扱える便利なものです。
移動や回転なども簡単にできます。

30行目 登録、31行目 表示位置の指定、32行目 隠す
という処理を msg1 でも行ってます。

 

ゲームオーバー中の表示部分です。

Shapes.AddText を表示する

やられ演出とあわせて GAME OVER を mcnt = 600 のタイミングで 表示します。
約60フレーム(1秒間に60回処理する)で動かしているので、やられてから1秒後に「GAME OVER」を表示します。
リトライの機能を付けるので、メッセージを隠します。(144・145行目)

 

今回はテキストでしたが Shapes を使ったので簡単だったと思います。
絵と同じように扱えるのは便利ですね。

 

 

リトライを入れよう

くり返し遊べるようにリトライの仕組みを入れます。

リトライの仕組みを作る

初期処理の init( ) 以外は、While を使ってくり返すようにしました。
これで gameover( ) を抜けたら start( ) へ戻ります。

 

ゲームオーバー中、スペースキーを押すとリトライするようにします。
メッセージは次の画像のように「 PUSH SPACE KEY 」と表示します。

スペースキーを押すとリトライする

ここでゲーム作成のポイントです。
可能な限り操作デバイスは1つにすること
つまり、ゲーム中マウスを使うなら、タイトルでもマウス操作に統一することです。
ゲーム中キーボード操作なのに、タイトルではマウス操作だったりすると
操作に面倒臭さを感じます。

 

それではサブルーチン init に「 PUSH SPACE KEY 」を登録します。
登録方法はゲームオーバーの時と同じです。

shapes を使ったテキストの登録

 

次にゲームオーバー中に「 PUSH SPACE KEY 」を点滅表示させます。
この方法は前回のメテオゲームと同じです。

メッセージを点滅させる

155行目、スペースキーを押された場合、変数 state に “start” を代入します。
state の内容が変わることで、137行目のループから抜けます。
163行目、メッセージを隠します。

これでゲームがくり返されるようになりました。
実行して確認してみましょう。

 

 

初期化の見直し

リトライの確認はしましたか?

試してみると分かりますが、リトライ後、自機が勝手に移動したり
絵が傾いていたりします。

リトライを考慮した初期化がされていない

これは初期化にミスがあります。
そのため、前回の状態が残っているのです。

 

プレイ前の準備サブルーチン start で初期化をしっかり行います。

リトライを考えて初期化する

自機が勝手に移動するのは、変数 movekey に前回の値が残っているからです。
" (ダブルコーテーション) を2つつなげて変数を初期化します。(50行目)
これにより変数 movekey には何も入っていない状態になります。

自機が傾いているのは、やられ演出で回転させたからです。
回転の角度を0に設定すれば、傾きの無い表示になります。(54行目)

それではリトライしても正常にプレイできるか確認してみましょう。

 

リトライに関して、直したい所がまだ1つあります。
スペースキーを押してリトライした後、キーを操作しないでそのままにすると
ゲームオーバー後、勝手にリトライしてしまう所です。

原因は GraphicsWindow.LastKey に " Space " が入ったままになるからです。
LastKey は初期化できないため、別の方法で解決するしかありません。
キー押下のイベント処理で対応できますが、この説明はまた別の機会にします。