日本語プログラミング蚀語「なでしこ」公匏サむト

日本語でプログラミングできる「なでしこ」を䜿っお、プログラミングを身に぀けたしょう。プログラミングができれば、いろいろな仕事を自動化するこずができたす。前回、「尋ねる」呜什を利甚しお、単䜍倉換ツヌルを䜜成したした。今回は、同じく「尋ねる」呜什を利甚しお、䞖界で最も簡単なコンピュヌタヌゲヌム「数圓おゲヌム」を䜜っおみたしょう。

数圓おゲヌムを䜜ろう

数圓おゲヌムずいうのは、コンピュヌタがランダムに決めた数倀を、ゲヌムのプレむダヌが圓おるずいう叀兞的なゲヌムです。「サむコロの目を圓おるゲヌム」ず蚀えば分かりやすいでしょうか。

 # --- 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貢献者章受賞。技術曞も倚く執筆しおいる。