前回で長い間やってきた「ループ」は終わりました。 では今回は何をするかというと、「SelectCase」というブロックをやります。 これは指定された変数の値の場合分けを行うブロックです。 これを使えば今まで「If a=1 Then …… ElseIf a=2 Then ……」とやっていたものが、簡単にできるようになります。 では早速はじめましょう。以下のプログラムを実行してみてください。
'lesson1-2-5
#consoleDim num As Long Input "占います。1,2,3のどれかを入力してください。",num Locate 0,2 SelectCase num
Case 1
EndSelect
Print "あなたはどんな困難にも突き進めるでしょう。"
Case 2
Print "あなたは周りの人と仲良くできるでしょう。"
Case 3
Print "あなたは周りの人の支えになるでしょう。"
Case Else
Print "あなたは非常に個性的ですね……。"
Sleep(3000) End |
C:\ActiveBasicCourse\lesson1-2-5... |
占います。1,2,3のどれかを入力してください。■ |
(例)1を入力した場合 |
あなたはどんな困難にも突き進めるでしょう。 |
(例)5を入力した場合 |
あなたは非常に個性的ですね……。 |
どうでしたか? 私の場合「SelectCase=占い」という関係式があるためこんなプログラムにしてみました。 あっ、念のため言っておきますがこの占いは全くのデタラメです。 本気にしないでください。 では説明に入りましょう。
-*-*-*-*-【説明】-*-*-*-*- |
---|
【使い方】 SelectCase 変数
Case 値 command ……
EndSelect
【備考】
(1)「Case 値 command 」のかたまりは、
必要な分だけ何回も繰り返すことができます。(冒頭のソースのような感じで)
(2)変数 の後、値 の後、command の後には改行を入れないといけません。
(3)SelectとCaseの間、
EndとSelectの間にはそれぞれスペースを入れても構いません。
変数 が値 のときcommand を実行します。
【解説】
(1)このブロックは変数の場合分けに使用します。
例えば「変数a」が「1」のときはこう、「2」のときはああ、「3」のときはそう……という感じにです。
まず場合分けの対象になる変数を変数 のところに書きます。
(例:「変数a」を場合分けしたいときは「SelectCase a」)
次に変数 を場合分けする値を値 のところに書きます。
複数ある場合は「Case 値 command 」を複数書きます。
(例:1,2,3で場合分けするときは「Case 1 …… Case 2 …… Case 3 ……」)
そして最後にEndSelectを書きます。
(2)必ずEndSelectは絶対に書き忘れないでください。
これを書かないとcommand と普通の部分との区別がつかなくなり、エラーが出ます。
(3)値 には普通の値(数字<「1」「-34」など>や文字列<「"a"」「"str"」など>)だけでなく、変数など、値を持つものならなんでも使えます。
また変数 には、一応普通の値も使うことができます。(まず使うことはないと思いますが……。)
(4)1つのSelectCaseブロックの中に同じ値 の「Case 値 command 」のブロックは使うことができません。
使ったとしても前の方のブロックを実行するとブロックを抜けてしまうため後ろのブロックは実行できません。注意してください。
【使い方】 Case Else command
【備考】
(1)Elseとcommand の間には改行を入れます。
【意味】
(2)SelectCaseブロックの最後に1回しか使えません。
SelectCaseブロックで変数 がどの値 にも当てはまらないときにcommand を実行します。
【解説】
(1)SelectCaseブロックの中では変数 が値 のとき、
その値 が書かれているところのcommand を実行するのは前の項目で学習しましたね。
では変数 がどの値 にも当てはまらないときに何かさせたいときはありませんか?
例えば今回のプログラムでは指示に従わなかった人へ特定のメッセージを表示させるような場合です。
そのような場合いちいち「Case 0 …… Case 4 …… Case 5 …… 」と書くなんてできません。
ほぼ無限にあるので不可能です。
(まあAB3.05の場合Inputが整数しか扱えない&Long型は-2147483648〜2147483647しか扱えないので232個書けばできることはできますが……。)
ではどうするか?それを解決するのが「Else」です。
値 のところに「Else」を書いておくだけで、
変数 がどれにも当てはまらないものを処理してくれます。
(2)この「Case Else command 」は必ずブロックの最後(EndSelectの直前)においてください。
もしこれを他の「Case 値 command」のブロックの前におくと、
「Case Else」のブロックの後の「Case 値 command 」は参照すらされません。
なのでこれは必ず最後に置いてください。
またこれは普通の「Case 値 command」のブロックのときと同じように、2回以上使うことはできません。
【使い方】 Locate x ,y
【意味】
左上からカーソルを横からx 文字目、上からy 文字目に移します。
【解説】
(1)まずカーソルとは何か?それはずばりInputのときやSleepのときに点滅している■です。
ではなぜこんな
(2)Locateを使って場所を動かすには左上を基準とした絶対座標(カーソルがどこにあろうとも指す場所は変わらない座標系)で指定しなくてはいけません。
具体的には左上を「0,0」として右に1文字いくごとに左側の数字を、下に1文字いくごとに右側の数字を、それぞれ1ずつ増やします。
ちなみに単位の「文字」というのは半角・全角関係ありません。
(何も出力されていない部分では全角が単位です。)
【補足トリビア(?)】
(1)command ……これが何を表すかの再確認です。
ループのときに何回も使った表現ですが、これはcommand の両隣に書いてあるものにはさまれているもの全てです。
例えば「Case 値 command EndSelect」と書いていた場合、
command は値からEndSelectの間にある全てのソースを表します。
「ElseIf 条件式 command Else」と書いていた場合は、
command は条件式からElseの間にある全てのソースを表します。(2)リテラル値……プログラムの中で変わらない値のことを言います。 例えば「変数」はプログラムの中で値を変えることが可能です。 しかし、「a=1」や「a="abc"」と書かれていた場合、「1」や「"abc"」自体をプログラムを実行することで変えることは不可能ですね。 (「a」の値じゃなくて「1」や「"abc"」という表記をです。) このようにプログラム内で値を絶対変えることができない値をリテラル値と言います。 これはヘルプファイルなどに書いてある表現なので覚えておくと役に立ちます。 |
Locateで使われている座標系のモデルを下に書いてみます。参考にしてください。
(単位:文字) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0,0 | 1,0 | 2,0 | 3,0 | 4,0 | 5,0 | 6,0 | 7,0 | 8,0 | 9,0 | 10,0 |
1 | 0,1 | 1,1 | 2,1 | 3,1 | 4,1 | 5,1 | 6,1 | 7,1 | 8,1 | 9,1 | 10,1 |
2 | 0,2 | 1,2 | 2,2 | 3,2 | 4,2 | 5,2 | 6,2 | 7,2 | 8,2 | 9,2 | 10,2 |
3 | 0,3 | 1,3 | 2,3 | 3,3 | 4,3 | 5,3 | 6,3 | 7,3 | 8,3 | 9,3 | 10,3 |
4 | 0,4 | 1,4 | 2,4 | 3,4 | 4,4 | 5,4 | 6,4 | 7,4 | 8,4 | 9,4 | 10,4 |
5 | 0,5 | 1,5 | 2,5 | 3,5 | 4,5 | 5,5 | 6,5 | 7,5 | 8,5 | 9,5 | 10,5 |
6 | 0,6 | 1,6 | 2,6 | 3,6 | 4,6 | 5,6 | 6,6 | 7,6 | 8,6 | 9,6 | 10,6 |
7 | 0,7 | 1,7 | 2,7 | 3,7 | 4,7 | 5,7 | 6,7 | 7,7 | 8,7 | 9,7 | 10,7 |
8 | 0,8 | 1,8 | 2,8 | 3,8 | 4,8 | 5,8 | 6,8 | 7,8 | 8,8 | 9,8 | 10,8 |
9 | 0,9 | 1,9 | 2,9 | 3,9 | 4,9 | 5,9 | 6,9 | 7,9 | 8,9 | 9,9 | 10,9 |
10 | 0,10 | 1,10 | 2,10 | 3,10 | 4,10 | 5,10 | 6,10 | 7,10 | 8,10 | 9,10 | 10,10 |
これで長いことやってきた「条件・分岐・繰り返し」もこれで終わりですが、 最後の項目のSelectCaseはどうでしたか? このブロックはウィンドウを扱うときにすごく役立つ(というか常に使う)ので、必ずマスターしてくださいね。 理解できないところがあれば掲示板で質問するのも手です(というか単なる宣伝)。 この後は番外編をはさんで「プロシジャー」に入ります。 ここでいわゆる「関数」などが出てきます。 これが使えるとプログラミングが円滑に行えます。 では長かったこの章の最後を飾る「やってみよう」です。
-*-*-*-*- やってみよう -*-*-*-*- |
---|
「1+1」という問題を出し、「2」と答えたら「正解」、「1」もしくは「3」と答えた場合は「おしい」、
その他を答えた場合は「残念」と表示するプログラムを作ってみよう。
ただし結果は入力された場所から2行下(=1行間を空けて)表示するようにしてください。
|