MIT App Inventor 2でリストを作って、その中からランダムにとりだして表示させる方法が分からなかった。
上の図はデザイン編集画面のもの。
英語ランダムのボタンをクリックしたら、ボタン上の水色のA~Eランダムのラベルの表示がA、B、C、D、Eのどれか1つの英語になる。
ボタンをクリックするたびに5つの英語のうち1つがランダムに表示させられる。
これをリストを作って出来ないものか。
ずっと分からず止まっていた理由が、リストの作り方が分からなかった。
リストはブロック画面から作るんですね。
組み込みブロックの中の変数から
グローバル変数の初期化を出して、名前を英語とつけました。
(作るリストの名前を「英語」にした)
次に組み込みブロックのなかのリストから、リストの作成をとりだす。
始めはリストに要素2つしか入れられませんが、
リスト作成の水色のブロック内に見える小さな歯車をクリック。
要素のブロックを追加。
5つの要素を繋げられるようにして、テキストをそれぞれ追加。上からA、B、C、D、Eと入れました。
これで、「英語」という名前のリストのなかに、A、B、C、D、Eが入っています。
今は5つの要素しかリストに入れていませんが、AからZまでの26個を入れようとしたら要素を縦に26個並べて書き込むのか・・・大変。
と思っていましたが、便利なブロックが用意されていました。
組み込みブロックのリストのなかに、「csvをリストに変換、csvテキスト」というブロックがあります。
その後ろにテキストのブロックをつけて、要素を「,」(半角カンマ)で区切って全て書き出します。
今回の場合「A,B,C,D,E」と書いておけば、最初に要素を縦に並べたブロックと同じでした。
要素の個数が多くなったら、作業の画面でやらないで、メモ帳とかエクセルとかで半角カンマで区切った要素を書いておいてコピーして貼り付けが良いですね。
リストが準備できたら、
ボタンをクリックしたら、ラベルのテキストにリスト「英語」のなかの1つの英語をランダムに1つ表示というようにブロックを繋げます。
組み込みブロックのリストのなかにある「リストから無作為に要素を取得」をとりだして、それに組み込みブロックの変数の中から取得をとりだして、英語(リストの名前です)を選ぶ。
図の中ではCSVで作ったリストが繋がっていませんが、図中の「英語」の後ろと付け替えても同じリストになっています。
ボタンを押したら、A,B,C,D,Eがくるくるとランダムに表示される。
リストの作り方が分かったので、手作りのカードを使っていた暗記ものをアプリにしてみよう。
リストは解決だが、ランダムの悩み・・・。
リストから無作為に1つ選ぶのでどうしても、同じものが続けて選ばれるときがある。
今Bが出たのに次もまたBと言うような具合です。
無作為だから正しいのですが、出来れば同じものが続かないような仕組みは出来ないものか・・・。
一度抽出された要素を元のリストから除外したリストを作って、その中から抽出・・・、の繰り返しで、要素が無くなったら始めの全ての要素のあるリストに戻す。みたいなのもいいな。