ゲームブロックでフルーツキャッチゲームを作ろうの仕組みにMicroPythonで経過時間の測定をしてみようを追加して、上から落ちてくる障害物を避けるゲームを作ってみます。
点数(スコア:SCORE)は障害物を避け続けた時間にします。
今回の内容ではコードのみを掲載して、コードの解説は省略します。
似たような処理や一行が長くなる処理は関数を利用しています。

今回のコードをMicroPythonで書き換えてみます。
from microbit import *
import random
start_time = running_time()
# プレイヤーの座標
player = [2, 4]
# 落下物の座標
falling_object = [random.randint(0, 4), 0]
ticks = 20
current_tick = 0
render_active = True
def render():
global score, player, falling_object, current_tick, ticks, render_active
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:
falling_object[0] = random.randint(0, 4)
falling_object[1] = 0
# プレイヤーと落下物が接触した場合はゲームオーバー
if player[0] == falling_object[0] and player[1] == falling_object[1]:
display.scroll("GAMEOVER SCORE ")
score = int((running_time() - start_time) / 1000)
display.show(str(score))
render_active = False
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