
M5StickC Plus とUIFlowでプログラミング(10) - じゃんけんプログラム応用(ゲーム部分の改善)
さて、ゲームの基本部分の機能を実装し、関数化で見通しもよくなりました。これでも、ゲームとして成立するのですが、少し、ゲーム部分に手を入れていきましょう。
UIの改良
機械と人間の間を橋渡しするものをUI(ユーザーインターフェース / User Interface)と言います。意味的には「ユーザーと機械の接触部分」くらいの意味でしょうか。巷にあふれる情報機器は様々な部分で、「人間に優しく」できています。そういう点では今のじゃんけんプログラムはあまりUIが優れているとは言えません。
まず、「今何をすべきか」、「何ができるか」が遊ぶ人に分かりません。メッセージを出して、操作を促すようにしてみます。
メッセージ用にラベルを1つ追加します。

Nameは「l_msg」とかにしておきましょう(「l」はlabelの意)。Nameには残念ながら日本語は設定できませんが、Fontは、「Unicode 16」で日本語を表示できるようにしておきます。ついでに、2つの画像のNameも「i_me」「i_you」とかにしておくとよいです(「i」はimageの意)。プログラムから参照する際に、できるだけ短く、それが何なのか分かる名前をつけるとよいです。Nameを変更したら、プログラムの方も忘れずに書き換えておきます。

関数「初期化」において、ラベルに「B:手を選ぶ A:じゃんけん」を表示する処理を追加します。

これだけでも結構ゲームっぽくなります。ちょっと実行してみてください。(後の比較のためにやってみてほしいです。)
(専門家でないので、あんまり確かなことは言えませんが)ゲームにおいて、重要な部分は、自分がやったことに対してきちんとフィードバックがあるということです。それがプレーヤに対して「報酬」として作用し、「やろう」という気を起こさせるのです。敵を攻撃したら音と光でヒットしたことが分かり、倒したら派手な演出とともに敵が消える。巷にあふれるゲームは巧妙に、この「報酬」を与えてゲームを続けさせようとします。
敵を攻撃しても当たったことが分からなかったら?
敵を倒してもただ消えるだけだったら?
ゲームにおいて「演出」はとても大事なのです。
とはいえ、美術的なセンスも音楽的センスもあまりないので、あんまり凝った演出はできません。それでも今までのようにボタンを押したら手の画像が変わるという簡単なフィードバックだけでなく、「変更した!」と手応えを感じるくらいに音も鳴らすようにしてみましょう。
関数「初期化」にスピーカーの音量の設定を追加します。


次に、関数「手の選択+送信」にスピーカーの音を鳴らすブロックを追加します。高さは好きな音の高さを、拍数はフィードバックとしては1拍だと長過ぎるのでそれよりは短いほうがいいでしょう。ここでは「High G」と「1/4」を選んでいます。

相手の手を表示するときにも音がなったほうがよいでしょう。

ボタンAを押したときには、ゲーム開始の音を流して、じゃんけんをはじめます。じゃんけんは、じゃんけん → 0.5秒 → ぽんで相手の手を表示します。
※どうも、スピーカー関係にバグがあるようで、タイミングによっては音が止まらないことがあります。また、次の処理に進まないときもあるので、スピーカーで処理が無限ループに入ってるのでしょうか。そんな事情で、次の画像では音を鳴らす数を減らしています。関数も名前を変えています。

これでだいぶゲームっぽくなりました。