この連載
では、Ruby(ルビー)というプログラミング言語を使って、本格的
なプログラミングに挑戦
しているよ。
さて、前回は、サイコロを振
って、サイコロの目の数だけマスを進んでゴールを目指
すというすごろくゲームをつくったよ。ちゃんとゴールにたどり着けたかな? 今回は、それにおもしろいギミック(しかけ)を追加してみよう!
1 前回のおさらい
まず前回学んだことのおさらいをしておこう。すごろくゲームのプログラムでは、「変数
の式展開
」を使った。「式展開」とは、文字列の中で変数などを扱いたい時に使うよ。書式は次のようになるね。
変数や式の部分を「#{ }」で囲む
ただし、式展開を使うときには次の注意が必要だったね。
単なる文字列の表示:
「’ (シングルクォート)」「” (ダブルクォート)」どちらでもOK
式展開を含んでいる文字列:「” (ダブルクォート)」のみ
この式展開は前回のすごろくゲームでのポイントだったね。思い出せたかな。
2 追加するギミック(しかけ)を考えよう
基本のプログラムでは、サイコロの出た目だけ進むので、すぐにゴールにたどり着いてしまう。もっとゲームをおもしろくするために、あらかじめ決めたマス目に達したら、進んだり戻ったりするギミック(しかけ)を考えてみよう。例えば、次のようなギミックをプログラムに追加していくよ。
【追加するギミック】
1マス目では2進む
5マス目では2戻る
10マス目では最初に戻る
15マス目では7戻る
3 プログラムをしよう
前回つくった「sugoroku1.rb」をエディター(TeraPad)で開く。名前を「sugoroku2.rb」にしていったん保存をしておくといいよ。プログラムは、次のように入力していくよ。
それでは、プログラムの内容を説明していこう。
9行目から14行目までは、前回のすごろくゲームのプログラムそのままだ。
19行目から40行目までのギミックの部分を見て欲しい。ここは、case~ when~ end 構文で、前回解説したif~ elsif~ else~ end文のように、いくつも条件分岐
(条件を満たすかどうかによって処理
を変える)する構文
だ。case文の場合は、条件の値
がはっきりしている場合に便利な構文で、ここでは、変数me に代入されている何番目のマス目に進んだかという値を条件としているよ。
case 変数名
when 値1
値1と一致する場合に行う処理
when 値2
値2と一致する場合に行う処理
when 値3
値3と一致する場合に行う処理
else
どの値にも一致しない場合に行う処理
end
そこで、20行目はme の値が1の場合、21行目から23行目を実行、25行目はme の値が5の場合、26行目から28行目を実行、となるよ。
マス1では21行目でメッセージを表示して、22行目で変数me に2を加えている。マス5では27行目で変数me から2を引いている。マス10では32行目で変数me の値を0、すなわち最初に戻している、ということだよ。
23、28、33、38行目では同じmes(me) というメソッドを読んでいるけど、これは4行目から7行目でこのプログラムだけに使われる特別な「メソッドを定義
」している部分だ。
メソッドを定義する場合は、次のような構文をつくるよ。
def メソッド名
処理するコード
end
ここでは、前回つくったすごろくゲームのプログラムでも使ったマス目の表示をしているね。もしもこのメソッドをつくっておかないと、各ギミックの中でこの同じコードを何回も書くことになるからめんどうだし、ゴチャゴチャしてくるよね。
このように、メソッドは同じ処理の繰
り返しをかんたんにしたり、処理を目的別に分けたりする場合にとても便利なやり方なんだ。
さて、このプログラムで注意が必要なのが16行目のif 文だ。これは例えば18マス目にいて、サイコロの目が3以上出ると、20のマスを超えてしまい、mes メソッドを実行する段階
でエラーが出てしまう。そのような段階
を避
けるために入れているよ。
また、プログラムの書き方で、ところどころに# で始まるコメント文を入れているね。これも以前勉強したけれど、後からプログラムを見たときに、どのような処理をしているかをわかりやすくする工夫だ。
さらにこのプログラムは、while分の中にif 文があって、その中にcase 文があるという「入
れ子
構造
」になっている。一見複雑
に見えるけど、どこが区切りとなっているかを見極
めるとわかりやすくなるんだ。そのため、前に説明したしたインデントや40、41、42行目のend のコメントなども活用してね。
プログラムが完成したら、さっそく実行してみよう。コマンドプロンプトを開いて、「ruby sugoroku2.rb」と入力すればよかったね。次のような表示がでたかな(一部表示)。
何回サイコロを振ったらゴールできたかな? すごろくゲームで楽しんだら、今回つくったプログラムを参考にして、ギミックを追加してみるなど、プログラムの改造にもチャレンジしてみてね!
(文/株式会社まちづくり三鷹 野口英一郎、竹下麻由)