ゲームブロックで操作スプラウトと落下物のスプラウトを同時に設置してみよう


ゲームブロックで落下するスプライトを作ろうで作りました落下物のスプライトに、ゲームブロックを使ってみようで作りましたボタンを押して左右に動くスプライトを追加してみます。


最初だけブロックをに



プレイヤーという変数を作ってスプライトを追加します。

このスプライトに対して、



ボタンAとボタンBの動作を追加します。

これで今回の改修は終了です。




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

MicroPythonの場合は、MakeCodeのボタンAが押された時というイベントブロックに該当するものがありませんので、while True:内でボタンのイベントを追加する必要があります。


ここで一点注意がありまして、while True:内でsleep()を使うとボタンのイベントを追加することができなくなりますので、while True:とrun_everyをうまく使い分ける必要があります。


from microbit import *

falling_object = [2, 0]

# プレイヤーの座標
player = [2, 4]

ticks = 20
current_tick = 0

def render():
	global falling_object, player
    
	coord = ""
	for y in range(0, 5):
		for x in range(0, 5):
			if falling_object[0] == x and falling_object[1] == y:
				coord += "9"
			elif player[0] == x and player[1] == y:
				coord += "9"
			else:
				coord += "0"
		coord += ":"
	img = Image(coord)
	display.show(img)

# 点を表示後に次に点を表示する箇所を指定する
def update_falling_object():
	global falling_object, current_tick, ticks

	current_tick += 1

	if current_tick >= ticks:
		current_tick = 0
		# 点が一番下に到達していた場合は、次回は一番上に表示する
		if falling_object[1] == 4:
			falling_object[1] = 0
			if ticks > 0:
				ticks -= 1
		else:
			falling_object[1] += 1
    
run_every(render, ms=50)
run_every(update_falling_object, ms=50)

# プレイヤーの操作に関する処理
while True:
	if button_a.was_pressed():
		if player[0] > 0:
			player[0] -= 1
	if button_b.was_pressed():
		if player[0] < 4:
			player[0] += 1
京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。

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