こんにちは、ナナです。
みんなはここまで色々なブロックを使って、プログラミングしてきましたね。
実際のプログラムでは、ブロックをたくさん組み合わせてより難しいプログラムを作ることもあります。
みんなはこれから目的のプログラムを作るために、どのブロックを組み合わせれば目的のプログラムが実現できるのかを考える力が必要になるのです。
この記事では、次のことを学習できます。
では、makecodeを使った、本格的なブロックの使い方を学んでいきましょう。
ちょっと難しい「LED」ブロックの使い方を知ろう

師範!ここまで「もし」ブロックや「くりかえし」ブロックなどの使い方を学んできましたが、本当に自分が使いこなせているのか不安なんです。

確かに!姉上、それは僕も感じていたんだよ。毎日の修行で手裏剣の精度は向上しているが、「プログラミング」の技術が上がっているのかがよくわからないんだ。
師範!自分たちをテストしてもらえませんか?

うん、うん。2人にここまで基本的なブロックの使い方を教えてきたけど、あくまでも基本だからね。実際に使うためには、もう少し深い知識が必要となるね。
それじゃあ、テストをする前にちょっと難しい「LED」ブロックの使い方を解説するね。このLEDを操るプログラミングを後で作ってもらうよ!
高度な「LEDブロック」がある場所
LEDを光らせるといえば、「基本ブロック一覧」の中にある2つのブロックですね。

みんなはこの2つ以外に、「LEDブロック一覧」があることに気が付いていますか?
実はこの中には、プログラミングで本格的に制御することができるLEDのブロックが入っているのです。

LEDブロックを構成する「X」と「Y」の要素
LEDのブロックを見ると「x」「y」というアルファベットの要素があり、数字を指定できる形になっていますね。
この「x」「y」は、LEDの場所を示す数字になっています。関係性は次の通りです。

「x」は横方向、「y」は縦方向の場所を示しています。つまり「x」「y」の2つの数字がそろうことで、1つのLEDの場所を示すことになります。

「x」「y」は「0~4」の数字で示し、2つの数字の組み合わせでLEDの場所を特定します。

この「X」「Y」は算数でグラフの勉強をしたことがある人は理解できますね。それと同じですよ。
LEDのブロックの種類
LEDブロックの中で基本となるのが、次の「点灯」「消灯」「反転」の3つのブロックです。

「点灯」と「消灯」は、指定した場所のLEDをその状態に変更します。「反転」は点灯しているなら消灯へ、消灯しているなら点灯へ変化させます。

「A」スイッチを押すことで、図示した箇所のLEDが点灯します。
LEDの場所情報を使ったプログラミングの修行コーナー!

それじゃあ、このLEDの場所を使ってプログラムを作ってみようね。パズルゲームだと思って解いてみてね。
プログラミングの修行 その1

じゃあ、最初の修行内容だよ。みんな頑張って解いてみてね!


繰り返せって指示されているわね。ということは「くりかえし」ブロックを使う必要がありそうだわ…。
繰り返しながら「x」「y」の数をうまく変更すれば、できそうな気がするわね。

みんなどうかしら、修行をクリアできたかしら。
「くりかえし」ブロックの数をLEDの「x」として利用することで順に点灯することができるわね。あとは1秒待ってから消灯すればいいわね。

変数「X」を作成し、ループカウンターとして利用します。「X」をLEDの点灯位置として使えば、順に「0」→「1」→「2」→「3」→「4」→「0」・・・と変わりますね。

「カウンター付きのくりかえし」ブロックを上手に使えば解ける問題ですね。ループカウンターの数を利用するんですよ!
プログラミングの修行 その2

じゃあ、「修行その1」を少し難しくするよ!解いてみてね。


下方向と右方向に動かすだと…。繰り返す必要があるのはわかるが、いったいどうしたらよいものか、うーん。
そうか!「下方向に繰り返す」「右方向に繰り返す」が2つ組み合わさっているのかっ!わかったぞ!

この修行のポイントは2つの「くりかえし」ブロックを組み合わせることだね。みんな解けたかい? 「X」「Y」のループカウンターを使ってLEDの位置を順番に変えていけばいいってことだよ。
タネがわかれば、そんなに難しくないぞ!よく見てくれよな!

「くりかえし」ブロックの中にもう一つの「くりかえし」ブロックが含まれていますね。
このようにすることで下方向と右方向へ、順にLEDを点灯させることができます。

「くりかえし」の中に「くりかえし」があることを「多重ループ」と呼びます。プログラミングではよく利用される形なんですよ!
プログラミングの修行 その3

「修行その1」は左から右に光らせたけど、今度は右から左に逆順に光らせてみよう!できるかな?


修行その1では「ループカウンター」を「X」の位置に指定して0~4に順番に増やしたけど、今度は減らさなくちゃいけないってことよね。
「ループカウンター」って数を増やすことしかできないのにどうすればいいのかしら…。うーん、困ったわ。

LEDを光らせるための場所は(4,0)→(3,0)→(2,0)→(1,0)→(0,0)の順に点灯するプログラムをすればいいってことね。
ループカウンターは数が順に増えるけど、それを規則性を利用して点灯する場所を算出することはできないかしら?
そうよ!発想を逆転させるんだわっ!
この問題は「カウンター付きくりかえし」ブロックと、「四則演算」ブロックを上手に組み合わせることで解くことができます。

四則演算とは「+-×÷」の4種類の演算のことです。

四則演算のどれかを利用するんですよ。どれを使えばいいのかわかるかな?

フフフ、師範!解きましたよ。この意地悪な問題をね。
増やすことで減らす、この「なぞなぞ」を解き明かしましたわ。答えはこれよっ!くらえっ。

「4」からループカウンターの数を引き算することで、「x」の数を順に小さくすることができます。わかりますか?
「x」の位置を表す4-「カウンター」の計算結果は、次のようになります。
「カウンター」変数が0のとき、「x」は4
「カウンター」変数が1のとき、「x」は3
「カウンター」変数が2のとき、「x」は2
「カウンター」変数が3のとき、「x」は1
「カウンター」変数が4のとき、「x」は0

これが「数を増やすことで減らすことができる」という「なぞなぞ」の答えですよ。みんなわかったかな。
プログラミングの形はたくさんあるから、このプログラム以外でも目的の動作ができているなら大丈夫だよ!
プログラミングの修行 その4

修行内容をさらに難しくしていくよ。みんな、頭の体操だと思って解いてみてね! でも、簡単には解けないからね。


LEDの点灯を一周だと…。急に難しさが上がったような気がするぞ。「くりかえし」ブロックと「もし」ブロックを組み合わせればできそうだが。
くっ…、なんて難しさだ。できるのか本当に…、考えろ、最後まであきらめるな。みんなも一緒に戦うぞ!

この問題はちょっと難しかったけど、みんな解けましたか?プログラムは工夫次第で様々なことができますよ。
ブロックをどんな風に組み合わせればよいのかを、パズルのように解いていくんです。
プログラム内容

プログラム解説
「モード」変数は、LEDが点灯している辺を表しています。0~3が各辺を示すようにしています。この「モード」を管理することで「X」と「Y」をどのように増減するかを決定します。
「モード」変数が0のとき、上辺を意味する。Xの位置を右にずらす目的を持つ。
「モード」変数が1のとき、右辺を意味する。Yの位置を下にずらす目的を持つ。
「モード」変数が2のとき、下辺を意味する。Xの位置を左にずらす目的を持つ。
「モード」変数が3のとき、左辺を意味する。Yの位置を上にずらす目的を持つ。

「カウンター」変数は、各辺の中でLEDをずらす回数を管理しています。0~3で合計4回動いたら、次のモードに移行します。

この「モード」と「カウンター」の2つの変数を使うことで、LEDの「X」「Y」の位置をずらしながら点灯しているのです。

「変数」をしっかりと使いこなすことが、プログラムにおいては大事なんだな。変数の数をどんな風に変化させていくかによって、目的のプログラムを作り出すんだ!

micro:bitのプログラムを最初から学びたい子は、ここから始めよう!