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

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

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

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

Q&A

1回答

268閲覧

結果が同じになってしまうので分けれるようにしたい

diego

総合スコア4

Ruby

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

0グッド

0クリップ

投稿2022/09/15 06:48

ジャンケンで自分負け、相手勝ちの場合にも勝ちの判定になってしまいます。
結果を分けるようにするにはどうやって改善したらよろしいでしょうか?

ruby

1コード 2```puts "あっち向いてホイを始めます" 3puts "ジャンケン・・・" 4 5class JankenAcchimuite 6 def initialize (draw ="あいこ",lose ="負け",win ="勝ち") 7 @draw = draw 8 @lose = lose 9 @win = win 10 end 11 12 def janken 13 #実装する 14 puts "[0]グー,[1]チョキ,[2]パー" 15 player_hand = gets.to_i 16 if player_hand < 0 || 2 < player_hand then 17 puts "無効な値です" 18 end 19 program_hand = rand(3) 20 21 jankens = ["グー","チョキ","パー"] 22 puts "あなたの手:#{jankens[player_hand]},相手の手:#{jankens[program_hand]}" 23 24 if player_hand == program_hand 25 puts "#{@draw}" 26 return true 27 elsif (player_hand == 0 && program_hand == 2 ) ||( player_hand == 1 && program_hand == 0 )||( player_hand == 2 && program_hand == 1) 28 puts "#{@lose}" 29 return false 30 elsif (player_hand == 0 && program_hand == 1 ) ||( player_hand == 1 && program_hand == 2 )||( player_hand == 2 && program_hand == 0) 31 puts "#{@win}" 32 return false 33 end 34 end 35 36 def acchimuite_hoi 37 puts "0(上)1(下)2(左)3(右)" 38 player_direction = gets.to_i 39 program_direction = rand(4) 40 directions = ["上","下","左","右"] 41 puts "あなた:#{directions[player_direction]} 相手:#{directions[program_direction]}" 42 43 if player_direction == program_direction 44 if @win 45 puts "#{@win}" 46 return false 47 elsif @lose 48 puts "#{@lose}" 49 end 50 return false 51 end 52 if player_direction != program_direction 53 puts "#{@draw}" 54 end 55 return true 56 end 57 58 59while 60 result1 = JankenAcchimuite.new("あいこ","あっち向いて","あっち向いて") 61 next_game = true 62 while next_game 63 next_game = result1.janken 64 end 65 result2 = JankenAcchimuite.new("もう一度ジャンケンを行います","負けました","勝ちました") 66 if result2.acchimuite_hoi == false 67 if @win 68 puts "勝ちました" 69 elsif @lose 70 puts"負けました" 71 end 72 break 73 end 74end

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

じゃんけんにどっちが勝ったかという情報を、向き一致時に使っていないからですね。
@winの意味を途中で忘れてしまっているようです。思い出しましょう。

また、class JankenAcchimuiteを閉じるendが抜けているようです。

投稿2022/09/15 08:43

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

diego

2022/09/16 08:46

回答ありがとうございます。 if result2.acchimuite_hoi == false こちらの文のことでしょうか? if result2.acchimuite_hoi == @win,@lose にしてみたのですが動かなかったです。 どうすれば情報を持たせられますか?
otn

2022/09/16 13:09

自分で考えて書いたコードでは無いのでしょうか?
diego

2022/09/16 16:05

要所要所コピペしながら作ったので理解が浅いと思います…
otn

2022/09/16 17:16

なるほど。 ・じゃんけんでどっちが勝ったかはどこで判断しているか? ・判断した結果(どっちが買ったか)は、変数に保存しているか?保存していないならする ・じゃんけんで勝った結果を知る必要があるのはどこか? ・そこで先ほど保存した、じゃんけん結果を参照する という方針で。 あと、それぞれの変数に何が入っているか(何のために存在する変数か)を把握できていないようなので、 変数一覧表(変数名とそこに格納する値の意味=存在目的)を書きましょう。
diego

2022/09/17 10:13 編集

変数に保存というのが分からず、検索してみても引っかかりませんでした。勝ち負けの区別をどうつければいいのでしょうか?  返り値を使うべきですか?
otn

2022/09/17 10:46 編集

案1: じゃんけんメソッドの返り値は、今は「アイコかどうか」の2値だが、これを人間勝ち、人間負け、アイコ の3種類の値を返すようにして、メイン側でそれを変数に代入。 あっち向いてメソッドに、引数を追加して、それを渡して、あっち向いてメソッドでは、向きが一致した場合に、その引数を見て勝ちが負けか表示する。 案2: 返り値や引数を使わず、勝ち負け保存用インスタンス変数にじゃんけんメソッドで代入して、あっちむいてメソッドでそれを参照する。 (インスタンス変数を途中で書き換えることを忌避する考え方も有り)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問