文系でもわかるBASIC入門
11.ふしぎ数当てゲームを作ってみよう
ここまでの学習でブログラムの基礎を説明してきました。
まだまだ沢山の命令がありますが、おさらいを兼ねてこれまで覚えた命令だけでゲームを作りたいと思います。
題材のゲームは
「あなたの心の中で決めた数をコンピュータが当てる」
というちょっと不思議なゲームです。
答えを知る前に作ってみよう
プログラミング学習は、説明を読んでいるだけでは身に付きません。
まず処理結果を見せるので、そこからプログラムを作ってみてください。
「絶対無理」と思ってもあきらめず、5分くらいは考えてみましょう。
前のページを見直してもいいです。
下の結果画面と同じ動きをするプログラムを作りましょう。
処理は次のようになります。
「1から15までの中で~(略)」のメッセージを表示
「決まりましたか?(y/n)」を表示しながら入力待ち
y以外の入力なら、もう一度メッセージを繰り返し表示
yを入力したら「次の質問に答えて下さい。」のメッセージを表示
どうでしょう、作れましたか?
では答え合わせです。
作ってみたものと比べて下さい。
おっと、注意して欲しいのは上のプログラムとまったく同じ必要はありません。
プログラミングの最優先事項は仕様通りに動くことです。
自分のスタイルで書いていいのです。
ただ、初めから「プログラムの見易さ」は意識した方がいいでしょう。
行番号40を見て下さい。
見慣れないORというのがあります。これは論理演算子といって
複数の条件を結合させるのに使います。
つまりこの行番号40では
変数YN$がyまたはYならばラベル名*HYOUJIへジャンプせよ
という意味になります。
もし論理演算子を使わないのであれば次のようになります。
このように2行に分けて書いても同じ動作になります。
ちなみになぜ大文字・小文字のチェックをしているのか分かりますか?
これはユーザーに対する配慮なんです。
人によっては大文字と小文字を意識しない人がいます。
もし小文字のみ判定するプログラムで、大文字を入力する人がいたらどうでしょうか。
きっとその人は
「ちゃんとYと入力しているのに正常に動かない。これは不具合だ」
と思うことでしょう。
プログラミングは使う人の立場にたって制作するようにしましょう。
余計な処理は省略しよう
もう一度、プログラムを見てください。
行番号30 のメッセージで(y/n)というYかNの入力を促す表示をしています。
にもかかわらずNを入力した時の処理が記述されてません。
今回の仕様はYが入力されていれば次の処理へ進み
それ以外は再入力のメッセージを繰り返すことになっています。
ですからY以外の処理はみな同じでいいのです。
プログラムを組む時は、仕様をよく理解して無駄な処理は行わないようにしましょう。
質問する処理を作ろう
次の画面を見てください。
いくつかの数を見せて、YかNを入力させる仕組みを作ってください。
数値の羅列には意味があるので、間違えないようにしましょう。
入力に使う変数は1つでかまいません。
これは特に問題ないですね。
答えは次のようになります。
行番号120 以降が新しく追加した部分です。
行番号130 から 230までと同じようにできていれば正解です。
行番号120 では変数NAZOに0を代入しています。
これは次のステップに必要なことなので組み込んでください。
コンピュータが数を当てる仕組みを作ろう
ここは少し難しいのでプログラムを先に見せます。
白文字の行を追加してください。
上の画像と行番号が違っていてもかまいません。
LIST命令したときに画像と同じ順番ならOKです。
実行してみましょう。
間違いがなければ、y、n、n、nと入力すればnazo=1と表示されます。
念のため、次は y、y、y、y と入力して下さい。
nozo=15と表示されればOKです。
結果の表示とリトライ
あと少しで完成です。がんばりましょう。
変数NAZOの値を
「あなたの好きな数は?ですね」の?の部分に表示させます。
さらに「もう一度やりますか」のメッセージを表示して
繰り返しプレイできる仕組みを入れてみましょう。
どうでしょうか。答えを見ずに作れますか?
ちなみに、もう一度プレイしたときは次のようになります。
本当はリトライしたとき、画面をクリアして新しい質問メッセージを表示する方がいいです。
今回は課題として分かりやすくするため、クリアしていません。
さて答え合わせです。
行番号300 以降が新しく追加した部分です。
行番号250 は削除してあります。
これまで学習した仕組みばかりなので、よく見れば理解できると思います。
途中にある単体のPRINT命令は、何も表示されない行を作ることで
メッセージを読み易くしています。
BASIC言語ではこのような工夫が必要になります。
最後に・・・
数を当てる仕組みは2進数の数え方を参考にしています。