LoginSignup
1
1

More than 3 years have passed since last update.

Rubyでじゃんけん

Last updated at Posted at 2019-12-24

Rubyにてじゃんけん (Rock-Paper-Scissors)

1.じゃんけんの構造化

そもそもじゃんけんとは??
グー、チョキ、パーのどれかを互いに選択し、勝敗を決めるものである。
今回はプレイヤーとプログラムで戦う。
グー Rock
チョキ Paper
パー Scissors
で対戦。
(プログラムでは、乱数を返す、randが活躍するが、それは後々)

2.playerの手選択

入力による代入

p 'rock-paper-scissors'
player=gets

↑rock、paper、scissorsのどれかを選んでもらう
プレイヤーがスペルミスしたときの対応も重要になる

3.programの手選択

乱数で決定する。

program_hand=rand(3)

↑program_handは0、1、2を乱数で返すことになる。

4.整理

人間にとっては、Rock-Paper-Scissorsという文字表記が分かりやすいが、乱数を0、1、2でやったように、プログラム(機械)からすると、文字よりも数字が分かりやすい。

よって、じゃんけんをしている2人(player、program)において、手を数字と文字であらわしておく

0 グー Rock
1 チョキ Paper
2 パー Scissors

if program_hand==0
    program="rock"
elsif program_hand==1
    program="paper"
elsif program_hand==2
    program="scissors"
end
if player=="rock"
    player_hand=0
elsif player=="paper"
    player_hand=1
elsif player=="scissors" 
    player_hand=2
end

5.じゃんけんの勝敗をつける

ここで、条件分岐が登場
if文を用いる

if player_hand==program_hand
    p 'draw'
elsif ((player_hand==0 and program_hand==2) or (player_hand==1 and program_hand==0) or (player_hand==2 or program_hand==0))and a==1
    p 'you win'
elsif 
    p 'you lose'
end

条件の式を書く上で、論理が連続で出てくることがある。(andやor)
論理の優位性などという話があるらしいが、難しい。
先に計算したい方をかっこでくくっちゃうのが早い、簡単、わかりやすい。

6.スペルミスに対する対応

rock、paper、scissorsのどれかを選んでもらうことになってるが、
それ以外の入力には、いかにして対応するのか??

one more please
と表示させることに

aという変数を登場させる。初期値0
rock、paper、scissorsのどれかが記入されたときのみa=1を代入。

aをつかって判断する

↓完成

p 'rock-paper-scissors'
player=gets


a=0

if player=="rock"
    player_hand=0
    a=1
elsif player=="paper"
    player_hand=1
    a=1
elsif player=="scissors" 
    player_hand=2
    a=1
end

program_hand=rand(3)


if program_hand==0
    program="rock"
elsif program_hand==1
    program="paper"
elsif program_hand==2
    program="scissors"
end



if a==0
    p 'one more please'
elsif player_hand==program_hand
    p 'draw'
elsif ((player_hand==0 and program_hand==2) or (player_hand==1 and program_hand==0) or (player_hand==2 or program_hand==0))and a==1
    p 'you win'
elsif 
    p 'you lose'
end

p "player",player,"program",program
1
1
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
1
1