Newer
Older
Ruby / jyanken.rb
@TOGASHI Yuto TOGASHI Yuto on 2 Oct 2021 2 KB 2021-10-02 07:26:36
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

def jyanken
  te = ["グー", "チョキ", "パー"]
  te[rand(te.length)]    #te[rand(3)]となるためjyankenメソッドは、te[0]のグー, te[1]のチョキ, te[2]のパーのいずれかを返す
end

def taiketsu(x, y)    #メソッドを定義してプログラムを短く
  printf("あなたが出したのは%sです。\n", x)
  sleep(1)
  printf("相手が出したのは%sです。\n", y)
  sleep(1)
end

while true    #プログラム全体のループ
  puts "じゃんけんスタート!  グー または チョキ または パー を入力してください。"    #絵文字は環境で異なるため避けた方がよい

  while true    #ジャンケンする部分のループ
    jibun = gets.chomp
    aite = jyanken      #jyankenと書く度に乱数が発生するため、aiteに代入して値を固定

    if jibun == "グー" && aite == "チョキ" || jibun == "チョキ" && aite == "パー" || jibun == "パー" && aite == "グー"
      taiketsu(jibun, aite)         #taiketsuメソッドの仮引数xにjibunが、仮引数yにaiteが代入されて出力
      puts "あなたの勝ちです!!"
      break
    elsif jibun == "グー" && aite == "パー" || jibun == "チョキ" && aite == "グー" || jibun == "パー" && aite == "チョキ"
      taiketsu(jibun, aite)
      puts "あなたの負けです"
      break
    elsif jibun == aite
      taiketsu(jibun, aite)
      puts "あいこで..."
      redo
    else
      puts "グー, チョキ, パーで答えてください"    #誤入力が代入された文を出力しないよう、ここにはtaiketsuメソッドは書かない
      redo
    end
  end

  puts "もう一度やりますか?"    #「やる か やらない で回答」という注意書きでの限定も可
  mouitido = gets.chomp

  if mouitido == "やる" || mouitido == "はい" || mouitido == "YES"    #||(または)で条件を増やせば、想定される様々な回答に適応可能
    redo
  else                                                                #少し複雑になるため、ここでは「やる」「はい」「YES」以外はbreak
    break
  end
end