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


ゲームブロックでフルーツキャッチゲームを作ろうの仕組みに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
京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。

詳しくはinunosinsi/mcws_blockly - githubをご覧ください。