[micro:bit] 9回裏2アウトランナーなし。絶体絶命の野球ゲーム

micro:bitはSTEM教育のために開発された低価格マイコンボード。5x5 dot matrix LED、ボタンだけではなく、傾きセンサーや温度計、地磁気センサーや照度計など様々なセンサーが搭載されていてちょっとしたゲームを作るのに最適。そこで昔取った杵柄で、色々とプログラミングしたものを公開していこうと思います。シミュレータが提供されており、マイコンボードがなくてもプログラミング学習可能、気軽にできます。

今回は野球ゲーム。といっても前置きがすごい長い設定になっています。

設定および機能

場面は9回裏2アウトランナーなし。
敵投手は緩急交えたピッチングを得意とする直球勝負。ストライクしか投げない。
しかし速球、普通、スローボールを使い分ける。
タイミングよくBボタンを押してヒットを狙おう。
バッターはヒットか空振りかのどちらか。
先に3ストライクになって引き分けゲームセットになるか、ランナーを進めて得点、サヨナラ勝ちするかのどちらか。

4升目直前でBボタンを押すとヒット、そうでないと空振りのストライク。見逃してもストライク。
ストライクの場合、"S"の表示の後にストライク数を2回表示。
ヒットの場合、"H"の表示後、塁の模擬表示とランナーのいる塁のみを2回点灯。
満塁の後にヒットを打てば、サヨナラ勝ち。
3ストライクでバッターアウト、ゲームオーバーです。

ソース

プログラムのポイント、既知のバグ、制限事項

原因不明ですがLEDの点灯が継続しないため、スプライトを使って塁に出たランナーを表示しています。

ランナーは2進数のシフトを使い、3bitで表現しています。シフト演算子はないので、掛け算と割り算、余りを使って実装。

(デバッグ用)Aボタンを押すといつでもヒットを出せます。

LEDの点灯が継続したらこんなトリッキーなコードにならないのですが、今後原因が分かったら修正するかもしれません。