プログラミング超初心者のための講座
 第9回 BASIC編「数当てゲームに挑戦 その3」(カウンタ)


さて第6回が始まりましたよ。 忘れ物はないですか?

これで一応数当てゲームができました。

さらに前回のプログラムにCONTINUEをつけて
こんな感じにしましょう。これもやったことなので説明不要ですね。

10 CLS
20 A=VAL(RIGHT$(TIME$,1))+1
30 INPUT "数を入れてください(1-10)";B
40 IF B=A THEN PRINT "当たりです。":GOTO 70
50 PRINT "はずれです。"
60 GOTO 30
70 INPUT "CONTINUE?(Y/N)";R$
80 IF R$ = "Y" THEN GOTO 10
90 IF R$ = "N" THEN END
100 GOTO 70

お気づきですか?100行が増えています。
結構大切な処理なんです。
このプログラムを使うのは とは限りませんよね。覚えておいて欲しいことは
「使う人は考えられない行動をする」ということです。
これをつくった は70行の問いにYかNで答えますよね。
ところがもし!YとN以外の文字を入力されたらどうなりますか?
こちらが意図しないところへプログラムが流れてしまう可能性もあります。

そこで、イレギュラーな答えが来たときの処理を必ず作っておくことが重要なんです。
今後これは頭に置いてください。今世の中にあるプログラムのほとんどは
そのプログラムの量の半分はこいういったイレギュラーに対応するための処理と行っても過言ではありません。

それでもプログラマーが考えられないことをしてプログラムが本来行かないところへ飛ぶこともしばしばです。
有名なのがファミコンなどの裏技ですね。このときにこうしてこうしてこうすれば無敵になるとか、、、、、
そういうやつです。業務プログラムだったら一大事にもなります。気をつけましょう。

ここではイレギュラーは認めず強制的にもう1回質問されるようになります。

ゲームとして

さてこのプログラム一見完成していますが、ゲームとしてみたときは不完全です。
なぜならだれでも多くても10回答えれば必ず当たってしまうわけですよね。

そこで答える回数制限を付けてみようと思います。5回間違えたらゲームオーバーとします。
回数制限なんてどうやってするのでしょうか?

カウンタ

考え方はこうです。回数制限をするのだから回数を数えなくてはいけません。
ではどうやって回数を数えるのでしょうか?回数は答えるたびに増えていきますから
回数を覚えておく変数が必要です。ここではそのへん数をCとしましょう。

ではもう1回言います。答えるたびにCの値が増えていけばいいのです。
そしてその値が5回を越えたらゲームオーバーにすればよいのです。

言葉の通りプログラムにすると

「答えるたびに」ということは30行の答えをINPUTした直後という意味ですね。
「Cの値が増えていけばよい」つまりCの値を1増やせという意味ですね。
「その値が5回をこえれば」ということはCの値が5以上か判断しろという意味ですね。 

すべて今までの知識でできます。
プログラムにしましょう。

30行と40行の間ですから35行としましょう。
Cを1ふやすには C=C+1です。
なんか変な書き方ですね。A=B+CとかはやったのですがC=C+1なんて同解釈したらいいんでしょう
そのまま読んでください。Cという変数にCという変数に入っている値に1を足した数字を入れろと言う意味ですから
もしCが5だったらCという変数に5+1をいれろとなってCには6が入ります。つまり5だったCが6になって
結果1増えたことになるのです。これはプログラム独特の表現でよく出てきますのでなれてください。
C=C+1 Cを1増やせという意味です。

35 C=C+1

となります。

初期化

あとわすれちゃいけないのが、初期化です。
Cをふやすのはいいですが、このプログラムを実行するたびにCの値が増え続けてしまいますよね
そこでこのプログラムを実行した直後必ずCの値をゼロにする作業が必要です。

判断

Cの値が5を越えているかどうか判断するのは当然はずれたときですから
50行のすぐ後になります。ここでは55行としましょう。判断するのはIF文ですね。
5を越えたらというより正確には5以上ですね。(5を含みます)
以上というのはどうやって表現するのでしょうか?こうなります。覚えてください。
 
A=B AはBと等しい
A>B AはBより大きい
A<B AはBよりちいさい
A>=B AはB以上
A<=B AはB以下
A<>B AはBと等しくない

つまり、C>=5 これでCが5以上ならという条件になります。

これを満たせば無条件でゲームオーバーにすればいいのです。

では作り替えたものはこうなります。

回数制限付き数当てゲーム

10 CLS:C=0
20 A=VAL(RIGHT$(TIME$,1))+1
30 INPUT "数を入れてください(1-10)";B
35 C=C+1
40 IF B=A THEN PRINT "当たりです。":GOTO 70
50 IF B<>A THEN PRINT "はずれです。"
55 IF C>=5 THEN GOTO 65
60 GOTO 30
65 PRINT "GAME OVER"
70 INPUT "CONTINUE?(Y/N)";R$
80 IF R$ = "Y" THEN GOTO 10
90 IF R$ = "N" THEN END
100 GOTO 70

これでできました。

ますますゲーム性がまして楽しくなりましたね。
は何回で当てることができますか?

まとめ

イレギュラーな入力に対応すること。
A=A+1で1ふやす。

では次回の講義をお楽しみに
さいなら

もどる



このページはNetscapeNavigator or Netscape Communicator 4.6で
きれいに見えるように作られています。そちらをお使いください。