質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

受付中

Ruby ジャンケンゲーム

tsumitaryo
tsumitaryo

総合スコア10

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

2回答

0グッド

0クリップ

2404閲覧

投稿2019/02/15 00:15

Rubyでジャンケンゲームを作っています。

みなさまお疲れさまです。
ジャンケンゲームについての質問になります。

・「君の手は:グー,僕の手は:パー」は問題なく出ます。
しかし、プレイヤー勝ちの場合に「"つよいね!君の勝ちだー"」が出ない状態です。

・「あいこ」の場合にもう一度「あいこで!」を出すことは成功しましたが、2回目の「あいこ」の際の勝敗結果が出なくて迷っています。

また、elseif の条件が足りてないようなのですが、何が足らないのかわからない状態です。

アドバイス頂けると嬉しいです。
よろしくお願いします!

Ruby

1コード

自分の手を出す

相手の手をランダムで出す

勝敗の判定

結果の表示

あいこなら繰り返し

puts "最初はグー、じゃんけん..."
puts "[0]グー"
puts "[1]チョキ"
puts "[2]パー"

player = gets.to_i
computer = rand(0..2)
number = (0..2)
if number ==0
puts "グー"
elsif number ==1
puts "チョキ"
else number ==2
puts "パー"

janken = ["グー","チョキ","パー"]
puts "君の手は:#{janken[player]},僕の手は:#{janken[computer]}"

#勝ち player[0]=computer[1],player[1]=computer[2],player[2]=computer[0]
#あいこ player=computer
#負け 以外
if player == computer
puts "あいこで"
puts "[0]グー"
puts "[1]チョキ"
puts "[2]パー"
player = gets.to_i
computer = rand(0..2)

elsif player == computer
puts "あいこで"
puts "[0]グー"
puts "[1]チョキ"
puts "[2]パー"
player = gets.to_i
computer = rand(0..2)

elsif (player == 0 && computer == 1)||(player == 1 && computer == 2||player == 2 && computer == 0)
player[0]=computer[1],player[1]=computer[2],player[2]=computer[0]
puts "つよいね!君の勝ちだー"

else
puts "イェーイ!君の負けだー"

end
end

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

otn

2019/02/15 00:24

プログラムを ```Ruby と ``` という行で囲ってください。
stdio

2019/02/15 00:38

単純に処理が戻ってないような雰囲気ですけど... なにかフラグを落とし忘れているとか、そんな簡単な不具合だと思います。 もう一度しっかり見直せば良いですよ。
madoka9393

2019/02/15 01:22

「Ruby じゃんけん」で(ググるは言わずもがな)teratail内を検索するだけでも、 参考になるコードがゴロゴロ見つかるので一度そちらを参考にしてみては。
tsumitaryo

2019/02/17 05:20

みなさま ご回答ありがとうございました。 もう一度確認するとともに、teratai内の情報も参考にさせて頂きます!

回答2

1

色んなものに名前を与えたら、ロジックが理解しやすくなるかもしれません。Intで判断するのは分かりづらいですね。

ruby

1class Janken 2 def initialize 3 @options = { 4 0 => 'グー', 5 1 => 'チョキ', 6 2 => 'パー' 7 } 8 @win_patterns = { 9 'グー' => 'チョキ', 10 'チョキ' => 'パー', 11 'パー' => 'グー' 12 } 13 end 14 15 def start 16 instructions 17 play 18 end 19 20 def instructions 21 puts '最初はグー、じゃんけん...' 22 @options.each { |name, key| puts " - #{key} => #{name}" } 23 end 24 25 def play 26 player = @options[gets.to_i] 27 computer = @options[@options.keys.sample] 28 29 puts "あなたは#{player}" 30 puts "相手は#{computer}" 31 32 compare(player, computer) 33 end 34 35 def compare(player, computer) 36 if player == computer 37 draw 38 return play 39 end 40 41 @win_patterns[player] == computer ? win : lose 42 end 43 44 def draw 45 puts 'あいこでしょ' 46 end 47 48 def win 49 puts 'あなたの勝ちです' 50 end 51 52 def lose 53 puts 'あなたの負けです' 54 end 55end 56 57j = Janken.new 58j.start

投稿2019/02/15 01:48

Bremenkanp

総合スコア205

gouf👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

条件式をよく見てください。

ruby

1(player == 0 && computer == 1)||(player == 1 && computer == 2||player == 2 && computer == 0)

見やすくするためにスペースを開けましょう。

ruby

1(player == 0 && computer == 1) || (player == 1 && computer == 2 || player == 2 && computer == 0)

何がおかしいかわかりましたか?

投稿2019/02/15 01:21

mather

総合スコア6737

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

stdio

2019/02/15 02:10

ああ、カッコが足りない!!

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。