前回まででアミダクジのコア部分をクラス化して機能を確かめたので、今後はこれをウィンドウプログラムに実装するのですが、直ちにコードを弄るのは早計で、その前にどのようなユーザーインターフェース(UI)にするのか、ウインドウのデザインを考える必要があります。
C#のプログラムは通常Visual Studioで、WinFormsであれWPFであれ、WYSWYG(注1)的にXamlエディターを使って色々とやるのでしょうが、MSCompAssの場合は「完全コーディングベース」なので一からコーディングしなければなりません。(注2)
注1:"What you see is what you get"の略で、1980年代のApple McIntoshのFinder等、ウィンドウベースのの操作環境を指した言葉。なお、アップルのMacの語源は本当に「リンゴ」で洒落であったことが分かります。
注2:Win32のリソースエディターであるBCCFormの出力するリソースファイルをベースにC#のウィンドウ部分のコードにするコンバーターを作ろうか、と考えたこともありますが、只のVisual Studioがあるのに誰が使うか?と考え「没アイデア」にしました。
そんな訳で、巧妙性より効率性の方が重要ということから、つい直前までやっていた
Othelloプログラム
のドンガラを再利用することに決定しました。
これを使って、アミダクジの操作シーケンス
(1)アミダクジを作る(縦棒数と横棒を引く段数の設定が必要。)
(2)隣接する縦棒間に横棒を引いてゆく。
(3)(時には先に設定することや、複数設定することもあるようですが)「当たり」を無作為に設定する。
(4)各参加者(縦棒)のゴールを確認する。
をイメージしながら、まずはベースとなるこんなの↓を作ってみました。
しかし、
これをユーザー(操作者)が見たら、何をどの順で、どう操作してよいのか分からないのじゃないでしょうか?それはUIとしては失格です。又、Aボタンを押してもらうべきタイミングでBボタンが押されてしまう等の操作者の誤操作の可能性も考えなければなりません。そういった
あーでもない、こーでもない
を考えた挙句、
【初期状態】
下のユーザー指示に基づいて「サイズ設定」ボタンを押すしかないでしょう?これを押すと、
【縦棒数、段数設定ダイアログ】
ダイアログが出て縦軸と横棒を描く段数を設定します。これも誤入力を避けるためにコンボボックスにし、更にメインウィンドウのサイズもあるので選択する縦棒数、段数の範囲も「合理的」に設定する必要があります。(注)
注:実は当初「選択幅は広い方が良い」と考え、多数の選択肢を用意しましたが、却って操作者に混乱を与えるだけと考え、
(1)「2~3人ならじゃんけんの方が早いよね?」「大勢人がいるなら、寧ろビンゴ形式になるよね?」ということから、縦棒数は「4~8」に、
(2)また横棒数はその倍の「8~16」に
しました。これは今考えると大正解ですね。また、選択肢はスクロールバーを使わないで一挙に全部見せするようにしました。
【開始】
アミダクジのサイズを決定すると、そのサイズに合わせてウィンドウサイズが決定されるようにして、煩わしいスクロールバーでの部分表示を避けました。又ユーザー指示に次の操作は「横棒を引くこと」であり、操作方法も表示されるので、誤操作の危険は避けられるでしょう。なお、「サイズ設定」ボタンは不要なので消し、「開始」ボタンを表示させます。
【横棒引き】
「開始ボタン」を押すとこの「横棒を引く操作」の画面になります。また、各縦棒とゴールのラジオボタン(〇)は、誤操作を避けるために機能を殺してあるのでいくらクリックしても反応しないようにし、「開始」ボタンは不要なので消し、「ゴール設定」ボタンを表示させます。横棒を引き終えるまでは「ゴール設定」を押さない、ということが分かるでしょうか?(仮に押しても問題ありませんが...ただ縦棒=ゴールになるだけです。)
アミダクジの上でマウスをクリックするとその部分がハイライト表示(↑)となり、隣接する縦棒をクリックして横棒を描画します。段がぶれて斜めとなったり、隣接縦棒以外を押したり、更に既に横棒を描いたところを選択するとエラーメッセージが出ます。(今考えれば、「既に横棒が引かれています」というエラー処理ではなく、「既に横棒が引かれていますが、削除しますか?」にして単純縦棒(|)に戻す、編集機能を入れてもよかったですね。まぁ、暇なら今度やりましょう。)
【ゴールの設定と各縦棒のゴールチェック】
横棒を引き終えて「ゴール設定」ボタンを押すと、アミダクジの下にあるゴール(ラジオボタン)に「当たり」が乱数により設定され、選択不能だった各縦棒ボタンが有効になります。又、最初に表示された「サイズ設定」ボタンが再度現れ、「ゴール設定」ボタンが消えます。
最後に(ここは正直迷ったのですが)当たりの判定をPCによって自動的に表示させるのではなく、
ユーザーが各縦棒のボタンを押して、いちいち確認する
方法を採りました。
何故そうしたのか?
それは、「PCが勝手にやって、私はそれを眺めているだけ」のソフトは直ぐに飽きられることが経験的にわかっているからであり、
ユーザーが自分で確かめる行為を通じた、アミダクジ参画感
を醸成させるのが目的でした。(成功していると思いますが、どうかな?)赤棒によるアミダクジ経路も分かり易いので納得感もあるでしょう?
もう一回!
となれば、再度「サイズ設定」ボタンを押して初期化を行い、同様の操作を繰り返すことになります。
まぁ、実際のアミダクジを紙と鉛筆でやるのと同様の操作感は確保できたのではないでしょうか?
そう祈ります。なお、次回はこのウィンドウプログラムのコードとコンパイルの注意を解説します。