この記事の練習問題で使用する知識:
入力と出力の基本、変数と定数、文字列操作、乱数生成、比較演算子と論理演算子、if文による分岐処理、case文による条件分岐
Rubyのゲームコード一覧はこちら
<<前のページ | Ruby記事一覧 |
次のページ>> |
確認問題:簡単なじゃんけんゲームを作ろう
シンプルな「じゃんけんゲーム」を作成しましょう。
プレイヤーとコンピュータがじゃんけんを行い、その結果を表示します。
ゲームはプレイヤーが終了を選択するまで続きます。
この問題の要件
以下の要件に従ってコードを完成させてください。
- プレイヤーが「グー」、「チョキ」、「パー」のいずれかを数字で入力できるようにすること。
- コンピュータはランダムで「グー」、「チョキ」、「パー」を選ぶこと。
- プレイヤーの入力とコンピュータの選択を比較し、結果を表示すること。
- ゲームはプレイヤーが終了を選択するまで繰り返されること。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
じゃんけんゲームを始めます! じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2) > 2 あなたの手: パー コンピューターの手: チョキ あなたの負けです!
この問題を解くヒント
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:それ以外の場合
□ 「あなたの負けです!」を出力
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# じゃんけんゲームの開始メッセージ 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を活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。