【Ruby】確認問題2-☆1:ハイアンドロー ゲームを作ろう

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

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

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

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

確認問題:ハイアンドローゲームを作ろう

ハイアンドローゲームを作成しましょう。

このゲームではプレイヤーとコンピュータがそれぞれ1から13までのカードを1枚ずつ持ちます。

プレイヤーはコンピュータのカードが自分のカードより「大きい」か「小さい」かを予想し、結果が表示されます。

この問題の要件

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

  1. SecureRandom ライブラリを使用して、プレイヤーとコンピュータにランダムなカード(1〜13の整数)を配ること。
  2. プレイヤーのカードのみを最初に表示し、コンピュータのカードは「??」として隠して表示すること。
  3. プレイヤーが「1: 大きい」「2: 小さい」から選択して予想を入力すること。
  4. プレイヤーの予想後に、コンピュータのカードを公開し、以下のように結果を判定すること。
    • 引き分けの場合、「引き分け!」と表示する。
    • プレイヤーの予想が正解の場合、「正解!あなたの勝ち!」と表示する。
    • プレイヤーの予想が外れた場合、「残念!あなたの負け!」と表示する。

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

=== ハイアンドローゲームへようこそ! ===
【プレイヤー】7 VS ??【コンピュータ】
あなたのカードはコンピュータのカードより大きい?小さい?
1: 大きい、2: 小さい ⇒ 1
【プレイヤー】7 VS 5【コンピュータ】
正解!あなたの勝ち!

この問題を解くヒント

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

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

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

1:ハイアンドローゲーム開始メッセージを出力
2:変数player_cardに1から13までのランダムな数値を代入
3:変数computer_cardに1から13までのランダムな数値を代入
4:プレイヤーのカードとコンピュータのカード(伏せた状態)を出力
5:「あなたのカードはコンピュータのカードより大きい?小さい?」と質問文を出力
6:「1: 大きい、2: 小さい」という選択肢を出力
7:ユーザーの入力を整数として変数choiceに代入
8:プレイヤーのカードとコンピュータのカードを表示
9:if文でプレイヤーとコンピュータのカードが同じ値か判定
  □ 真の場合、「引き分け!」と出力
10:elsif文でプレイヤーとコンピュータのカードの大小関係と予想を比較
  □ if文の条件に一致する場合、「正解!あなたの勝ち!」と出力
11:else文
  □ 条件が一致しない場合、「残念!あなたの負け!」と出力

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

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

# ハイアンドローゲーム

# ゲーム開始メッセージ
puts "=== ハイアンドローゲームへようこそ! ==="

=begin
【穴埋め問題1】
ここでプレイヤーとコンピュータにランダムなカード(1〜13の数字)を配るコードを書いてください。
=end

=begin
【穴埋め問題2】
ここでプレイヤーに配られたカードを表示し、コンピュータのカードはまだ表示しないコードを書いてください。
=end

=begin
【穴埋め問題3】
ここでプレイヤーにコンピュータのカードが大きいか小さいかを予想させるメニューを表示し、選択を取得するコードを書いてください。
=end

=begin
【穴埋め問題4】
ここでコンピュータのカードを表示するコードを書いてください。
=end

=begin
【穴埋め問題5】
ここで勝負の結果を判定し、結果を表示するコードを書いてください。
=end

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

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

ハイアンドローゲームの正解コードと解説

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

正解コードの例

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

# ハイアンドローゲーム

# ゲーム開始メッセージ
puts "=== ハイアンドローゲームへようこそ! ==="

# プレイヤーとコンピュータにランダムなカード(1〜13の数字)を配る
player_card = rand(1..13)
computer_card = rand(1..13)

# プレイヤーに配られたカードを表示し、コンピュータのカードはまだ表示しない
puts "【プレイヤー】#{player_card} VS ??【コンピュータ】"

# プレイヤーにコンピュータのカードが大きいか小さいかを予想させる
puts "あなたのカードはコンピュータのカードより大きい?小さい?"
puts "1: 大きい、2: 小さい"
choice = gets.to_i

# コンピュータのカードを表示
puts "【プレイヤー】#{player_card} VS #{computer_card}【コンピュータ】"

# 勝負の結果を判定
if player_card == computer_card
  puts "引き分け!"
elsif (player_card < computer_card && choice == 1) || (player_card > computer_card && choice == 2)
  puts "正解!あなたの勝ち!"
else
  puts "残念!あなたの負け!"
end

正解コードの解説

簡単な「ハイアンドローゲーム」を実装しました。

プレイヤーは自分のカードとコンピュータのカードを比較して「どちらが大きいか、小さいか」を予想します。

以下、コードをブロックごとに分けて解説します。

ゲーム開始メッセージ

puts "=== ハイアンドローゲームへようこそ! ==="

puts: 標準出力に文字列を表示します。

この場合はゲームの開始を知らせるメッセージです。putsは「put string」の略で、文字列を出力し、最後に改行を追加します​​。

プレイヤーとコンピュータにカードを配る

player_card = rand(1..13)
computer_card = rand(1..13)

rand(1..13): 1から13までの整数をランダムに生成します。

ここではプレイヤーとコンピュータのカードを1~13の範囲でランダムに配るために使っています。

乱数の生成はプログラムに変化を与える基本的な方法です​​。

プレイヤーのカードを表示

puts "【プレイヤー】#{player_card} VS ??【コンピュータ】"

文字列内の#{}: #{}内に変数や式を入れると、文字列の中にその結果が埋め込まれます。

ここではプレイヤーのカードの値が表示されますが、コンピュータのカードはまだ隠されています。

このように変数を文字列に埋め込む方法を「式展開」と呼びます​​。

コンピュータのカードが大きいか小さいかを予想する

puts "あなたのカードはコンピュータのカードより大きい?小さい?"
puts "1: 大きい、2: 小さい"
choice = gets.to_i
  • gets: 標準入力からデータを取得するためのメソッドです。ここではプレイヤーに選択を入力してもらいます​。
  • to_i: getsで受け取った入力は文字列として扱われますが、これを整数に変換するためにto_iを使います。
    このコードではプレイヤーが「1」または「2」を入力することで、予想を選択できるようにしています。

コンピュータのカードを公開

puts "【プレイヤー】#{player_card} VS #{computer_card}【コンピュータ】"

ここではプレイヤーとコンピュータのカードを比較できるように、コンピュータのカードも表示します​​。

勝負の結果を判定

if player_card == computer_card
  puts "引き分け!"
elsif (player_card < computer_card && choice == 1) || (player_card > computer_card && choice == 2)
  puts "正解!あなたの勝ち!"
else
  puts "残念!あなたの負け!"
end
  • if, elsif, else: 条件に応じて処理を分岐するための構文です。条件に合うブロックが見つかると、そのブロックが実行され、他の条件はスキップされます​​。
  • 比較演算子 (==, <, >): ==は等しいことを確認し、<>は大小関係を確認します。
    ここではプレイヤーのカードとコンピュータのカードを比較して、引き分けか勝敗を判断します​。
  • 論理演算子 (&&, ||): &&は「かつ」、||は「または」を意味し、複数の条件を組み合わせるときに使います。
    このコードではプレイヤーが選んだ予想(大きい・小さい)と実際の結果が一致するかを判定します​。

まとめ

この「ハイアンドローゲーム」のコードを通して、Rubyの基本的な文法、特に出力方法(puts)、乱数生成(rand)、条件分岐(if-elsif-else)などについて学びました。

簡単なゲームを通じてRubyのコードの流れや基本的な文法を理解することができます。

ぜひ他の条件やルールを追加して、Rubyのスキルをさらに深めていきましょう。

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

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

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

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

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






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