現在、BBC micro:bit 用の小さな 2 ボタン ゲームを開発しようとしています。micro:kit は広く利用できるわけではないので、私の問題を詳細に説明しようと思います。
グリッドの最後の行に固定されている「可動」ライトである、プレーヤーのコントロールを作成しようとしています。A ボタンはライトを 1 列左に移動し、B ボタンはライトを 1 列右に移動します。
マトリックス用に5 つの個別の画像( player_loc#と呼ばれる)を作成しました。それぞれが LED の可能な場所です。
from microbit import *
import random
player_index = 2
player_loc0 = Image('00000:00000:00000:00000:50000')
player_loc1 = Image('00000:00000:00000:00000:05000')
player_loc2 = Image('00000:00000:00000:00000:00500')
player_loc3 = Image('00000:00000:00000:00000:00050')
player_loc4 = Image('00000:00000:00000:00000:00005')
player_locs = [player_loc0, player_loc1, player_loc2, player_loc3, player_loc4]
# Indexes 0 1 2 3 4
while True:
display.show(player_locs[player_index])
if button_a.is_pressed():
player_index += 1
elif button_b.is_pressed():
player_index -= 1
A ボタンは player_index から 1 を引いて( 2 に等しい)、それによってdisplay.show(player_locs[player_index])がplayer_loc2の代わりにimage player_loc1を表示することになっています。
B ボタンは反対のことを行い、1 つ追加します。これにより、player_loc3が表示されるはずです。
私が抱えている問題は、A または B ボタンを押すと、17 行目の display.show(player_locs[player_index])で IndexError, list index is out of range が発生することです。インデックスは決して範囲外であってはなりません。リストplayer_locsには、0 ~ 4 の範囲のインデックスがあります。インデックス 1 と 3 は範囲外ではありませんが、IndexError out of range メッセージが表示されます。player_index を削除し、整数 0 ~ 4 で実行すると動作します。
これは、ボタンを押さずにスクリプトを実行したときの画像です。ボタンを押すとすぐに、エラー メッセージが表示されます。どんな助けでも大歓迎です。