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

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

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

## 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3280199/8a96625c-242f-ab33-c970-f4a4c6f16960.jpeg)
と表示されます。


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

## コードの中身を見ていこう
```ruby
def janken
puts "最初はグー、じゃんけん..."
puts "[0]:グー\n[1]:チョキ\n[2]:パー"

player_hand = gets.to_i

program_hand = rand(3)
end
```




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

:::note info
メソッドとは...
分かりやすく説明するとグループの名前を決めてあげることです。
そして、Rubyの場合はdefを使うことで作成することができます。
:::
メソッドを指定した後は`puts`を使用し「じゃんけんをするから0or1or2のどれかを選んで!」という内容を伝えます。(文字の横にある\nは改行コードです。)

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

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

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

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

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

```ruby
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にグー,チョキ,パーの三つを代入します。
次にユーザーが選んだ手とプログラムによってランダムに選んだ手を文字列として表しましょう。
```ruby
jankens[player_hand]
```
と書かれていますね、これはplayer_handの数字をjankensの数字と繋げる役割を果たします。

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

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

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

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

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

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

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

ややこしいですね...。これをif文で定義します。
```ruby
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
```



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

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

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

```ruby
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以上を入力した場合はどうでしょう、エラーが起きてしまいます。

なのでコードにこのように指定しましょう。
```ruby
if player_hand > 2
	puts "入力された値が無効です"
	return true
```
2以上の数を入力した際に値が無効であることを表示するコードです。
どこに入れるかはぜひ考えてみましょう。ちなみに答えは冒頭のコードに書いてあります。

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

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

では!