はじめに
この記事はRubyを使った初歩的なプログラミングのアウトプットの練習をするためのものです。
見辛い点、わかりづらい点などあったらご指摘していただけると幸いです。
作成時、
Rubyでじゃんけんプログラムを作成
の記事とコメントを参考にしました。
目標
ターミナルにて自分の手とコンピュータによるランダムな手をじゃんけんで戦わせ、結果が出るところまでを目標とします。
概ねの目算
jankenと言うメソッドを作成します。あいこの間は勝負が続くので、あいこと勝負がつく場合で分けることも考え、
def janken
"ジャンケンの処理"
end
draw = true
while draw
draw = janken
end
と言うプログラムを作成します。drawとはあいこのことを指し、drawがtrueの間はjankenを繰り返させる、と言う意図です。
じゃんけんの処理内容
「最初はグー、じゃんけん...」は繰り返したくない内容なのでメソッドの外側へ用意します。また、手は入力に応じたものとするため、
puts "最初はグー、じゃんけん..."
puts "[0]グー、[1]チョキ、[2]パー"
を用意します。その後、配列を使って手と数字を対応させます。分かりやすくするために、ターミナルには数字でなく手を表示させます。
hands = ["グー","チョキ","パー"]
player_hand = gets.to_i
program_hand = rand(3)
puts "あなたの手:#{hands[player_hand]}、相手の手:#{hands[program_hand]}"
この段階でじゃんけんの結果が判断できます。グー、チョキ、パーは三竦みの関係になっているので、
result = (player_hand - program_hand) % 3
とすることで、結果を判断できます。(参考記事のコメントでこの方法を知りました。)
じゃんけんの結果
resultの数値により処理が変わるのでif,else文を使います。
まずあいこの場合は相手の手と自分の手が同じと言うことでresultは0になっているはずです。また、この時はjankenメソッドの戻り値をtrueとしたいので、最後の行にtrueと記述します。resultが0ではない場合、勝敗がついているのでjankenメソッドの戻り値をfalseにする必要があります。
if result == 0
puts "あいこで\n[0]グー、[1]チョキ、[2]パー"
true
elsif result == 1
puts "あなたの負けです"
false
else
puts "あなたの勝ちです"
false
end
以上です。最後に全体のコードを載せておきます。
puts "最初はグー、じゃんけん..."
puts "[0]グー、[1]チョキ、[2]パー"
def janken
hands = ["グー","チョキ","パー"]
player_hand = gets.to_i
program_hand = rand(3)
puts "あなたの手:#{hands[player_hand]}、相手の手:#{hands[program_hand]}"
result = (player_hand - program_hand) % 3
if result == 0
puts "あいこで\n[0]グー、[1]チョキ、[2]パー"
true
elsif result == 1
puts "あなたの負けです"
false
else
puts "あなたの勝ちです"
false
end
end
draw = true
while draw
draw = janken
end
最後に
この記事は参考元のコードとコメントを組み合わせ、自分で何も見ずに書いたものです。。まだ改善する余地はあると思います。
自分の理解を深めるために書いた記事ですが、Rubyの練習にじゃんけんのコードを書く人の助けになれば嬉しいです。