見出し画像

MakeCodeでpython-5リストにスプライトを追加

こんにちはロック204チャンネルです。
今回は「MakeCodeでPython 5 リストにスプライトを追加」をお送りします。
それでは最初に今回作成するイメージを見て行きましょう。


https://amzn.to/49TJr02

最初にリストについて説明して行きます。
リストは データを保存するメモリーの一つですが、前に説明した変数と違って 一つのリストにたくさんのデータを保存することができます。
リストは名前がついた 一連の箱と考えてください。これらの箱にはそれぞれインデックス番号と言われる個々の箱を識別する数字を使用します。
このインデックス番号を使用して、 箱を特定してデータを入れたり 出したりすることができます。
インデックス番号は0番から始まり1、2、3、 4のように 増えていきます。
リストにデータを入れる場合には、 右上のように リスト名例えばaイコール角括弧10,20,30のようにしてデータを格納します。
データを参照する場合はa角括弧1のように して参照することができます


リストの基本的な使いかたについて説明します。
リストを作成するには、スライドの1行目のような形で「リスト名=[ ]」の中にデータをカンマで区切って並べていきます。
また数値だけでなく、3行のように文字もデータとして追加することができます。
リストの表示は、2行、4行のようにprint命令でリスト名を書くとデータを表示することができます。
MakeCodeでは、print文はデータを「表示シュミレーター」で右のように表示させることができます。

リストに入れたデータを参照するには、インデックス番号を角括弧の中に入れて参照します。
3行ではインデックス番号2のデータを取り出しています。
注意しなければならないのは、インデックスは0番から始まっています。したがってインデックス番号2のデータは30となります。
また4行のprint(list_a[3])は40と言うことになります。

リストに値を代入するには参照と同様にインデックス番号を指定して値を代入します。
この例では、3行目でlist_aのインデックス番号1のデータを200で書き換えています。

空のリストを作る方法は、1行のようにリスト名:データ型=[]のように書きます。
そして、このリストにデータを追加するにはappend命令を用い括弧の中にデータを入れます。
するとリストの最後の要素としてデータが追加されていきます。
この例では、1行で空のリストを用意し、3行で10を追加し、5行でさらに次のデータ20、7行で次のデータ30という風に追加されていきます。
これが基本的なリストの使用方法となります。
データは、数値、文字が使えますが、MakeCodeにおいてはスプライトもデータの対象となります。

それでは今回作るプログラムの説明を行っていきます。
最初に15行で変数counterを用意しスプライトを下に何回どうしたかを記録します。
16行で変数speedを用意し300を代入しています。この変数で設定された値をスプライトが移動したときプログラムを停止する時間とします。
17行でリスト名sp_listを用意します。ここでのデータ型はList[game.LedSprite]として空のリストとします。
18行ではスプライト数をsp_n=4として設定します。
19行20行でスプライトの数だけループを繰り返し、sp_listにスプライトを追加して行きます。
x座標は0から4の乱数を、y座標はディスプレイの上端である0とします。

こちらは全体の動きをコントロールするon_forever関数です。
Counterはグローバル変数として定義します。
25行でスプライトを下に一つ動かします。
そして次の26行でcounterを一つ追加します。
27行では、counterが4、つまりスプライトが下端に達した時
28行でスプライトをスタート位置にセットする関数を呼び出します。

こちらがスプライトを下に動かす関数move_spです。
2行のfor文でスプライトの数だけ
3から5行のプログラムを実行します。
3行では、sp_listより順にスプライトを選択し、y座標を一つ増やします。つまり下の方にスプライトを移動させます。
この時4行では、x座標を変化させますが、乱数によって-1から+1の範囲で左右方向に動かします。
そして変数speedで設定した時間だけプログラムを止めます。

こちらはスプライトをスタート位置にセットする関数y_resetです。
Counterはグローバル変数として設定しています。
9行では、スプライトの数だけy座標、x座標を再設定しています。
y座標は上端である0、x座標は乱数により 0ら4の範囲で設定を行っています。
以上でプログラムの説明を終わります。
ご視聴ありがとうございました。


def move_sp(): #スプライトを下に動かす
    for i in range(sp_n):
        sp_list[i].change(LedSpriteProperty.Y, 1)
        sp_list[i].change(LedSpriteProperty.X, randint(-1, 1))
        basic.pause(speed)

def y_reset(): #スプライトをスタート位置にセットする
    global counter
    for j in range(sp_n):
        sp_list[j].set(LedSpriteProperty.Y, 0)
        sp_list[j].set(LedSpriteProperty.X, randint(0, 4))
    counter = 0

#初期設定
counter = 0 #スプライトを下に何回移動したか
speed = 300 #スプライトを移動してからプログラムを停止する時間・ミリ秒
sp_list: List[game.LedSprite] = [] #スプライトを入れるリストを作成
sp_n = 4 #スプライト数
for i in range(sp_n): #リストにスプライトを追加
    sp_list.append(game.create_sprite(randint(0, 4), 0))


def on_forever(): #全体の動きをコントロール
    global counter
    move_sp() #スプライトを下に動かす
    counter += 1
    if counter == 4: #スプライトが下端に達したとき
        y_reset() #スプライトをスタート位置にセットする
basic.forever(on_forever)


MakeCodeのコード


この記事が気に入ったらサポートをしてみませんか?