プログラミング超初心者のための講座
 第8回 BASIC編「数当てゲームに挑戦 その2」(ランダムと文字と数字)


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

ではぜんかいのプログラムを思い出してください。

10 CLS
20 INPUT "当たりを入れてください(1-10)";A
25 CLS
30 INPUT "数を入れてください(1-10)";B
40 IF B=A THEN PRINT "当たりです。":GOTO 60
50 PRINT "はずれです。"
60 END

ランダム

さてさて、前回作り直したプログラムで正解がわからなくなりました
これでゲーム製がましておもしろくなりましたね。

しかし、これではいつまでも のほかにもう1人いないと遊べません
そこで、正解をBASICに決めさせようというのです。

当たりはいったいいくつになるかはわかりませんよね。
つまりでたらめな数字が欲しいのです。

ではそもそもきかいにでたらめなんてできるのでしょうか?

BASICにはランダムという命令が用意されています。
これを使えばでたらめな数字が手に入ります。

10 PRINT RND(1)
20 GOTO 10

これでRUNすると、
なんだかわからない数字を表示しつづけます。

STOPして止めてください。

どう読むかというと
0から1間でのでたらめな数字を表示しろと言う意味になります

つまりそれは0.2かもしれないし0.4567453143かもしれません
とにかく0から1という意味です。カッコの中をnに変えれば
0からnまでの数字が出てきます。

ところが問題があります。
機械に所詮でたらめなんてことはできません。実はこの数字は乱数表を元に表示されているのです。
ですから、このプログラムをもう1回実行するとまた同じ数字から表示しはじめます。
これでは意味がありません。
そして乱数表はいくつもあります。これを切り替える方法があります。
RANDOMIZEという命令です。これをやると乱数表が切り替わって
出てくる数字が変わります。しかしこれも完璧ではありません。

別の方法(時間 TIME$)

では違う方法ででたらめな数字を手に入れることを考えましょう。
これから出てくる命令はここでは「ふーん」位で聞いていてかまいませんので
気楽に聞いてください。理解できる人は理解してください。

では何を使うかお教えしましょう。
時間です。

実はBAISCは時間を扱うことができるのです。
試しにこう入力して下さい。

PRINT TIME$

するとたとえば 99/09/19 と、言うように表示されます。
これは「時間を表示しろ」と読みます。

ちゃんと今の時間を知っているんですね。
(もし時間が違ったら のパソコン自体の時計が狂ってますのでなおしてください。直し方はOSによって違うのでここでは書きません)

さて、時間ほどでたらめなものはありません。「今何時?」そして「今何時?」すでにこの2回の質問の答えは違いますよね
全く同じ時間なんて滅多にあるもんじゃないです。
そこでこの「秒」に注目してみました。ではTIME$から秒を取り出すにはどうすればよいのでしょうか?

ここでもう1つ命令が出てきます。
感の鋭い方は気がついたかもしれませんがTIME$です。$がついてますからこれは文字の一種として扱われます。

文字を扱う命令

さて秒を取り出してみましょう。
こんな命令があります。やってみてください。
PRINT LEFT$("HELLO",2)

HEと表示さましたよね。これは「かっこ内の文字列の左から2文字を表示しろ」という意味です。

他にこんな命令もやってみましょう。
PRINT MID$("HELLO",2,3)
ELL
OK
PRINT RIGHT$("HELLO",3)
LLO
OK
わかりますか?

今回はRIGHT$を使います。先ほどのTIME$と組み合わせて
こうしたらどうなるでしょうか?
PRINT RIGHT$(TIME$,2)

みごと秒だけが表示されましたね。

この数当てゲームでは1から10ですから秒では0から59になってしまいます。
そこで RIGHT$(TIME$,1) にしましょう。
これで0から9がとれます。

しかしこれでは1から10になりません。
どうしたらよいでしょうか?

答えは1を足すだけです。そうすればいくつが出ても1を足せば1から10の数字になりますよね。

文字と数字

しかしもう1回言いますが、$は文字列変数です。ですから文字に1を足すことはできません。
ではこうすればよいのです。「文字ではなく数字にすればよい。」
そんな命令があります。

それがVALという命令です。(VALUEの略でしょう)
これで文字が数字として扱われます

まとめて書くとこうです。打ってみてください。

PRINT VAL(RIGHT$(TIME$,1))+1

これではれて1から10のでたらめな数字を出すことができました。

結果

こういう風に作り替えました。
10 CLS
20 A=VAL(RIGHT$(TIME$,1))+1
30 INPUT "数を入れてください(1-10)";B
40 IF B=A THEN PRINT "当たりです。":GOTO 60
50 PRINT "はずれです。"
60 END

前回から変わったのは20行だけです。

こうなると、もう答えは誰にもわかりません。
何回か試してください。

あと1行追加です。

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

55行を追加しました
これではずれたらまた入力をすることができます。
つまり、当たるまで答えることができるわけです。

1発で当たれば の今日の運勢は大吉かもしれませんね。

これが意図的に作った永久ループです。
当たらない限り永遠に繰り返されるループです。

おもしろくなってきましたね

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

もどる



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