Help us understand the problem. What is going on with this article?

Rubyでじゃんけん

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
ktpnobu
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした