ゲームブロックで操作スプラウトと落下物のスプラウトがぶつかった時の処理を追加しよう


ゲームブロックで左右に操作できるスプライトと落下物スプライトがぶつかった(さわった)時に落下物スプライトを一旦消して、一番上に再度表示するようにしてみます。


ゲームブロックで操作スプラウトと落下物のスプラウトを同時に設置してみようのコードを少し改修するだけで対応できます。



もし落下物の y >= 4 ならの箇所を



もしプレイヤーが他のスプライト落下物にさわっているならに変更すれば良いです。




現状のコードでは単純に落下物スプライトが一番下に移動した時にプレイヤーをさわらなければ、そのまま下に居続けるだけになりますので、



落下物スプライトが一番下に到達した時はゲームオーバーにするの処理を追加しておきます。




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

from microbit import *

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

# 落下物の座標
falling_object = [2, 0]

ticks = 20
current_tick = 0

def render():
	global player, falling_object, current_tick, ticks
    
	current_tick += 1

	# 落下物の移動に関する処理
	if current_tick >= ticks:
		current_tick = 0
		falling_object[1] += 1

	# プレイヤーと落下物を同時に描写する
	coord = ""
	for y in range(0, 5):
		for x in range(0, 5):
			if player[0] == x and player[1] == y:
				coord += "9"
			elif falling_object[0] == x and falling_object[1] == y:
				coord += "9"
			else:
				coord += "0"
		coord += ":"
		img = Image(coord)
		display.show(img)

	# プレイヤーと落下物が接触した場合は音を出して、新しい落下物を用意する
	if player[0] == falling_object[0] and player[1] == falling_object[1]:
		audio.play(Sound.HAPPY)
		falling_object[1] = 0

run_every(render, 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
from microbit import *

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

# 落下物の座標
falling_object = [2, 0]

ticks = 20
current_tick = 0

render_active = True

def render():
	global player, falling_object, current_tick, ticks, render_active

	# GAME OVERを表示したらrender関数を止める
	if not render_active:
		return
	
	current_tick += 1

	# 落下物の移動に関する処理
	if current_tick >= ticks:
		current_tick = 0
		falling_object[1] += 1

	# プレイヤーと落下物を同時に描写する
	coord = ""
	for y in range(0, 5):
		for x in range(0, 5):
			if player[0] == x and player[1] == y:
				coord += "9"
			elif falling_object[0] == x and falling_object[1] == y:
				coord += "9"
			else:
				coord += "0"
		coord += ":"
	img = Image(coord)
	display.show(img)

	# 落下物が一番下まで到達した
	if falling_object[1] > 4:
		display.scroll("GAME OVER")
		render_active = False
		

	# プレイヤーと落下物が接触した場合は音を出して、新しい落下物を用意する
	if player[0] == falling_object[0] and player[1] == falling_object[1]:
		audio.play(Sound.HAPPY)
		falling_object[1] = 0

run_every(render, 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をご覧ください。