0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rubyでじゃんけんコードを書いてみよう

Posted at

今回はRubyを使ってじゃんけんプログラムを書いていきます。

じゃんけんは初心者練習と言われていますが、プログラミング初心者にとっては難しいです。
記事内では所々解説も挟みますので、ぜひご参考にしてください!

Rubyでじゃんけんコード、完成形を見てみよう

では実際の完成コードを見てみましょう。

def janken
puts "最初はグー、じゃんけん..."
puts "[0]:グー\n[1]:チョキ\n[2]:パー"

player_hand = gets.to_i

program_hand = rand(3)

if player_hand > 2
	puts "入力された値が無効です"
	return true
end
jankens=["グー","チョキ","パー"]

puts "あなたの手:#{jankens[player_hand]}, プログラムの手:#{jankens[program_hand]}"

if player_hand == program_hand
	puts "あいこ"
	return true
elsif (player_hand == 0 && program_hand ==1) ||(player_hand == 1 && program_hand ==2) || (player_hand == 2 && program_hand ==0)
	puts "あなたの勝ちです"
   return false
else
	puts "負け"
	return false
end
end

next_game = true

while next_game
  next_game = janken
end

こちらが完成形のコードです。これをコンソール上で出力すると...
aaa.jpg
と表示されます。

Rubyは他の言語と比べると出力が簡単ですが、最初はつまづくことが多いです。ぜひゆっくり進めていきましょう!

では、コードの中身を見ていきましょう。

コードの中身を見ていこう

def janken
puts "最初はグー、じゃんけん..."
puts "[0]:グー\n[1]:チョキ\n[2]:パー"

player_hand = gets.to_i

program_hand = rand(3)
end

まずは大枠から書いていきましょう。じゃんけんのコードを書くので分かりやすくjanken メソッドを作成します。

メソッドとは...
分かりやすく説明するとグループの名前を決めてあげることです。
そして、Rubyの場合はdefを使うことで作成することができます。

メソッドを指定した後はputsを使用し「じゃんけんをするから0or1or2のどれかを選んで!」という内容を伝えます。(文字の横にある\nは改行コードです。)

次に出てくるのがplayer_hand = gets.to_iというコード、こちらを書くことでユーザー数字を入力し、受け取ることができます。一度書いてみましょう。

その次に出てくるのがprogram_hand = rand(3)です。rand(数字)と書くことでランダムに( )内に数字を入れます。この場合の三つは(0と1と2です。)

ここでよく出る疑問がこちら

0とか1を選んだけど、それって意味があるの?グーとかチョキを表示したい!!

はい、その通り。数字だけではどうしてもグーやチョキを表示できませんよね。なのでこのコードを書き足します。

def janken
puts "最初はグー、じゃんけん..."
puts "[0]:グー\n[1]:チョキ\n[2]:パー"

player_hand = gets.to_i

program_hand = rand(3)

# ↓書き足したコード
jankens=["グー","チョキ","パー"]
puts "あなたの手:#{jankens[player_hand]}, プログラムの手:#{jankens[program_hand]}"

end

jankensにグー,チョキ,パーの三つを代入します。
次にユーザーが選んだ手とプログラムによってランダムに選んだ手を文字列として表しましょう。

jankens[player_hand]

と書かれていますね、これはplayer_handの数字をjankensの数字と繋げる役割を果たします。

例えば....
0を選んだ場合、jankensの0の位置にあるグーがユーザーの手として表示されます。
これで基本文が完成です。

代入のイメージが付きにくい...という方は「Ruby 代入」と調べてみましょう。

分岐要素を付けよう(Rubyでじゃんけん)

かなり完成系に近づきました。次はif文を使って実際にじゃんけんプログラムを行いましょう。
まずはじめに、じゃんけんの勝ち負けは以下に分けれます。

・あいこの場合
ユーザーとプログラムの値が一緒の時

・ユーザが勝つ場合
ユーザー(グー):プログラム(チョキ)
ユーザー(チョキ):プログラム(パー)
ユーザー(チョキ):プログラム(パー)
の三つ。

・ユーザーが負ける場合
それ以外

ややこしいですね...。これをif文で定義します。

if player_hand == program_hand
	puts "あいこ"
	return true
elsif (player_hand == 0 && program_hand ==1) ||(player_hand == 1 && program_hand ==2) || (player_hand == 2 && program_hand ==0)
	puts "あなたの勝ちです"
   return false
else
	puts "負け"
	return false
end

これでif文が完成!分からないところはコピーして調べてみよう!

よし!これで完成!
....でも大丈夫ですが、もう少しリッチなじゃんけんプログラムにしてみましょう。

繰り返し要素をつけよう(Rubyでじゃんけん)

あいこの場合はもう一度じゃんけんを行いたいですよね、そこで切り返し要素を使いましょう!
繰り返し要素はreturnを使うことで定義できます。完成系のコードがこちら

if player_hand == program_hand
	puts "あいこ"
	return true
elsif (player_hand == 0 && program_hand ==1) ||(player_hand == 1 && program_hand ==2) || (player_hand == 2 && program_hand ==0)
	puts "あなたの勝ちです"
   return false
else
	puts "負け"
	return false
end
end

next_game = true

while next_game
  next_game = janken
end

こちらのRubyコードを分かりやすく言うともしtrueが起こった時にはもう一度jankenメソッドを繰り返すというもの。

jankenメソッドとは記事内冒頭で説明したものです。
こちらを使うことでより親切なプログラムになります。

基本的なじゃんけんコードの書き方は以上です!お疲れ様でした!!

少しスキルアップ!

こちらはスキルアップしたい方向けです。
0or1or2のどれかを入力すればじゃんけんが表示できるようになりましたね、しかし、もしユーザーが2以上を入力した場合はどうでしょう、エラーが起きてしまいます。

なのでコードにこのように指定しましょう。

if player_hand > 2
	puts "入力された値が無効です"
	return true

2以上の数を入力した際に値が無効であることを表示するコードです。
どこに入れるかはぜひ考えてみましょう。ちなみに答えは冒頭のコードに書いてあります。

Rubyでじゃんけんコード作成まとめ

この記事ではRubyを使用してじゃんけんコードを書く方法をご紹介しました。
最初はとても難しいですね...。

ぜひ何度も練習し、難しいコードも難なく書けるよう勉強していきましょう!
お読みいただきありがとうございました!

では!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?