ゲームブロックで左右に操作できるスプライトと落下物スプライトがぶつかった(さわった)時に落下物スプライトを一旦消して、一番上に再度表示するようにしてみます。
ゲームブロックで操作スプラウトと落下物のスプラウトを同時に設置してみようのコードを少し改修するだけで対応できます。
のもし落下物の 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