#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