こんばんは。
前回のシーン管理に関して、ユーザー入力を待つ場面について色々と考えたので、ここに書き残しておきたいと思います。
今、とりあえず「はい/いいえ」の選択をユーザーに促す場面を考えます。このとき、この場面を関数化して、結果を戻り値とすることが一応は可能です。概念としては
boolean yesNo(){
while(true){
//入力処理
//描画処理
if(FIRE)
break;
sleep(1000);
}
return result;
}
相当適当に描きましたが、ユーザーから入力を待つ間実行を止める行為に近いものがあります。
上で一応と書いたのは、いくつかの条件を満たしていないと不具合が生じるためです。その一つは他に並行処理がないことなのはすぐに分かると思います。
これを拡張していけば、アイテムなど複数項目からの選択も同様に記述できるでしょう。更に、構造に気をつければこれがスタックとして応用できることも分かるでしょう。
たとえばウィンドウの表示位置、項目名、ウィンドウスタイル等を引数として渡してやれば、複数のウィンドウスタックを場合分けなどせず簡単に実装することができます。
とはいえ、メインループが常に同じところを通過しないというのはあまり気持ちいいことではありません。便利なだけに実装には最新の注意を払いたいものですね。
はっきり言って、見た目と操作性が同じならば、ユーザーにとってプログラムの構造などどうでもいいことです。しかし、保守・開発する我々プログラマーにとっては非常に重要なものです。
この方法が皆さんの助けになり、バグを発生させないことを祈ります。