ゲームブロックで障害物避けゲームを作ろう


ゲームブロックでフルーツキャッチゲームを作ろうの仕組みにMicroPythonで経過時間の測定をしてみようを追加して、上から落ちてくる障害物を避けるゲームを作ってみます。

点数(スコア:SCORE)は障害物を避け続けた時間にします。


今回の内容ではコードのみを掲載して、コードの解説は省略します。

似たような処理や一行が長くなる処理は関数を利用しています。








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

from microbit import *
import random

# 開始時間の記録をしておく
start_time = running_time()

# 落下物の座標
falling_object = [random.randint(0, 4), 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]:
			display.scroll("GAMEOVER SCORE ")
			score = int((running_time() - start_time) / 1000)
			display.show(str(score))
			render_active = False
		else:
			#落下物が一番下まで到達した時は新しい落下物を用意する
			if falling_object[1] == 4:
				falling_object[0] = random.randint(0, 4)
				falling_object[1] = 0
			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をご覧ください。