ProgateでRubyを学んだ知識を使ってじゃんけんプログラムを作ろう!

じゃんけんプログラムアイキャッチプログラミング

この記事を読んでいるあなたは、アパレルからIT業界に転職するために、日々ProgateでRubyの勉強をしていると思います。

でも、本当にRubyのプログラミング力が身についているのか気になりませんか?

それなら、ビギナーが実力をテストするのに最適なじゃんけんプログラムを作って見ましょう。

プログラミングに慣れている人なら3分でできる超簡単なプログラムですので、自身がある人はどれだけ短時間で完成できるかタイムアタックに挑戦してみてください。

 

Yuta
Yuta

ちなみに、僕が一番最初に挑戦した時には30分かかりました…(笑)

じゃんけんプログラムの条件

rubyアイキャッチ

このじゃんけんプログラムを作成するにあたり、作って欲しい概要をお伝えします。

  • じゃんけんプログラムはコマンドラインで完結させる
  • じゃんけんにおいてユーザーにどの手を出すか選択させる
  • コンピューターの手はランダム関数を使用すること
  • “勝ち”、”負け”、”あいこ”のいずれかの結果になるように作る
  • if/elsif文と条件の組み合わせを使って作る

このプログラムを作成するにあたって、やり方はたくさんあります。今回はわかりやすいようにif/elsif文と条件の組み合わせを使って作って見ましょう。

最初に今回解説するソースコードをお見せします。

loop do
  puts '------------------------------------------------------------------'
  puts "じゃんけんマンが現れた!"
  puts "どうする?"
  puts '勝負する:1 逃げる:2'

  choice = gets.chomp

  case choice
    when '1'
      puts '------------------------------------------------------------------'
      puts "グー:1 チョキ:2 パー:3"
      puts "じゃんけん・・・"

      my_hand = gets.chomp.to_i
      enemy_hand = rand(1..3)

      if my_hand == enemy_hand
        puts "あなた: #{my_hand} じゃんけんマン: #{enemy_hand}"
        puts "あいこです!"
      elsif (my_hand == 1 && enemy_hand == 2) || (my_hand == 2 && enemy_hand == 3) || (my_hand == 3 && enemy_hand == 1)
        puts "あなた: #{my_hand} じゃんけんマン: #{enemy_hand}"
        puts "やったね!あなたの勝ちです!"
      else
        puts "あなた: #{my_hand} じゃんけんマン: #{enemy_hand}"
        puts "残念・・・。あなたの負けです。"
      end

  when '2'
    puts '------------------------------------------------------------------'
    puts '=>うまく逃げ切れた!'
    break
  else
    puts '=>1,2のいずれかを選択してください'
    end
end

まずはユーザーにどの手を出すか選択させよう

コンピューターと対戦させるには、まず最初にユーザーに”グー”,”チョキ”,”パー”のどれを出すかを選ばさせるようにします。

じゃんけんの時には「じゃんけん…」などと掛け声を言いますよね。

Rubyにおいて画面に文字列を出力させるには、

puts

を使用します。これにより、最初の掛け声は

puts "じゃんけん..."

となリます。

 

Yuta
Yuta

文字列の部分はダブルクォーテーション「””」orシングルクォーテーション「”」で囲ってください。ただし、#{hoge}のように文字列展開する時はダブルクォーテーションじゃないといけないので注意しましょう。

次に、”グー”,”チョキ”,”パー”の選択肢を作成しましょう。これもputsを使って出力させます。

puts "グー:1 チョキ:2 パー:3"

ここでは、”グー”,”チョキ”,”パー”にそれぞれ数字を割り当てています。

getsメソッドを使ってユーザーに選択させてみよう

getsメゾットは、キーボードから入力された値を文字列として取得するメソッドです。ただし、そのまま”グー”などを入力してしまうと、

no implicit conversion of 〜(ここの部分はその時発生するエラーによって異なります。) into String (TypeError)

というようなエラーが出てしまいます。これは、「文字列が入力されているけど、このままだと計算できないよ!」と怒られているわけです。

このエラーを回避するために、

.to_i

を使用して文字列を数値(10進数)に変換させます。(.to_iメソッド)

これで準備が整いました。

ユーザーの手をmy_handとして、 gets.to_iメソッドに代入させましょう。

my_hand = gets.to_i

このようになり、実行させると下記のような画面になれば成功です。

じゃんけん入力画面

コンピューターの手がランダムになるようにしよう

次にやることは、コンピューターの手をランダム関数で乱数にすることです。

じゃんけんをする際にいつも相手が同じ手を使ってきたら、つまらないですよね。

そこで、ランダム関数を使用して、プログラムを実行するたびに、コンピューターの手が毎回異なるようにしていきます。

じゃんけんにおける手数は、”グー”,”チョキ”,”パー”の3通り。Rubyの場合は

rand

メソッドを使用して乱数にします。引数に(1..3)の範囲オブジェクトを渡して、

enemy_hand = rand(1..3)

上記のようにenemy_hand変数を定義します。

 

Yuta
Yuta

randについてもっと知りたい方はこちら

if/elsifを使って条件を分岐させてみよう

あいこをプログラミングするには?

さて、ここからはどのプログラミング言語でも必ず出てくるif/elsif文を使用して、条件分岐させてみましょう。

if文は上から順番に処理が実行されますので、まずは一番難しい処理の”あいこ”から処理をさせるようにします。

if my_hand == enemy_hand

ここで使用しているのが、「==」という比較演算子です。これは、左の値と右の値が同じであるかを調べる演算子でしたね。

“あいこ”はユーザーとコンピューターの手が同じである場合に成立するので、上記のようにプログラミングすることができます。

elsif文を使用してユーザーがコンピューターに勝った時をプログラミングする

次に、ユーザーが手を出した時に、コンピューターに勝つ時の条件をプログラミングしましょう。if文は”あいこ”ですでに使用したので、elsif文を使います。
「もしユーザーとコンピューターがあいこ出なく、勝っていたら処理を実行する」というようなプログラムを作りたい時に使用するのがelsif文でしたね。

elsif   (my_hand == 0 && enemy_hand == 1) ||
(my_hand == 1 && enemy_hand == 2) ||
(my_hand == 2 && enemy_hand == 0)
puts "あなたの勝ちです!"

じゃんけんで勝つ時の条件は、

  • グーを出した時に、相手がチョキ・・・ my_hand == 0 && enemy_hand == 1)
  • チョキを出した時に、相手がパー・・・my_hand == 1 && enemy_hand == 2
  • パーを出した時に、相手がグー・・・my_hand == 2 && enemy_hand == 0

ですね。ここでも比較演算子の「==」を使用していることに注目してください。また、複数の条件を組み合わせることができる「&&(かつ)」を使用して、

ユーザーがグー、かつ、コンピューターがチョキ

というようなプログラミングを行うことができます。

ユーザーがコンピューターに勝つ条件は3通りあるので、「||(または)」を使用することで条件を連結させることが可能です。

ユーザーが負ける時の表現はelse文を使う

最後は、ユーザーがコンピューターに負ける時の条件をプログラミングしましょう。勝った時と同じように、「&&」や「||」を使うのかな?と思うところですが、
実はそんなことをする必要はありません。

この負けるという条件は、

  • 「あいこ」
  • 「勝つ」

のいずれにも当てはまりませんよね。そんな時はelse文を使えば

else
puts "あなたの負けです!"

これだけのコードを書くだけで済みます。意外と初心者がハマりやすい部分なので、覚えておいてくださいね。

最後に

冒頭でも一度紹介しましたが、最終的なコードは次のようになります。

loop do
  puts '------------------------------------------------------------------'
  puts "じゃんけんマンが現れた!"
  puts "どうする?"
  puts '勝負する:1 逃げる:2'

  choice = gets.chomp

  case choice
    when '1'
      puts '------------------------------------------------------------------'
      puts "グー:1 チョキ:2 パー:3"
      puts "じゃんけん・・・"

      my_hand = gets.chomp.to_i
      enemy_hand = rand(1..3)

      if my_hand == enemy_hand
        puts "あなた: #{my_hand} じゃんけんマン: #{enemy_hand}"
        puts "あいこです!"
      elsif (my_hand == 1 && enemy_hand == 2) || (my_hand == 2 && enemy_hand == 3) || (my_hand == 3 && enemy_hand == 1)
        puts "あなた: #{my_hand} じゃんけんマン: #{enemy_hand}"
        puts "やったね!あなたの勝ちです!"
      else
        puts "あなた: #{my_hand} じゃんけんマン: #{enemy_hand}"
        puts "残念・・・。あなたの負けです。"
      end

  when '2'
    puts '------------------------------------------------------------------'
    puts '=>うまく逃げ切れた!'
    break
  else
    puts '=>1,2のいずれかを選択してください'
    end
end

初心者でもこのように実行できるプログラムができるようになると、プログラミングを学ぶのがもっと楽しくなると思います!

Googleで「Ruby 演習問題」などと検索すると、たくさん出てくるので参考にしてみてくださいね!

ちなみに、僕が一番オススメするサイトはこちら!

【教育・学習】資格・学習
総合情報サイト「コレダ!」がお届けする教育・学習における資格・学習の総合情報サイトです。

この講師である迫さんは、学生時代からブログだけで月40万円以上稼いでいたすごい人。

プログラミングにも精通しており、特にこのRubyを使った仮想通貨のプログラムを作るオンライン講座取り組むだけでかなりの実力がつきます。

興味のある方は是非チャレンジして見てください!