子どもRubyプログラミング講座「ロボット編」第19回

〜じゃんけんゲームをしよう~(rand)

piroko_jaran_ss今回はロボットとじゃんけんゲームをしてみましょう。rand(ランド)を使います。

 

 

エディタに次のプログラムを入れて「動かす」ボタンを押してみましょう。


puts rand(3)

0、1、2のいずれかが出力タブに表示されましたね。

randはランダムな数(でたらめな数)を発生(はっせい)させる命令。randのうしろにある( )の中に数を入れて、発生する数の範囲(はんい)を指定します。上の場合は、0から数えて3番目まで、つまり0、1、2のいずれかが生成(せいせい)されます。

10回繰り返して、指定した範囲の数しか出力されないことを確認しましょう。


10.times do
  puts rand(3)
end

確認できましたか?0、1、2がランダムに10回、出力されましたね。

次に、randを使って発生させた1~3の数を、case~whenでグーチョキパーにあてはめてみましょう。「rand(3) + 1」にすれば、発生する数は1、2、3のいずれかになりますね。


r = rand(3) + 1

case r
when 1
  puts "ロボットはグー"
when 2
  puts "ロボットはチョキ"
when 3
  puts "ロボットはパー"
end

プログラムのせつめい

1行目

randで0、1、2のいずれかの数をランダムに生成し(rand(3))、それに1を加え(+1)、rという名前のついた箱に入れなさい。

3行目

rという名前のついた箱に入っている数が、次の条件と一致(いっち)するか調べなさい。

4行目

rという名前のついた箱に入っている数が1のときは、次の行の命令に進みなさい。そうでないなら、次のwhenに進みなさい。

6行目

2のときは、次の行の命令に進みなさい。そうでないなら、次のwhenに進みなさい。

8行目

3のときは、次の行の命令に進みなさい。

ロボットで動きを確認しよう

ロボットとじゃんけんゲームをしてみましょう。自分が出したグーチョキパーとロボットが出したグーチョキパーを入れる箱を用意し、それぞれに入っている数をくらべて勝ち負けを決めます。askとcase~whenを使うよ。勝ったときや負けたとき、ロボットはどんな動きをするかな。好きな動きをさせてみよう。


require "mi100"

robo = Mi100.new "COM3"

puts "じゃんけん"
puts ""

j = ask "1:グー 2:チョキ 3:パー"
unless (j == 1 or j == 2 or j == 3)
  puts "グーチョキパーをえらんでね"
end

r = rand(3) + 1

case r

when 1
  puts "ロボットはグー"
  case j
  when 1
    puts "引き分け"
  when 2
    puts "ロボットの勝ち"
    robo.good
  when 3
    puts "君の勝ち"
    robo.bad
  end

when 2
  puts "ロボットはチョキ"
  case j
  when 1
    puts "君の勝ち"
    robo.bad
  when 2
    puts "引き分け"
  when 3
    puts "ロボットの勝ち"
    robo.good
  end

when 3
  puts "ロボットはパー"
  case j
  when 1
    puts "ロボットの勝ち"
    robo.good
  when 2
    puts "君の勝ち"
    robo.bad
  when 3
    puts "引き分け"
  end

end

robo.close

プログラムのせつめい

1行目~3行目

ロボットを無線で動かせるようにするための、いつものステップですね。

5行目~6行目

出力タブに「じゃんけん」と表示し、””で空白行を入れます。

8行目

「1:グー 2:チョキ 3:パー」と書いてある四角い箱を出し、そこに入れた数をjという名前のついた箱に入れなさい。

9行目~11行目

見なれない命令が出てきましたね。unless(アンレス)はifの反対。「もしも~でないなら」という意味。もしも、jに入っている数が、1でも2でも3でもないなら、「グーチョキパーをえらんでね」と表示しなさい。

13行目

1、2、3のいずれかをランダムに生成して1を加え、rという名前のついた箱に入れなさい。

15行目

rという名前のついた箱に入っている数が次の条件と一致するか調べなさい。

17行目

rという名前のついた箱に入っている数が1のときは、次の行に進みなさい。1ではないなら、次のwhen(30行目)に進みなさい。

19行目

jという名前のついた箱に入っている数が次の条件と一致するか調べなさい。

20行目

jという名前のついた箱に入っている数が1のときは、次の行に進みなさい。1ではないなら、次のwhen(22行目)に進みなさい。

22行目

jという名前のついた箱に入っている数が2のときは、次の行に進みなさい。2ではないなら、次のwhen(25行目)に進みなさい。

25行目

jという名前のついた箱に入っている数が3のときは、次の行に進みなさい。
大きいケース(case r)の中に小さいケース(case j)が入っていることに注目してください。ロボットがグーのとき(case rのwhen 1)、自分が出すのはグー、チョキ、パーの3通りですね。その勝敗を、case jのwhen 1、2、3で決めています。

おわり