Rubyでじゃんけんしましょう

Rubyでじゃんけんプログラムを書いてみる。
パー:0
チョキ:1
グー:2
として、プレーヤーにコンソールに数字を入力してもらう。

 1  puts("paper=0, scisors=1, stone=2 ?")
 2  choice = gets()
 3  player = Integer(choice)
 4  computer = rand(3)
 5  puts("computer: #{computer}")
 6  diff = player - computer
 7  if diff == 0
 8    puts("even")
 9  elsif diff == 1 || diff == -2
10    puts("win")
11  else
12    puts("lose")
13  end

さて、これはプレーヤーとPCの出した手の差をとっている(line6 diff = player - computer)
乱数はrand(n)を使っている。0〜n-1までの整数を返す関数です。


私が読んでいる本によると、他にも2つ方法があります。
ひとつは全ての条件を書きだす方法。
diffを3の剰余で計算する方法です。
この辺の書き方は人の好みによるのかな・・・。私は上に書いた記述のほうが好きです。でも、数字に例えられるのは読みにくい。
なので、ちょっと手を加えました。

  1 PAPER = 0 
  2 SCISORS = 1 
  3 STONE = 2 
  4 puts("paper=0, scisors=1, stone=2 ?") 
  5 choice = gets() 
  6 player = Integer(choice) 
  7 computer = rand(3) 
  8 puts("computer: #{computer}") 
  9 if player  == computer 
 10   puts("even") 
 11 else 
 12   if player == PAPER && computer == STONE || 
 13      player == SCISORS && computer == PAPER || 
 14      player == STONE && computer == SCISORS 
 15     puts("win") 
 16   else 
 17     puts("lose") 
 18   end 
 19 end 

これは読みやすくていい。line12の条件が長くて嫌だけど、定数に直したことで解りやすくなっているからです。
プログラムを短く書くことは大事だけど、読みやすいように書く工夫も大事ですね