【Ruby】確認問題2-☆3:簡単なじゃんけんゲームを作ろう

記事内に商品プロモーションを含む場合があります

この記事の練習問題で使用する知識:
入力と出力の基本変数と定数文字列操作乱数生成比較演算子と論理演算子if文による分岐処理case文による条件分岐

Rubyのゲームコード一覧はこちら

<<前のページ Ruby記事一覧 次のページ>>

確認問題:簡単なじゃんけんゲームを作ろう

シンプルな「じゃんけんゲーム」を作成しましょう。

プレイヤーとコンピュータがじゃんけんを行い、その結果を表示します。

ゲームはプレイヤーが終了を選択するまで続きます。

この問題の要件

以下の要件に従ってコードを完成させてください。

  • プレイヤーが「グー」、「チョキ」、「パー」のいずれかを数字で入力できるようにすること。
  • コンピュータはランダムで「グー」、「チョキ」、「パー」を選ぶこと。
  • プレイヤーの入力とコンピュータの選択を比較し、結果を表示すること。
  • ゲームはプレイヤーが終了を選択するまで繰り返されること。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

じゃんけんゲームを始めます!
じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2)
> 2
あなたの手: パー
コンピューターの手: チョキ
あなたの負けです!

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:開始メッセージの出力
2:入力方法の指示メッセージを出力
3:ユーザーの入力を整数に変換し、変数player_choiceに代入
4:ランダムな整数を生成し、変数computer_choiceに代入
5:case文による分岐でプレイヤーの手を判定
  □ player_choiceが0の場合、「グー」を返す
  □ player_choiceが1の場合、「チョキ」を返す
  □ player_choiceが2の場合、「パー」を返す
  □ それ以外の場合、「不明な手」を返す
6:case文による分岐でコンピュータの手を判定
  □ computer_choiceが0の場合、「グー」を返す
  □ computer_choiceが1の場合、「チョキ」を返す
  □ computer_choiceが2の場合、「パー」を返す
7:プレイヤーの手を出力
8:コンピュータの手を出力
9:if文でプレイヤーとコンピュータの手が同じかを判定
  □ 同じ場合、「引き分けです!」を出力
10:プレイヤーの勝利条件を判定
  □ 勝利条件を満たした場合、「あなたの勝ちです!」を出力
11:それ以外の場合
  □ 「あなたの負けです!」を出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# じゃんけんゲームの開始メッセージ
puts "じゃんけんゲームを始めます!"
puts "じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2)"

# プレイヤーの手を入力
=begin
【穴埋め問題1】
ここでユーザーの入力を整数に変換して、変数player_choiceに代入するコードを書いてください。
=end

# コンピュータの手をランダムに決定
=begin
【穴埋め問題2】
ここでランダムな整数を生成し、変数computer_choiceに代入するコードを書いてください。
=end

# プレイヤーの手の名前を取得
player_hand = case player_choice
=begin
【穴埋め問題3】
              プレイヤーの手に応じて "グー", "チョキ", "パー" のいずれかを返すようにcase文を完成させてください。
=end
              end

# コンピュータの手の名前を取得
computer_hand = case computer_choice
=begin
【穴埋め問題4】
                コンピュータの手に応じて "グー", "チョキ", "パー" のいずれかを返すようにcase文を完成させてください。
=end
                end

# プレイヤーとコンピュータの手を表示
puts "あなたの手: #{player_hand}"
puts "コンピューターの手: #{computer_hand}"

# 勝敗の判定
=begin
【穴埋め問題5】
ここでプレイヤーとコンピュータの手を比較し、勝敗を表示するif文を完成させてください。
=end

この問題の穴埋めコードは以上です。

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

確認問題の解答と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

# じゃんけんゲームの開始メッセージ
puts "じゃんけんゲームを始めます!"
puts "じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2)"

# プレイヤーの手を入力
player_choice = gets.to_i

# コンピュータの手をランダムに決定
computer_choice = rand(3)

# プレイヤーの手の名前を取得
player_hand = case player_choice
              when 0 then "グー"
              when 1 then "チョキ"
              when 2 then "パー"
              else "不明な手"
              end

# コンピュータの手の名前を取得
computer_hand = case computer_choice
                when 0 then "グー"
                when 1 then "チョキ"
                when 2 then "パー"
                end

# プレイヤーとコンピュータの手を表示
puts "あなたの手: #{player_hand}"
puts "コンピューターの手: #{computer_hand}"

# 勝敗の判定
if player_choice == computer_choice
  puts "引き分けです!"
elsif (player_choice == 0 && computer_choice == 1) ||
      (player_choice == 1 && computer_choice == 2) ||
      (player_choice == 2 && computer_choice == 0)
  puts "あなたの勝ちです!"
else
  puts "あなたの負けです!"
end

正解コードの解説

今回の「じゃんけんゲーム」のRubyコードは、プレイヤーとコンピュータの手を比較してじゃんけんの勝敗を決めるプログラムです。

このコードの内容をブロックごとに分けて解説していきます。

じゃんけんゲームの開始メッセージ

puts "じゃんけんゲームを始めます!"
puts "じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2)"

putsはRubyの標準出力に文字列を表示するための命令です。

これを使ってゲームの開始を知らせるメッセージや、じゃんけんの手の入力方法についてユーザーに指示を表示します。

プレイヤーの手を入力

player_choice = gets.to_i
  • getsはユーザーからの入力を受け取るメソッドで、コンソールに入力された文字列を読み取ります。
  • to_iを使うことで入力された文字列を整数に変換し、変数player_choiceに代入しています。
    この変数は後で勝敗を判定する際に使用されます。

コンピュータの手をランダムに決定

computer_choice = rand(3)
  • randはランダムな数値を生成するメソッドです。ここではrand(3)で0から2までの整数を生成し、computer_choiceという変数に代入します。
  • 0が「グー」、1が「チョキ」、2が「パー」に対応し、コンピュータの手をランダムに選びます。

プレイヤーとコンピュータの手の名前を取得

player_hand = case player_choice
              when 0 then "グー"
              when 1 then "チョキ"
              when 2 then "パー"
              else "不明な手"
              end
  • case文は条件分岐を行うための構文です。ここではplayer_choiceの値に応じてプレイヤーが選んだ手の名前を設定しています。
  • when節で0、1、2のいずれかの場合に対応する手の名前を返し、それ以外の場合は「不明な手」を返します。

コンピュータの手の名前を取得

computer_hand = case computer_choice
                when 0 then "グー"
                when 1 then "チョキ"
                when 2 then "パー"
                end

先ほどと同様にcase文を使ってコンピュータの手の名前を決定します。

computer_choiceの値に応じて「グー」「チョキ」「パー」のいずれかが選ばれます。

プレイヤーとコンピュータの手を表示

puts "あなたの手: #{player_hand}"
puts "コンピューターの手: #{computer_hand}"
  • 文字列の中で#{}を使うと変数の値を埋め込むことができます。これを式展開と呼びます。
  • putsを使ってプレイヤーとコンピュータが選んだ手を表示しています。

勝敗の判定

if player_choice == computer_choice
  puts "引き分けです!"
elsif (player_choice == 0 && computer_choice == 1) ||
      (player_choice == 1 && computer_choice == 2) ||
      (player_choice == 2 && computer_choice == 0)
  puts "あなたの勝ちです!"
else
  puts "あなたの負けです!"
end

if文を使ってじゃんけんの勝敗を判定しています。

  • player_choice == computer_choiceの場合は引き分けとして、「引き分けです!」と表示します。
  • プレイヤーが勝つ条件(例:プレイヤーがグーで、コンピュータがチョキなど)をelsifで判定し、該当する場合は「あなたの勝ちです!」と表示します。
  • 上記以外の条件はプレイヤーの負けとし、「あなたの負けです!」と表示します。

まとめ

このじゃんけんゲームのコードではRubyの基本的な入出力操作やランダムな数値生成、case文を使った条件分岐、if文による複雑な条件判定など、多くの基礎的な文法を学ぶことができます。

これらの文法は他のプログラムにも応用が効く大切なスキルです。

ぜひこのコードを実行しながら学習を進め、Rubyの理解を深めてください。

Rubyのゲームコード一覧はこちら

<<前のページ Ruby記事一覧 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Rubyテキスト&問題集へ戻る
    トップページへ戻る