日本語プログラミング言語「なでしこ」公式サイト

日本語でプログラミングできる「なでしこ」を使って、プログラミングを身につけましょう。プログラミングができれば、いろいろな仕事を自動化することができます。前回、「尋ねる」命令を利用して、単位変換ツールを作成しました。今回は、同じく「尋ねる」命令を利用して、世界で最も簡単なコンピューターゲーム「数当てゲーム」を作ってみましょう。

数当てゲームを作ろう

数当てゲームというのは、コンピュータがランダムに決めた数値を、ゲームのプレイヤーが当てるという古典的なゲームです。「サイコロの目を当てるゲーム」と言えば分かりやすいでしょうか。

 # --- 1から3のどれかの数字を決める --- (※1)
 正解 = 乱数(3) + 1
 # --- プレイヤーに尋ねる --- (※2)
 「1から3のどれかな?」と尋ねる。
 入力値 = INT(それ)
 # --- 正解か判定する --- (※3)
 もし、正解=入力値ならば
   「当たり★ 正解は{正解}です!」と表示。
 違えば
   「はずれ。正解は{正解}でした。」と表示。
 ここまで。

今回も、なでしこ3のWebエディタからプログラムを手軽に実行させることができます。

プログラムを実行すると、ダイアログに質問とテキストボックスが表示されるので、値を入力して[OK]ボタンを押すと、ゲームの結果が表示されます。確率は、1/3です。果たして、何度目で正解することができるでしょうか。

1から3のいずれかの数字を入力します

入力すると結果を表示します

ゲームを遊んでみたら、プログラムを確認してみましょう。

プログラムの(※1)では、1から3の適当な数字を決めています。なでしこで、サイコロのように毎回違う数を生成するには「乱数(数値)」という関数を利用します。

例えば、以下のプログラムを実行すると、実行するたびに、毎回違った数字が10個表示されます。

 10回、乱数(5)を表示。

0から4までの乱数を10個表示するプログラム

このとき、乱数(5)のように書くと、0から4までのランダムな(でたらめな)値を生成します。もし、乱数(100)と書くなら、0から99までのランダムな値を生成します。

ところで、どんな難しい計算でも、毎回、間違いなく正確に計算するコンピュータが、毎回違った値を表示するというのは、なんだか面白く感じませんか。意外に感じるかもしれませんが、毎回異なる値というのは、計算によって算出しているんです。でたらめな数字を求める計算式があるというのは、ちょっと面白いですね。

プログラムの(※2)の部分では、ユーザーから入力を得ます。そして、INT(値)関数を利用して、入力した値を整数に変換します。

そして、プログラムの(※3)の部分では、「もし」構文を利用して、ゲームの結果を表示します。これは、プレイヤーが入力した値と、コンピュータが決めた正解が一致しているかどうかを調べます。それを行うのが「もし」構文です。これは、次のような書式で利用します。

[書式]
もし、(比較式)ならば
 # ここに比較式が真の(正しい)ときの処理
違えば
 # ここに比較式が偽の(間違ってい)ときの処理
ここまで。

「もし」構文を使うと、これまで上から下に順に実行していたプログラムを、比較式に応じて、処理を分岐することができます。

「もし」構文を使うと処理を分岐できる

そして、比較式に指定できるのは、次のような不等号です。

比較式 意味
a = b aとbが等しいか
a > b aがbより大きいか
a >= b または a ≧ b aがb以上か
a < b aがbより小さいか
a <= b または a ≦ b aがb以下か
a <> b または a ≠ b aとbが異なるか

数当てゲーム - ヒントを表示するように

次に、もう少し高度な数当てゲームを作ってみましょう。今度は、1から100までのいずれかの数字を当てるというゲームにしてみます。ただし、何のヒントもなしに、数を当てるのは大変です。そこで、はずれの場合、正解値と入力値を比較して、大きいか小さいかというヒントを表示するようにしてみましょう。

 # --- 数字を決める ---
 正解 = 乱数(100) + 1
 入力値 = 0
 # --- 繰り返し尋ねる ---
 試行回数 = 1
 (正解 ≠ 入力値)の間、ここから
   「1から100のどれかな?」と尋ねる。
   入力値 = INT(それ)
   もし、正解=入力値ならば
     「当たり★」と言う。
   違えば
     試行回数 = 試行回数 + 1
     もし、正解>入力値ならば
      「はずれ。 もっと大きな値です」と言う。
     違えば
      「はずれ。もっと小さな値です」と言う。
     ここまで。
   ここまで。
 ここまで。
 「{試行回数}回目で当たりました。」と表示。

なでしこ3のエディタで実行して試してみましょう。

はずれた場合、ヒントを表示します

当たった場合、何回で正解したかを表示します

1から100までの数を当てると言うと大変に感じますが、はずれた場合も、大きいか小さいかのヒントが表示されるので、数回チャレンジすることで、数を言い当てることができるでしょう。

ゲームで遊んだら、プログラムを確認してみましょう。今回は、「(比較式)の間」構文を使って、繰り返しプログラムを実行しています。この構文は、以下のように利用します。

[書式]
(比較式)の間、ここから
  # ここに繰り返したい処理
ここまで

この構文は、比較式が真の間、繰り返しプログラムを繰り返し実行します。これは、以下の図のような動作となります。

「(比較式)の間」構文の動作

プログラムのその他の部分は、「もし」構文を利用して、当たりかはずれかを判定したり、入力値と正解のどちらが大きいかを判断しています。

まとめ

以上、今回は、数当てゲームを作ってみました。このように、ゲームを作るには、分岐や繰り返しなど、プログラミングの構文を覚える必要があります。そのため、プログラミングを楽しんで覚えるのに役立ちます。「もし」構文、「(比較式)の間」構文など、プログラミングには、よく出てくるものです。しっかり覚えておきましょう。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2005年IPAスーパークリエイター認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。