【学習ログ】【Ruby】じゃんけんプログラム

※このページは過去に自分がRubyの勉強をしたときの学習ログです。誰かの参考になれば幸いです。
目次
1〜3の数字を入力するとコンピューターとじゃんけんできるプログラムを作ってみた
いきなり完成コード
puts "数字を入力してください。" def janken puts "1:グー" puts "2:パー" puts "3:チョキ" player_hand = gets.to_i partner_hand = rand(1..3) if player_hand < 1 || player_hand > 3 puts "正しい数字を入力してください" return janken end jankens_program = (player_hand - partner_hand + 3) % 3 if jankens_program == 0 puts "あいこで" return true elsif jankens_program == 2 puts "あなたの勝ちです" return false else puts "あなたの負けです" return false end end next_game = true while next_game next_game = janken end
実行結果 → 数字を入力してください。
1:グー
2:パー
3:チョキ
1
あいこで
1:グー
2:パー
3:チョキ
5
正しい数字を入力してください
1:グー
2:パー
3:チョキ
2
あなたの負けです
解説(我流です)
こちらも作り方が色々あると思うが、まずじゃんけんの勝ち負けを判断するのにあたってグー=0、チョキ=1、パー=2として(自分の手 - 相手の手 + 3)% 3
の計算をする。
言葉だとわかりにくいので、以下の図参照。
自分が勝つ時
自分 | 相手 | 差 | 差+3 | (差+3)%3 |
0 | 1 | -1 | 2 | 2 |
1 | 2 | -1 | 2 | 2 |
2 | 0 | 2 | 5 | 2 |
自分が負ける時
自分 | 相手 | 差 | 差+3 | (差+3)%3 |
0 | 2 | -2 | 1 | 1 |
1 | 0 | 1 | 4 | 1 |
2 | 1 | 1 | 4 | 1 |
引き分けの時
自分 | 相手 | 差 | 差+3 | (差+3)%3 |
0 | 0 | 0 | 3 | 0 |
1 | 1 | 0 | 3 | 0 |
2 | 2 | 0 | 3 | 0 |
つまり、2 → 勝ち
0 → あいこ
1 → 負け
と言う結果になり、上記の勝ち負けの計算式を(player_hand - partner_hand + 3) % 3
とし、jankens_program
と言う変数に代入する。
※その他ランダムな数を割り出すrand
については当初rand(3)
としていたが、
これだと0,1,2の範囲になってしまうので、rand(1..3)
へ修正した。

本日は以上となります。
最後までお読みくださりありがとうございました。
Follow @punibastet