ゲームブロックで敵スプライトを自動で左右に動かすようにしよう


ゲームブロックで敵スプライトに弾が当たった時の処理を追加しようで作ったコードに敵スプライトが自動で左右に動くコードを追加してみよう。

今回は500ミリ秒ごとに左右一マス(もしくは動かない)というコードを追加してみます。


上記の要件を満たすコードは前回のコードに新たにずっとブロックを用意して、



を追加するだけで終了です。




from microbit import *
import random

# プレイヤーの座標
player = [2, 4]

# 弾
bullet = [0, 0]

# 敵
def create_enemy():
	return [random.randint(0, 4), 0]
enemy = create_enemy()

# 弾が発射中 
is_launching = 0

# ボタンの押しっぱなし問題を回避
is_push_button = 0

def render():
	global player, bullet, enemy, is_launching
	
	coord = ""
	for y in range(0, 5):
		for x in range(0, 5):
			if is_launching and bullet[0] == x and bullet[1] == y:
				coord += "9"
			elif player[0] == x and player[1] == y:
				coord += "9"
			elif enemy[0] == x and enemy[1] == y:
				coord += "9"
			else:
				coord += "0"
		coord += ":"
	img = Image(coord)
	display.show(img)

# 弾の移動に関する処理
def update_bullet():
	global bullet, enemy, is_launching

	if is_launching == 1:
		if bullet[0] == enemy[0] and bullet[1] == enemy[1]:
			is_launching = 0
			enemy = create_enemy()
        
		bullet[1] -= 1
		if bullet[1] < 0:
			is_launching = 0

# 敵の移動に関する処理
def update_enemy():
	global enemy

	enemy[0] += random.randint(-1, 1)
	if enemy[0] < 0:
		enemy[0] = 0
	if enemy[0] > 4:
		enemy[0] = 4

run_every(render, ms=100)
run_every(update_bullet, ms=100)
run_every(update_enemy, ms=500)

while True:
	if is_push_button == 0:
		# ボタンA + Bの同時押しをしたい且つボタン押しっぱなしで反応することを回避したい場合はボタンの押し状況を事前に確認して変数に入れておく
		is_button_a_pressed = button_a.was_pressed()
		is_button_b_pressed = button_b.was_pressed()
		
		if is_button_a_pressed and is_button_b_pressed:
			if is_launching == 0:
				is_launching = 1
				bullet[0] = player[0]
				bullet[1] = 4
				is_push_button = 1
		else:
			if is_button_a_pressed:
				if player[0] > 0:
					player[0] -= 1
				is_push_button = 1
			elif is_button_b_pressed:
				if player[0] < 4:
					player[0] += 1
				is_push_button = 1
	else:
		is_push_button = 0

	# ボタン押しっぱなしで反応する問題を回避する時にWhile Trueの最後でsleep(50)を入れておくと良い
	sleep(50)
京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。

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