さあ、2回目のMr. Bunのおうちでもっとプログラミングのコーナーだよ!
まだ前回の記事を読んでないひとはここを読んでみよう。
いきなりだけどみんなは海に流れるごみの多くは川から来ているということを知っているかな?海ごみ問題(プラスチックだけじゃないね)を解決(かいけつ)するためには川から流れてくるごみを海に流れる前にとってしまうというのも一つの手だ。ということで、みんなでmicro:bitを使って川に流れているごみをキャッチするゲームを作っていきたい。ゲームはこういうものだよ。
でも一度にこんなむずかしいものを作るんじゃなくて、ゲームを作るために必要なものを3回にわけて説明して、4回目で川のごみとりゲームを作ろう。4回でやっていくのは
1回目:時間内にがんばってみる(くりかえしと時間を学ぶ)
2回目:川にごみをながしてみる(LEDとx, yの考え方を学ぶ)
3回目:ごみをキャッチする (当たり判定(はんてい)を学ぶ)
4回目:川のごみとりゲームを作る
だよ。
今回は、川のごみとりゲームを作るために必要なくりかえしを使って時間を計るためのプログラムを書いていきたい。必要なのは、「最初だけ」、「ずっと」、「稼働(かどう)時間」というブロックだ。これを頭にいれて先に進もう!
プログラムの目的は
micro:bitが起動してから10秒をはかり
その間micro:bitが何回ゆさぶられたかを数え
10秒たったらその数をLEDに出す
だよ。
じゃあ、早速MakeCodeを開こう!
MakeCodeで新しいプロジェクトを作って、プロジェクトの名前は「ゆさぶりカウンター」にしよう。今回は「最初だけ」と「ずっと」は残しておこう。
最初のステップではシンプルに、micro:bitがゆさぶられた数をLEDに出すというプログラムを作ろう。
ステップ1
micro:bitがゆさぶられた数をLEDに出す
レッツコード!
- ゆさぶられた数をおぼえるために、ツールボックスの「変数」を開き変数「ゆさぶられた数」を追加する
- ツールボックス「変数」からとってきた「変数ゆさぶられた数を0にする」ブロックを「最初だけ」ブロックに入れる
- ツールボックス「入力」から「ゆさぶられたとき」ブロックをとってきてワークスペースに入れる
- ツールボックス「変数」からとってきた「変数ゆさぶられた数を1だけ増(ふ)やす」ブロックを「ゆさぶられたとき」ブロックに入れる
- 「ずっと」ブロックにツールボックス「基本(きほん)」からとってきた「数を表示(ひょうじ)」ブロックをいれ、変数「ゆさぶられた数」を表示させる
さあ、プログラムが出来たかな?ダウンロードして、micro:bitがゆさぶられた数をLEDに出してみよう!
ゆさぶればゆさぶるほどLEDに出されている数がふえていくのが分かったね!でもゆさぶるだけのゲームだとなんかつまらないよね。つぎは、10秒の時間制限をつけてこのゲームを完成させてみよう!
ステップ2
micro:bitが起動してからmicro:bitが何回ゆさぶられたかを数え10秒たったらその数をLEDに出す。
さてどうやったらmicro:bitで10秒たったか分かるか考えてみよう。「時間を計る」というのはタイマーとかストップウォッチがやっていることだね。micro:bitには、「稼働時間」というmicro:bitが起動してからすぎた時間を数えてくれるブロックがあるんだ。なんか、時間をはかれそうだよね?たとえば、タイマーはスタートしてから一定の時間がすぎたかどうかずっと数えているよね。これは「今の時間」と「スタートした時間」の間が「スタートからの時間」てことだよね。それって「稼働時間」ブロックと変数を使って計算すればできるんだ。
どういうことかというと、
スタートした時間 = スタートしたときの「稼働時間」
スタートからの時間 = 今の時間(稼働時間)- スタートした時間
ということだ。
たとえば、micro:bitが起動してから2秒たってタイマーがスタートし、その後、起動して5秒たった時点では、
スタートからの時間 = 5 – 2 = 3
となるから「スタートからの時間」は3秒だね。ということで「スタートした時間」と「スタートからの時間」という変数を追加すれば、好きなタイミングで時間を計ることが出来るようになるんだ。
では、「スタートからの時間」が10秒たったら、「ゆさぶられた数」をLEDに出そう。10秒未満のときには「SHAKE!(日本語で、ゆさぶれ!という意味)」とLEDに出して、ゆさぶられた数を数えるよ。ここで大事なのが、micro:bitの時間の数え方だ。時間の単位は「秒」ではなくて「ミリ秒」なんだ。「ミリ秒」は「1秒の1000分の1」つまり「1秒=1000ミリ秒」なので「10秒=10000ミリ秒」というのを頭に入れてコードを作っていこう!
レッツコード!
- ふたつの変数「スタートした時間」「スタートからの時間」を追加し、「最初だけ」ブロックに「変数スタートした時間を0にする」を入れる
- ツールボックス「入力」をおしたときに「入力」の下に出てくる「その他」から「稼働時間(ミリ秒)」ブロックをとってきて、「変数スタートした時間を0にする」の0の部分に入れる
- 「ずっと」ブロックの中にあった「数を表示」ブロックをとりのぞいてワークスペースに置いておく
- 変数「スタートからの時間」、ツールボックス「計算」の中にある「0-0」、「稼働時間(ミリ秒)」ブロック、そして変数「スタートした時間」をとってワークスペースに用意する
- 4で用意したブロックを組み合わせ「変数スタートからの時間を稼働時間(ミリ秒)―スタートした時間にする」というブロックをつくる
- ツールボックス「論理(ろんり)」から「もし~ならでなければ」ブロックをとってきて「ずっと」ブロックの一番下に入れる
- ツールボックス「論理」の中の「くらべる」というところにある「0<0」というブロックと変数「スタートからの時間」をワークスペースに用意する
- 7で用意したブロックを組み合わせ「もし10000 < スタートからの時間なら」というブロックをつくる(10秒=10000ミリ秒だったよね)
- 「もし10000 < スタートからの時間なら」のブロックに3でワークスペースに置いておいた「数を表示」ブロックを入れる
- ツールボックス「基本」から「文字列を表示」をとってきて「でなければ」ブロックにいれ、文字列を「SHAKE!」にする
- ツールボックス「論理」から「もし~なら」ブロックをとってきてワークスペースの中に置く
- 11で用意したブロックを「もしスタートからの時間 < 10000なら」というブロックにする
- 12でつくったブロックを「ゆさぶられたとき」ブロックに入れる(このとき「変数ゆさぶられた数を1だけ増やす」ブロックをはさむように入れる)
ここまで来たら完成だ!完成したもので試してみよう!
プログラムをダウンロードして、10秒間で何回micro:bitをゆさぶれるかはかってみよう!ゲームをもう一度始めたいときはmicro:bitのうらにあるリセットボタンをおすといいよ。
追加課題
リセットボタンではなくてAボタンでタイマーをもう一度スタート出来るようにしてみよう。