ゲームブロックで左右に操作できるスプライトと落下物スプライトがぶつかった(さわった)時に落下物スプライトを一旦消して、一番上に再度表示するようにしてみます。
ゲームブロックで操作スプラウトと落下物のスプラウトを同時に設置してみようのコードを少し改修するだけで対応できます。
のもし落下物の y >= 4 ならの箇所を
もしプレイヤーが他のスプライト落下物にさわっているならに変更すれば良いです。
現状のコードでは単純に落下物スプライトが一番下に移動した時にプレイヤーをさわらなければ、そのまま下に居続けるだけになりますので、
落下物スプライトが一番下に到達した時はゲームオーバーにするの処理を追加しておきます。
プレイヤーと落下物がぶつかるのと、ゲームオーバーはどちらも落下物スプライトの y が 4 の時なので、落下物スプライトの y に 1 を追加した後にもしブロックで大きく囲っておきます。
今回のコードをMicroPythonで書き換えてみます。
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 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)
# 点を表示後に次に点を表示する箇所を指定する
def update_falling_object():
global falling_object, player, current_tick, ticks
current_tick += 1
if current_tick >= ticks:
current_tick = 0
# プレイヤーと落下物が接触した場合は音を出して、新しい落下物を用意する
if player[0] == falling_object[0] and player[1] == falling_object[1]:
audio.play(Sound.HAPPY)
falling_object[1] = 0
if ticks > 0:
ticks -= 1
else:
# 点が一番下に到達していた場合は、次回は一番上に表示する
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
from microbit import *
falling_object = [2, 0]
# プレイヤーの座標
player = [2, 4]
ticks = 20
current_tick = 0
# renderを止める為に必要
render_active = True
def render():
global falling_object, player, render_active
# GAME OVERを表示したらrender関数を止める
if not render_active:
return
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)
# 点を表示後に次に点を表示する箇所を指定する
def update_falling_object():
global falling_object, player, current_tick, ticks, render_active
current_tick += 1
if current_tick >= ticks:
current_tick = 0
# プレイヤーと落下物が接触した場合は音を出して、新しい落下物を用意する
if player[0] == falling_object[0] and player[1] == falling_object[1]:
audio.play(Sound.HAPPY)
falling_object[1] = 0
if ticks > 0:
ticks -= 1
else:
# 落下物が一番下まで到達した
if falling_object[1] > 4:
display.scroll("GAMEOVER")
render_active = False
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