プログラミング初心者の子供に何を教えたらいいの?とお悩みの保護者のためのScratch(スクラッチ)の入門講座。Scratchで猫の動かし方はわかったけど・・・次にどんなことをしたらいいの?という疑問にお答えするシリーズです。
今回は時間を取り扱うプログラムを作ってみたいとおもいます。
1. ゲームの制限時間を作ろう
ゲームの中には「制限時間内にクリアする」「制限時間内での得点を競う」など制限時間を使用するものは大変多いです。ゲームで使える制限時間プログラムを2種類の方法で作ってみたいと思います。
1-1. 「1秒待つ」で作る
これはとても簡単で、「残り時間」という変数を作ったあと、1秒ごとに数を減らしていく方法です。実際に作ったプログラムがこちら。
このプログラムでは最初に「残り時間」=60にしているので、約1分のタイマーとなります。
これは簡単でしたね。
1-2. 「タイマー」で作る
Scratchには最初から「タイマー」機能があります。ですが、このタイマーはScratchを起動した瞬間から勝手に動き出すタイマーです。ためしに、タイマーにチェックを入れて、タイマーの動きを確認してみましょう。
スクリプトタブの「調べる」のところをクリックし、タイマーの横のチェックボックスにチェックを入れると、タイマーの値が表示されます。すでにタイマーの中に値が入っていて、数字が勝手に動いていますね。この数字は、Scratchにログインしてからの時間(秒数)が表示されているのです。
また「タイマーをリセット」ブロックを使った時、もしくは、緑の旗を押した時にタイマーの値が0に戻ります。これらのタイマーの性質を使って、制限時間プログラムを作ります。
旗を押したタイミングでタイマーが0になるので、制限時間からタイマーの値を引くだけです。「残り時間」という変数を使ってプログラムを作ってみます。
このプログラムを実行すると・・・このような結果になります。
残り時間は表示されていますが、小数点以下三位まで表示されていて少し見づらいので小数点以下は切り捨てたいと思います。
▼切り下げブロックで、タイマーの値を整数値に修正
このプログラムを実行してみます。
すると、残り時間の表示が整数になり、さっきより見やすくなったと思います。
2. 西暦と和暦の変換をしよう
2018年は平成30年。そして、まもなく平成が終わり新しい元号になります。先日テレビを見ていたら「マイクロソフトが、新元号に対応させるためのアップデートを行った」というニュースをやっていました。
そんな、今ちょっとだけホットな話題の元号に関連して、西暦と和暦の変換プログラムを作ってみたいと思います。
明治以降の和暦(元号)と西暦の関係は以下のようになっています。
2-1. 今年は平成何年?
手始めに、今年が平成何年かを教えてくれるプログラムを作ってみたいと思います。1989年が平成元年なので、現在の年から1988を引けばいいですね。
「平成」という変数を作り、「現在の年ー1988」という計算結果が変数の中に代入されるようにしました。そのあとで、平成何年かをスプライトに言わせるプログラムを追加しています。
実行結果はこちら。(記事執筆は2018年です。)
2-2. 他の元号も取り扱おう
今度は他の元号(明治、大正、昭和)も取り扱いたいと思います。そこで、先ほどの変数「平成」の変数名を変更しておきましょう。変数はわかりやすい名前の方が良いからです。
データのところにある「平成」という変数ブロックを右クリックすると、「変数名を変更」というメニューが表示されます。「変数名を変更」を選択してください。
新しい名前の入力欄が表示されますので、変数名を「和暦」に直しておきましょう。
まずは、西暦を入力してもらいその答えが明治より前なら「明治より前です」とスプライトが言うようにします。
次に、明治、大正、平成ごとに言うセリフが変わるようにしましょう。
こちらのプログラムのような条件式にすると、元号の切り替わりの年、例えば「1989」を入力すると「昭和64年」と「平成1年」の両方をスプライトが答えてくれます。
2-3. 1年を「元年」にしよう
和暦を使うときは、昭和1年、平成1年は昭和元年、平成元年といいます。1年の時は元年となるようにプログラムをさらに作ってみましょう。
こんなプログラムを途中にはさめばOK。
今回は、この元年に変換変換する処理を定義ブロックとして作りました。
あとは、この「元年」ブロックを間に入れていくだけです。
このプログラムを実行すると、下の図のように平成元年と言うようになりました。
3. 知っておくと自慢できる公式
日付関連で知っておくと自慢できる公式も合わせてご紹介いたします。Scratchでも作れるようですが、ちょっとマニアックすぎるのでここではご紹介だけに留めておきたいと思います。
3-1. フェアフィールドの公式
西暦Y年M月D日が、西暦1年1月1日から何日目かを求める公式です。式の詳細は以下のリンク先をご覧ください。
▼閏年の判定方法とフェアフィールドの公式
Scratchにはこれに似たブロックが存在します。
3-2. ツェラーの公式
こちらは曜日に関する公式です。西暦Y年M月D日が、何曜日なのかかを求める公式です。フェアフィールドの公式を変形させて得られるそうです。
▼Wikipedia
ツェラーの公式-Wikipedia
▼Scratchで作った人がいます
https://scratch.mit.edu/projects/134269802/
Scratchのこのブロックも、裏側ではこの公式で計算をしています。
4. まとめ
今回は、時間を取り扱うプログラムを作ってみました。
Scratchにはタイマーや現在の時間を取り扱う機能などが用意されています。これらの使ってみると意外と簡単にプログラムが作れます。日付や曜日というのは子供達にとって身近なものなので、文字だけでも意外と楽しいプログラムが作れるのではないでしょうか。
今回ご紹介した西暦→和暦変換の逆で、和暦→西暦変換プログラムなんてものも作れますね。
また、Scratchの便利なブロックも裏側では、複雑な計算が行われているということも、トリビア的に知っておくと面白いと思います。
今回紹介した内容を応用してアプリなども作ってみたいと思います。