配列を使って行動を記録してみよう

一つの変数に複数の値を入れたいといった事があったとします。

こんな時は配列型という複数の値を入れる事が出来るデータ型を使います。


配列に関する詳しい説明は当記事ではまだ触れない事にしています。

一つの変数に複数の値を順に入れる事ができて値をまとめて管理できる程度の認識で読み進めてください。



今回はマイクロビットを色んな方向に傾けた時の向きと順を記録してみます。




マイクロビットを左に傾けた時を left の l にして、右の時は right の r 、上の時は up の u で下の時はdown の d の値を記録することにします。


MakeCodeを開き、



高度なブロックにあります配列を開き、



変数 文字列の配列を選び、最初だけブロックに入れます。

この時、変数の値に空の配列を入れておきます。



左に傾けたときブロックを取り出し、文字列の配列の最後に l を追加するようにします。


同様に



右、上と下に傾けた時のコードも追加しておきます。


最後に



ボタンAを押した時の処理を追加します。

配列用の繰り返しのブロックを挿入して、そのブロック内で文字列の判定をして、判定の結果に合わせて矢印の向きを表示するようにします。


ボタンAの処理の最後に変数の値を空の配列にしておくことを忘れずに。




今回のコードをMicroPythonで書き換えてみます。

from microbit import *

# 傾きを記録するための配列(リスト)
pattern = []

while True:
	if accelerometer.was_gesture('left'):
		pattern.append("l")
	elif accelerometer.was_gesture('right'):
		pattern.append("r")
	# 注意:upとdownは逆になる
	elif accelerometer.was_gesture('up'):
		pattern.append("d")
	elif accelerometer.was_gesture('down'):
		pattern.append("u")

	if button_a.is_pressed():
		for direction in pattern:
			if direction == "l":
				display.show(Image.ARROW_W)
			elif direction == "r":
				display.show(Image.ARROW_E)
			elif direction == "u":
				display.show(Image.ARROW_N)
			elif direction == "d":
				display.show(Image.ARROW_S)
			sleep(500)
		# 空の配列を挿入して、今までの記録をすべて消す
		pattern = []

※ 配列(リスト)について

タートルグラフィックスでリストやタプルでカメを動かしてみよう




おまけ

下記のようにコードを書き換えてみて、マイクロビットのリセットボタンを押した後にすぐにボタンAを押してみて、どのような実行結果になるか確認してみよう。



MicroPythonの方の書き換え

4行目の

pattern = []

に変更

pattern = ["u", "l", "d", "r"]
京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。

詳しくはinunosinsi/mcws_blockly - githubをご覧ください。