Scratchで障害物競争ゲームを作ろう 発展編③経過時間を表示しよう

前回は、ゴール時に「Game Clear!」の文字を表示する演出をつけました。ゲームオーバーの文字も出せたでしょうか?
今回は、ゴールまで何秒かかったかを表示するようにします。いわゆるタイムアタック機能です。一人で何度も記録を更新する遊び方や、何人かで速さを競う遊び方ができるようになります。
発展編②はこちら↓
発展編② ゲームクリアの文字を表示しよう
障害物競争ゲームを作ろうトップ記事はこちら↓
障害物競争ゲームを作ろうトップ記事
『変数』を使ってタイムを表示する
ゲームが開始されからの経過時間を表示できるようにしていきましょう。
変数『タイム』を作る
プログラム再生時(ゲームスタート時)からの経過時間を表示するブロックというのは、Scratchにもともとは用意されていません。
そういうときは、『変数』というものを使って、自分で作ります。
画面右のステージ欄の『背景』をクリックします。

コードタブが選ばれていない場合、コードタブをくりっくしておきましょう。
変数『タイム』を作成します。
①『変数』をクリック
②『変数を作る』をクリック

『新しい変数』を作成する画面が表示されます。
①新しい変数名に『タイム』と入力
②『OK』ボタンをクリック

変数『タイム』が作成されました。
変数のブロックの中に『タイム』というブロックが追加されたことを確認します。また、『タイム』ブロックの左側にチェックボックスがあり、これにチェックがついた状態になっていることを確認します。
プレビュー画面の左上に、『タイム』というのが新たに表示されていることも確認しましょう。もし表示されていなければ、『タイム』ブロックの左側のチェックボックスにチェックがついていませんので、チェックをつけましょう。

プレビュー画面の『タイム』を、コースの邪魔にならないところにドラッグして移動させましょう。

ゲームスタートしてからのタイムを表示する
作った変数『タイム』を使って、ゲームスタートしてからのタイム(秒数)を表示します。
ゲームがスタートしたとき、つまり再生(緑の旗)ボタンが押されたときから時間をカウントします。
ブロックを追加しましょう。
①『イベント』をクリック
②『再生(緑の旗)ボタンが押されたとき』をドラッグ

『タイム』が秒数を表示するということをプログラムするには、『タイム』が1秒ごとに1増えるというふうに言えます。これをコード風にいいかえると、『1秒待って、タイムを1ずつ変える』となります。
①『制御』をクリック
②『(1)秒待つ』をドラッグ

①『変数』をクリック
②『タイムを(1)ずつ変える』をドラッグして『(1)秒待つ』の下にくっつける

『タイム』は、ゲームがスタートしてからゴールするまでずっと増え続けないといけません。なので、『ずっと』ブロックで、「(1)秒待つ」「タイムを(1)ずつ変える』をはさみましょう。
①『制御』をクリック
②『ずっと』ブロックを『(1)秒待つ』ブロックの上あたりにドラッグして、ブロックを挟みこむ。

『ずっと』ブロックのまとまりを、『再生(緑の旗)ボタンが押されたとき』ブロックにつなげておきます。

これで、タイムが1ずつ増える仕組みをプログラムできました。
再生ボタンを押して、タイムが1秒ごとに1ずつ増えていることを確認してみましょう。
動いていますね!
でも、じつはこのプログラムにはバグ(不具合)があります。

一度ゴールするかゲームオーバーするか、停止ボタンを押してもいいです。それから、もう一度再生ボタンをクリックしてください。

タイムが、前回の終わりの数字からそのまま増えていっています。

これではタイム機能として問題があります。
ゲームスタート時に、『タイム』を毎回0に戻しておく必要がありますね。
①『変数』をクリック
②『タイムを(0)にする』を、『再生ボタンが押されたとき』の下に追加

再生ボタンをクリックして、動作を確認してみましょう。

毎回ちゃんと0から始まることが確認できましたか?

まとめ
お疲れ様でした!
これで、ゲームスタートしてからゴールするまでの時間が表示されるようになりました。
『変数』を作れば、ブロックに用意されていないものをプログラムして表現することができるようになります。難しいですが、使えるようになれば、作れるゲームの可能性が大きく広がりますよ!
それでは、次回はゲームの仕上げ、難しさの調整をして、障害物競争ゲームを完成させましょう。
次の記事「発展編④」こちら↓
発展編④ 難しさの変え方
障害物競争ゲームを作ろうトップ記事はこちら↓
障害物競争ゲームを作ろうトップ記事
おすすめ
Scratchでのプログラミング学習におすすめの書籍です。
ディスカッション
コメント一覧
まだ、コメントがありません