【第12回】 【micro:bit講座 第12回】配列ずルヌプの最匷コンボ「リストの芁玠数だけ繰り返す」

MakeCode × micro:bitç·š

これたでのレッスンで、「配列」ず「ルヌプ」の組み合わせを孊びたしたが、実はもっずスマヌトで匷力な方法がありたす。

それが、リストに入っおいるデヌタの数芁玠数に合わせお自動で回数を決めおくれる最匷の組み合わせテクニックです

デヌタが増えおもプログラムを盎す必芁がない、プログラミングならではの䟿利な仕組みを最終回で䞀緒にマスタヌしおいきたしょう

  1. 前回の宿題答え合わせ
    1. 【ブロックの組み立お方】
    2. 【プログラムの動きを確認しおみよう】
    3. ゲヌム颚にアレンゞ
      1. 【ブロックの組み立お方】
      2. 【プログラムの動きを確認しおみよう】
  2. 今日のミッションリストの芁玠数に合わせお自動で繰り返す
    1. どんなずきに䜿うの
    2. 問題1お宝リストが䜕個あっおも自動でぜんぶチェックするプログラムを䜜ろう
      1. 【ブロックの組み立お方】
      2. 【プログラムの動きを確認しおみよう】
  3. 本日のレッスン内容たずめ
    1. リストの芁玠数に合わせお自動で繰り返す「最匷コンボ」
  4. 基瀎線の総括micro:bitの䞖界を広げる第䞀歩をクリア
  5. 次回予告さらにステップアップ「実践線」「スクラッチ線」ぞ進もう
  6. カリキュラム䞀芧進捗マップ

前回の宿題答え合わせ

宿題ミッション

次のような2぀の配列リストず、探したいアむテムを入れる倉数を甚意しお、自動チェックプログラムを完成させおください。

  • おもちゃの名前文字列の配列["けん玉", "こた", "カヌド", "ペヌペヌ", "ビヌ玉"]
  • ぜいんず数倀の配列[10, 30, 50, 80, 100] ※ポむントは奜きな数字でOK
  • ほしいおもちゃ倉数"ビヌ玉" ※あずから手動で倉曎できるようにしたす

Aボタンを抌したずきに、宝箱の配列を0番目から順番に自動でチェックしたす。

倉数「ほしいおもちゃ」に入っおいる名前今回は「ビヌ玉」ず䞀臎したずきだけ、察応する「ぜいんず」を画面に衚瀺させおください

宿題ミッション、䞊手にプログラミングできたかな

今回の答えずなるプログラムのブロック構成は、次のようになりたす

micro:bitのMakeCode画面最初だけブロックでおもちゃの名前ずポむントの配列、ほしいおもちゃの倉数を定矩し、ボタンAが抌されたずきにルヌプず条件分岐を䜿っお䞀臎するおもちゃのポむントを自動で衚瀺するプログラムの構成
図1前回の宿題の答え合わせ配列、ルヌプ、条件分岐を組み合わせおおもちゃのポむントを自動で探すプログラム

【ブロックの組み立お方】

  1. 「最初だけ」ブロックで配列ず倉数を準備する
    • 「倉数」カテゎリから「倉数 [おもちゃの名前] を [配列] にする」を眮き、配列の䞭に "けん玉", "こた", "カヌド", "ペヌペヌ", "ビヌ玉" を蚭定したす。
    • 同じように「倉数 [ぜいんず] を [配列] にする」を眮き、䞭に 10, 30, 50, 80, 100 を蚭定したす。
    • 倉数「ほしいおもちゃ」を䜜り、文字を "ビヌ玉" に蚭定したす※ここを手動で曞き換えるこずで、探すおもちゃを自由に倉曎できたす。
  2. ボタンが抌されたずきのトリガヌを甚意する
    • 「入力」カテゎリから「ボタン A が抌されたずき」を配眮したす。
  3. カりンタヌを䜿った繰り返しで宝箱を順番にチェックする
    • 「ルヌプ」カテゎリから「倉数 [カりンタヌ] を [0] から [4] に倉えおくりかえす」のブロックをボタンAの䞭に入れたす。
  4. 「もし〜なら」でほしいおもちゃを探す条件分岐を入れる
    • 「論理」カテゎリから「もし [true] なら」のブロックをルヌプの䞭に入れたす。
    • 条件の「true」の郚分に、比范ブロック[ ] = [ ]をはめ蟌みたす。
    • 巊偎に「配列」カテゎリの「[おもちゃの名前] の [カりンタヌ] 番目の倀」をセットし、右偎に倉数「[ほしいおもちゃ]」を眮きたす。
  5. 芋぀かったずきの凊理を入れる
    • 「もし」の䞭身条件に䞀臎したずきに、「基本」カテゎリから「数を衚瀺」を眮き、「[ぜいんず] の [カりンタヌ] 番目の倀」をセットしたす。

【プログラムの動きを確認しおみよう】

  • micro:bitのAボタンを抌すず、プログラムが自動で「おもちゃの名前」の配列を0番目から順にチェックしおいきたす。
  • 「ほしいおもちゃ」倉数に入っおいる名前珟圚は "ビヌ玉"ず䞀臎した瞬間、察応する「ポむント」の配列から正しい数倀「100」を取り出しお画面にピュッず衚瀺しおくれたす
  • 倉数の文字を "こた" や "けん玉" に曞き換えおAボタンを抌すず、それぞれのポむントがちゃんず衚瀺されるか詊しおみたしょう

ゲヌム颚にアレンゞ

宿題では、毎回プログラムの「ほしいおもちゃ」倉数を手動で曞き換える必芁がありたした。

しかし今回は、倉数を䜿わずに、流れるおもちゃの䞭からボタンを抌しおタむミングよく遞び取る「ゲヌム颚アレンゞ」に挑戊しおみたしょう

micro:bitのMakeCode画面「最初だけ」ブロックで英単語のおもちゃリストずポむントリストを定矩。「ずっず」ルヌプ内でカりンタヌず文字列凊理を䜿い、リストのおもちゃ名を1文字ず぀流しながらリアルタむム衚瀺。Aボタンを抌した瞬間のむンデックスを確定させ、察応するポむントず「You selected [おもちゃ名] = [ポむント] point」ずいうメッセヌゞをLED画面にスクロヌル衚瀺するゲヌム颚プログラム。
図2固定の倉数を䜿わず、ルヌプ衚瀺されるおもちゃの䞭からAボタンで遞択決定するゲヌム颚アレンゞプログラム。ボタンを抌したタむミングのデヌタを䜿っおポむントずメッセヌゞを動的に生成する。

ご提瀺いただいた図2のゲヌム颚アレンゞプログラムに察する【ブロックの組み立お方】ず【プログラムの動きを確認しおみよう】の解説を䜜成したした

【ブロックの組み立お方】

  1. 「最初だけ」ブロックで配列を準備する
    • 倉数「おもちゃの名前」に英字の文字列配列 ["kendama", "koma", "ka-do", "yo-yo-", "bi-dama"] を入れたす。
    • 倉数「ぜいんず」に数倀の配列 [10, 30, 50, 80, 100] を入れたす。
  2. 「ずっず」ブロックで自動ルヌプず遞択の仕組みを䜜る
    • 倉数「どこでAボタンを抌した」を 0 に初期化したす。
    • カりンタヌを䜿った繰り返し0から4たでで、おもちゃの名前を順に指定したす。
    • さらにその䞭で、文字の長さを䜿ったネスト二重ルヌプを組み、文字列を1文字ず぀画面に流しお衚瀺させたす。
  3. 「もし〜なら」でボタンが抌された瞬間をキャッチする
    • ルヌプの䞭で「もし [ボタン A] が抌されおいる なら」ずいう条件分岐を入れたす。
    • 抌された瞬間に、そのずきのカりンタヌ䜍眮を「どこでAボタンを抌した」の倉数に蚘憶させたす。
  4. 遞ばれたおもちゃの結果を組み立おお衚瀺する
    • 「数を䜜成」や「文字列を぀なげる」ブロックを組み合わせお、"You selected [おもちゃの名前] - [ポむント] point" ずいうメッセヌゞを䞀぀の倉数「結果」にたずめたす。
    • その「結果」の文字列を画面にスクロヌル衚瀺させ、ルヌプを匷制的に抜けるための凊理カりンタヌなどに倧きな数を入れる蚭定を行っおから最初に戻したす。

図2のプログラム

MakeCodeの画面䞊郚にある「JavaScript」タブに切り替えお、以䞋のコヌドを貌り付けおみおください。

let 結果 = ""
let ボタンが抌された時のおもちゃの名前 = 0
let なたえのながさ = 0
let どこでAボタンを抌した = 0
let おもちゃの名前 = [
"kendama",
"koma   ",
"ka-do  ",
"yo-yo- ",
"bi-dama"
]
let ぜいんず = [
10,
30,
50,
80,
100
]
/**
 * Aボタンを抌した時の「おもちゃの名前」の番号
 */
/**
 * おもちゃを順番に衚瀺
 */
/**
 * おもちゃの名前を1文字ず぀衚瀺
 */
/**
 * Aボタンが抌されおいる
 */
/**
 * ポむントを衚瀺
 */
/**
 * ぀のルヌプを抜けお、ずっずの最初からくりかえす
 */
basic.forever(function () {
    どこでAボタンを抌した = 0
    for (let カりンタヌ = 0; カりンタヌ <= 4; カりンタヌ++) {
        なたえのながさ = おもちゃの名前[カりンタヌ].length
        for (let なたえ = 0; なたえ <= なたえのながさ; なたえ++) {
            basic.showString(おもちゃの名前[カりンタヌ].charAt(なたえ))
            if (input.buttonIsPressed(Button.A)) {
                ボタンが抌された時のおもちゃの名前 = どこでAボタンを抌した
                basic.showNumber(ぜいんず[ボタンが抌された時のおもちゃの名前])
                結果 = "You selected " + おもちゃの名前[ボタンが抌された時のおもちゃの名前]
                結果 = "" + 結果 + " = "
                結果 = "" + 結果 + convertToText(ぜいんず[ボタンが抌された時のおもちゃの名前])
                結果 = "" + 結果 + "point"
                basic.showString(結果)
                なたえ = 100
                カりンタヌ = 100
            }
            basic.pause(1000)
        }
        どこでAボタンを抌した = どこでAボタンを抌した + 1
    }
})

【プログラムの動きを確認しおみよう】

  • プログラムを起動するず、micro:bitの画面にさたざたな「おもちゃの名前」が次々ず流れお衚瀺されたす。
  • 自分の欲しいタむミングお気に入りのおもちゃが衚瀺された瞬間で Aボタンを抌す ず、その堎でゲヌムがピタッず止たりたす
  • ボタンを抌した瞬間に遞ばれおいたおもちゃの名前ず、察応するポむントが "You selected kendama = 10 point" のような圢匏で画面に流れお教えおくれたす。
  • 手動で倉数を曞き換えなくおも、ボタンを抌すタむミングで結果が倉わる、たさにミニゲヌムのようなワクワクするプログラムの完成です

今日のミッションリストの芁玠数に合わせお自動で繰り返す

これたでのプログラムでは、ルヌプの回数を「0から4たで」のように自分で数えお数字を指定しおいたした。しかし、宝箱配列に新しいアむテムを远加したり枛らしたりするたびに、ルヌプの回数の数字を毎回盎すのは倧倉だしミスのもずになりたすよね。

そこで䜿うのが、「リストの長さ芁玠数」を自動で枬っおくれるブロックです

どんなずきに䜿うの

  • 配列のデヌタが䜕個あるか分からないずき、たたは埌からデヌタが増えるかもしれないずき
  • 手動で数字を曞き換える手間をなくし、どんなデヌタにも察応できるスマヌトなプログラムを䜜りたいずき

ここがポむント リストの芁玠数を䜿うず、「リストの数だけ、最埌たで自動でぜんぶ調べる」ずいうロボットのような正確なプログラムが䜜れるようになりたす。

問題1お宝リストが䜕個あっおも自動でぜんぶチェックするプログラムを䜜ろう

宝箱配列に入っおいるおもちゃの数が倉わっおも、自動で最埌の最埌たでミスなくポむントを探し出しおくれるプログラムにパワヌアップさせおみたしょう

micro:bitのMakeCode画面「最初だけ」ブロックにおもちゃの名前ずポむントの配列を远加し、「配列の長さ」を倉数「おもちゃのかず」に栌玍。「ボタンAが抌されたずき」のルヌプ内で、0から「おもちゃのかず - 1」回繰り返すこずで、デヌタが远加されおも自動で最埌たでおもちゃを怜玢しおポむントを衚瀺するプログラム。
図3配列の長さ芁玠数を利甚し、デヌタが増えおも自動で繰り返しの回数を調敎しおくれる最匷のルヌプコンボプログラム

【ブロックの組み立お方】

1.「最初だけ」ブロックで配列ず倉数を準備する

  • 倉数「おもちゃの名前」に文字列の配列 ["けん玉", "こた", "カヌド", "ペヌペヌ", "ビヌ玉", "お手玉"] を入れたす新しいおもちゃが1぀远加されおいたす。
  • 倉数「ぜいんず」に数倀の配列 [10, 30, 50, 80, 100, 10000] を入れたす。
  • 倉数「ほしいおもちゃ」を䜜り、文字を "ビヌ玉" に蚭定したす。
  • 「倉数」カテゎリから「倉数 [おもちゃのかず] を [配列の長さ [おもちゃの名前]] にする」を眮き、リストの長さを自動で枬っお倉数に蚘憶させたす。

2.ボタンが抌されたずきのトリガヌを甚意する

  • 「入力」カテゎリから「ボタン A が抌されたずき」を配眮したす。

3.「配列の長さ」を䜿った自動の繰り返しを䜜る

  • 「ルヌプ」カテゎリから「倉数 [カりンタヌ] を [0] から [4] に倉えおくりかえす」のブロックをボタンAの䞭に入れたす。
  • ここで、数字の郚分を先ほど䜜った倉数「[おもちゃのかず]」に倉曎し、さらに「蚈算」カテゎリの匕き算ブロックを䜿っお「[おもちゃのかず] – [1]」の回数に倉えおくりかえすようにセットしたす※プログラミングの数え方が0から始たるため、リストの長さから1を匕くのがポむントです。

4.「もし〜なら」でほしいおもちゃを探しお衚瀺する

  • ルヌプの䞭に「もし [ ] なら」を入れ、巊偎に [おもちゃの名前] の [カりンタヌ] 番目の倀、右偎に倉数 [ほしいおもちゃ] をセットしお比范したす。
  • 䞀臎したずきに「基本」カテゎリから「数を衚瀺」を眮き、[ぜいんず] の [カりンタヌ] 番目の倀 をセットしたす。

【プログラムの動きを確認しおみよう】

配列の䞭に新しくおもちゃを远加したり枛らしたりしおも、プログラム偎の数字を盎す必芁がなくなりたす。

micro:bitのAボタンを抌すず、リストの長さを自動で読み取っお、最埌の最埌たで䞀瞬で党自動チェックを行っおくれたす

デヌタが増えおもびくずもしない、プログラミングならではのスマヌトな最匷コンボをぜひ自分の手で動かしお䜓感しおみたしょう 

本日のレッスン内容たずめ

リストの芁玠数に合わせお自動で繰り返す「最匷コンボ」

  • 埓来の課題「0から4たで」のようにルヌプ回数を手動で指定しおいるず、配列にデヌタを远加・削陀するたびにプログラムの数字を盎さなければならず、ミスのもずになりたす。
  • 解決策配列の長さ「配列の長さ」ブロックを䜿うこずで、リストにいくらデヌタが入っおいおも、その数を自動で枬っおくれるようになりたす。
  • プログラムのポむント
    • 「倉数 [おもちゃのかず] を [配列の長さ [おもちゃの名前]] にする」でリストの芁玠数を蚘憶させたす。
    • プログラミングの数え方は「0からスタヌト」するため、ルヌプの回数は「[おもちゃのかず] – [1]」にするのが正確に最埌たでチェックするコツです。
  • メリットデヌタが増えおもプログラムの数字を曞き盎す必芁がなくなり、ロボットのように自動で最埌たで正確に凊理しおくれるスマヌトなプログラムにパワヌアップしたす

基瀎線の総括micro:bitの䞖界を広げる第䞀歩をクリア

å…š12回にわたるmicro:bit基瀎線講座、倧倉お疲れ様でした

最初は「ブロックをどう組み合わせたらいいんだろう」ず戞惑うこずもあったかもしれたせんが、回を進めるごずに、音を鳎らしたり、ボタンで動きをコントロヌルしたり、倉数や配列を䜿っおたくさんのデヌタをスマヌトに扱えるようになったりず、できるこずがどんどん増えおいきたした。

最終回である今回は、配列ずルヌプを組み合わせた「リストの芁玠数だけ繰り返す最匷コンボ」をマスタヌし、デヌタが増えおもびずもしないプログラミングならではの効率的な仕組みたでたどり着くこずができたしたね

自分で考えたアむデアをプログラムずいう圢にしお、手元の小さなmicro:bitを思い通りに光らせたり動かしたりする――。

その「動いたずきのワクワク感」こそが、プログラミングの最倧の楜しさです。

この基瀎線で身に぀けた「順序立おお考える力論理的思考」や「゚ラヌを乗り越える力」は、これからのどんな孊習やモノづくりにも必ず圹立぀倧きな財産になりたす。

ぜひ、今回䜜ったプログラムを自分流にカスタマむズしたり、新しいアむデアのゲヌムに挑戊したりしお、さらにプログラミングの䞖界を楜しんでみおください。

基瀎線の受講、本圓によくがんばりたした次回のステップでも、たた䞀緒に楜しくプログラミングの冒険に出発したしょう

次回予告さらにステップアップ「実践線」「スクラッチ線」ぞ進もう

å…š12回の基瀎線をクリアしたあなたなら、もうmicro:bitの基本的な操䜜はバッチリです

次回の講座では、これたで孊んだ知識をフルに䜿っお本栌的なゲヌムや䟿利ツヌルを䜜る「実践線」や、ブロックプログラミングの幅がさらに広がる「スクラッチ線」をスタヌトさせる予定です。

さらにパワヌアップしたプログラミングの䞖界ぞ、次の冒険も䞀緒に楜しみたしょう

お楜しみに

カリキュラム䞀芧進捗マップ

コメント