見出し画像

はじめてみよう。プログラミング! - Swift Playgroundsでゲーム作成-5。

点数が出るようになりました。次は時間を決めてその中でゲームを楽しむ、点数を争っていく仕組みを作ります。タイマー機能をつけていきます。

表示部分を追加して、カウントダウンタイマーを作ります。時間が終われば、ゲームオーバーとして、数字をリセットします。

まず、タイマーを作っていきますが、そのデータが入っていく変数を作っていきます。

var time =  30
var frames = 20
var status = "running"
まず残り時間をカウントする変数は、プログラムの先頭に近い部分で定義しておきましょう。上で得点用のscoreを定義した行に続けて、残りの秒をカウントするtimeと、タイマーによるループの数から「秒」の経過を割り出すframesを定義します。とりあえずゲーム時間は30秒としてtimeの初期値は30とします。タイマーによるループは、インターバルを0.05(秒)としているので、1秒間に20回実行されます。そこでframesは、初期値を20としてループの中でカウントダウンすることで、0になったら1秒が経過したと判断できます。

要するにTimerでは"0.05秒"ごとに更新しています。

Timer.scheduledTimer(withTimeInterval: 0.05

タイマーは1秒ごとにカウントダウンしたいので、"0.05 * 20"すれば"1"秒となります。

20回更新すれば1回更新すれば良いですね。そこで、

var frames = 20

としてこれを利用してカウントダウンします。

frames -= 1                    // 20frameで1秒
    if frames == 0{
        time -= 1
}

0.05秒ごとに変数"frame"を"1"ずつ減らします。変数"frames"を"20"減らすと"0"になります。

if frames == 0{
time -= 1
}

"0"になった時に変数timeを"1"減らします。そして表示部分も更新しないといけないので

if frames == 0{
time -= 1
scoreDisp.string = "Time:\(time) 得点: \(score)"   // 表示を更新
frames = 20                  // framesを20に戻す

}

となります。時間の更新をしていきます。

そして今更新中ですよということを表すための変数を作ります。

var status = "running"

とします。この"running"の時は実行中ということです。

タイマーで時間をカウントダウンして"0"になった時に"running"から"gameover"とします。

その"gameover"の処理ですが、

if time == 0{
      status = "gameover"
               
      for i in 0..<moles.count{
         moles[i].center.y = locations[i][1]
      }        
}

変数timeが"0"の場合の処理です。statusは"gameover"にします。

status = "gameover"

そして、クジラを示す、"mole"の位置を元に戻します。x座標は変わってないのでそのまま、y座標を全て最初の位置にfo in ループで数値を変えることで戻します。

for i in 0..<moles.count{
moles[i].center.y = locations[i][1]
}

それでは試してみましょう。

画像1

タイマーが動いて"0"になると、動作は止まり、数字はリセットされます。

この記事が気に入ったらサポートをしてみませんか?