誰でもプログラマ(WSH編)(その10- 何度だって挑戦(修正))
前回は、数あてゲームという、簡単なゲームを作ってみました。
簡単なゲームではありますが、結構熱くなった人もいるのではないでしょうか。
さて、前回のプログラムを公開したところ、以下のようなコメントを頂きました。
キャンセルできないんですけど....
ごもっともな意見ですね。実際にやってみて、誰もが感じたことではないでしょうか?
では、このリクエストに答えて、キャンセルできるようにしてみましょう。
キャンセルできる。ってどうゆうことでしょうか。

ここで予想した数字を入力するわけですが、ここには「キャンセル」というボタンがあります。
いつもは「OK」ばかり押していましたが、ギブアップしたいときなどに「キャンセル」ボタンを押したのではないでしょうか?
でもここでキャンセルを押しても、

といわれて、有無を言わさず続けられてしまいました。
ごめんなさい。許してください。って気持ちになっちゃいます。
「キャンセル」を押したら、「20回でギブアップしました。」なんて言ってくれて、終了してくれたらよさそうです。
そのように改良してみましょう。
どのあたりを修正したらいいか、想像がつきますか?
そうですね。
tnum = InputBox("0から99までの数字を入力してください")
で、質問のダイアログを出しているわけですが、ここでキャンセルを押したら、「20回でギブアップしました。」とダイアログを出して、終了すればいいわけです。
マイクロソフトのサイトにある、ヘルプの中のInputBox関数に関する説明の部分を見てみます。ここを見ると、
解説
引数 helpfile および引数 context を指定すると、ダイアログ ボックスに自動的に [ヘルプ] ボタンが追加されます。
[OK] をクリックするか、または Enter キーを押すと、InputBox 関数はテキスト ボックスの内容を返します。[キャンセル] をクリックすると、InputBox 関数は長さ 0 の文字列 ("") を返します。
ほうほう。InputBox関数は「キャンセル」をクリックすると、長さ0の文字列("")を返すようです。
ということは、tnumが""かどうか調べたらいいわけです。
If tnum = "" Then
'なんちゃら
End If
てな感じになるのでしょう。
ギブアップのメッセージは、前回の「20回で正解しました」とほぼ同じです。
「20回で正解しました」は、
count = CStr( count)
MsgBox count+"回でで正解しました"
でしたから、
count = CStr( count)
MsgBox count+"回でギブアップしました"
になるわけです。
終了するには、WScript.Quitです。
それでは今回のプログラムです。
Dim ans, tnum, count
Randomize
ans = CInt(100 * Rnd)
count = 0
Do
count = count + 1
tnum = InputBox("0から99までの数字を入力してください")
If tnum = "" Then
count = CStr( count)
MsgBox count+"回でギブアップしました"
WScript.Quit
End If
tnum = CInt( tnum)
If tnum < ans Then
MsgBox "もっと大きいです"
Else
If tnum > ans Then
MsgBox "もっと小さいです"
End If
End If
Loop Until tnum = ans
count = CStr( count)
MsgBox count+"回で正解しました"
前回のプログラムを上のように修正してみてください。
どの部分がどのように変更されたのかをじっくり見ると良いでしょう。
修正した結果はこちらからダウンロードできます。
実際に試してみましょう。
ちゃんとギブアップできますか?
これで睡眠不足が解消されそうです。
実際の開発でも似たようなことがよく発生します。
プログラムを開発した後に、通常テストを行います。
テストというのは、設計したとおりにプログラムが動いているか確認する作業です。必要な機能が正しく動くのかどうか確認するわけです。
この「設計したとおり」というが曲者でして、設計のときにそんなこと考えもしなかった。ってなことがたまに(よく?)あります。
また実際に使ってみることにより、より明確に「こうしたらもっとよくなるな。」とか「こうしたら、もっと使いやすくなるな」ということが見つかったりします。
それがテストのときに見つかることもありますし、お客様が実際に使っているときに、新たな要望として出てくることもあります。
これらのリクエストに順次答えるために、一旦作ったプログラムをどんどん修正していくわけです。
実際、開発と呼ばれる作業は、ほとんどがこの修正作業です。
新しくプログラムを書くという作業はとっても少ないんです。
一旦作り上げたプログラムを、機能追加したり、問題を修正したりすることで、よりよいプログラムに仕上げていくのが、プログラマの仕事です。
前回、設計書についてお話しました。
もちろん実際にプログラムを修正する際は、いきなりプログラムを修正するわけではありません。
まず、設計書を確認します。設計書のどの部分に問題があったのか、どの部分が足りなかったのか。設計書を修正して確認するわけです。
優秀な設計者は、未来に発生するであろうこのような修正に対して、最初に設計する時点から考慮しています。
将来発生するであろうことがらを想像して、それらのことをすべて設計書に記述できれば、ベストですが、それはとても難しいことです。ですから、想像できないことに対しても、柔軟に対処できるような設計を作っておくわけです。
想像できないことを想像するってとっても難しいです。
今日のまとめ
- プログラムは作成するよりも修正することの方が多い。
- リクエストやコメントがあると修正しなきゃだめだから面倒だけど、まったくリクエストやコメントが無いと、それはそれで寂しい。
- 想像できないことを想像しておくって、哲学みたい。