
PICO-8でブロック崩しを作ろう(スタート/ゲームオーバー/スコア/残機の追加
以前やったことと被る内容もありますが、スタート/ゲームメイン/ゲームオーバーのゲームの遷移状態とスコアや残機を追加することでゲームとして(一応)成立する形にします。
_init() / _update60() / _draw()

ボールやパドルの制御用のグローバル変数を定義していた_init()を状態遷移を表すグローバル変数modeの定義だけにします。
ゲームのメイン処理をおこなっていた_update60()はmodeの状態によって各処理を振り分けるようにします。
同様に_draw()もmodeによって描画処理を振り分けるようにします。
update_start()関連

update_start()にてxボタンの押し待ちをします。xボタンを押すとstartgame()が実行されますが、これは前回までの_init()でやっていたボールやパドルのグローバル変数定義をおこなっています。
ボール用のグローバル変数定義の一部をserveball()にて分けていますが、これは後述するミスからのリスタートするときにボールの位置と速度を初期状態に戻すために使うためです。
update_gameover()

update_gamestart()と全く同じ処理です。
update_game()

基本的には今まで_update60()に書かれていたボールとパドルの動きの処理をそのまま持ってきてます。
パドルがボールを打ち返したとき①にグローバル変数pointsを+1する、ボールが下端に当たった時をmissとして②処理してグローバル変数livesを-1するを処理として追加しました。
livesが0よりも小さくなった時はgameover()を実行、それ以外はserveball()を実行してゲームを再開させています。
ミスしたときの音
sfx(2)でミスした時の音を鳴らしています。

draw_…関連

draw_start()では画面をクリアしてタイトルを表示しています。
draw_gameover()ではゲーム画面を残したまま中央に黒帯を描画して、そこにゲームオーバーの文字列を表示します。


これでゲームとして最低限の体裁は整ったかと思います。