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

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

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

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

Q&A

2回答

307閲覧

Ruby じゃんけん+あっち向いてホイアプリでアプリケーションが始まらない件

aramocya

総合スコア1

Ruby

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

0グッド

0クリップ

投稿2024/06/15 01:08

実現したいこと

じゃんけんで自分が出す手を画面入力で選ぶことができる
相手プレーヤーが出す手をランダムで出力させる
じゃんけんで勝った側があっち向いてホイです指を差す方向を決める
じゃんけんで負けた側があっち向いてホイで顔を向ける方向を決める
勝負がついた場合はどちらが勝者かわかるように文字列などで出力する
あっち向いてホイまでの勝敗がついた際はプログラムを終了する(勝敗がつくまでは処理を繰り返す)
指定された数字以外の入力があった場合は「0~3の数字を入力してください」や「不正な値です」等のメッセージを表示して再入力を促す処理ができる

発生している問題・分からないこと

あっち向いてほいアプリを開発中ですが、ターミナルで指定のファイルを打ち込んでも、アプリが起動しない状況になります。

エラーメッセージ

error

1そもそも表示されない

該当のソースコード

equire "csv" puts "あっち向いてホイゲームを始めます" $case_pattern = nil class Janken def initialize() #繰り返し def initialize(draw = "あいこ", lose ="負け", win ="勝ち") @draw = draw @lose = lose @win = win end puts "最初はグー、じゃんけん・・・" #出力 puts "グーなら0、チョキなら1、パーなら2、を入力してください。"#定義 @input = gets.chomp.to_i while @input > 2 puts "入力が間違っています。" puts "グーなら0、チョキなら1、パーなら2、を入力してください。" @input = gets.chomp.to_i end end def judgement hand_type = ["グー","チョキ","パー"] my_hand = @input pc_hand = rand(0..2) puts "あなたは#{hand_type[my_hand]}です。" puts "コンピューターは#{hand_type[pc_hand]}です。" if my_hand == pc_hand puts "あいこで" elsif (my_hand == 0 && pc_hand == 1) || (my_hand == 1 && pc_hand == 2) || (my_hand == 2 && pc_hand == 0) puts "あっち向いて向いて" $case_pattern = "win" attimuite_hoi elsif (my_hand == 0 && pc_hand == 2) || (my_hand == 1 && pc_hand == 0) || (my_hand == 2 && pc_hand == 1) puts "あっち向いて" $case_pattern = "lose" attimuite_hoi end end def attimuite_hoi puts "0(上)1(下)2(左)3(右)" player = gets.to_i program =rand(3) directions = ["上","下","左","右"] puts "ほいっ" puts "あなたは#{directions[player]}を出しました" puts "相手は#{directions[program]}を出しました" if $case_pattern == "win" case when player == program   puts"あなたの勝ちです" exit return false else puts"引き分けです" janken return true end end if $case_pattern == "lose" case when player == program puts"あなたの負けです" return false else puts"引き分けです" janken return true end end end next_game = true while next_game next_game = Janken end end

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

同様のエラーを検索し、コードを打ち込む等試してみましたが、解決に至りませんでした。

補足

特になし

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

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

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

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

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

guest

回答2

0

そもそも表示されない

Janken クラスの定義内に while next_game 〜 end ブロックが入ってしまっているのと、next_game = Janken としているので無限ループになっています。(Janken クラスオブジェクトを next_game 変数にバインドしているだけなので initialize メソッドは実行されません)

ruby

1class Janken 2 : 3 4 def attimuite_hoi 5 : 6 end 7 8 ## 以下の while ループがクラス定義内に入っている 9 next_game = true 10 while next_game 11 next_game = Janken 12 end 13end

また、judgement メソッドが呼び出されていません。最小限の変更を加えると以下の様になります。

ruby

1require "csv" 2 3class Janken 4 def initialize 5 puts "最初はグー、じゃんけん・・・" #出力 6 puts "グーなら0、チョキなら1、パーなら2、を入力してください。"#定義 7 @input = gets.chomp.to_i 8 while @input > 2 9 puts "入力が間違っています。" 10 puts "グーなら0、チョキなら1、パーなら2、を入力してください。" 11 @input = gets.chomp.to_i 12 end 13 judgement 14 end 15 16 def judgement 17 hand_type = ["グー","チョキ","パー"] 18 my_hand = @input 19 pc_hand = rand(0..2) 20 21 puts "あなたは#{hand_type[my_hand]}です。" 22 puts "コンピューターは#{hand_type[pc_hand]}です。" 23 24 if my_hand == pc_hand 25 puts "あいこで" 26 elsif (my_hand == 0 && pc_hand == 1) || (my_hand == 1 && pc_hand == 2) || (my_hand == 2 && pc_hand == 0) 27 puts "あっち向いて向いて" 28 $case_pattern = "win" 29 attimuite_hoi 30 elsif (my_hand == 0 && pc_hand == 2) || (my_hand == 1 && pc_hand == 0) || (my_hand == 2 && pc_hand == 1) 31 puts "あっち向いて" 32 $case_pattern = "lose" 33 attimuite_hoi 34 end 35 end 36 37 def attimuite_hoi 38 puts "0(上)1(下)2(左)3(右)" 39 player = gets.to_i 40 program =rand(3) 41 directions = ["上","下","左","右"] 42 43 puts "ほいっ" 44 puts "あなたは#{directions[player]}を出しました" 45 puts "相手は#{directions[program]}を出しました" 46 47 if $case_pattern == "win" 48 case 49 when player == program 50 puts"あなたの勝ちです" 51 exit 52 else 53 puts"引き分けです" 54 return true 55 end 56 end 57 58 if $case_pattern == "lose" 59 case 60 when player == program 61 puts"あなたの負けです" 62 return false 63 else 64 puts"引き分けです" 65 return true 66 end 67 end 68 end 69end 70 71## main block 72if __FILE__ == $0 73 puts "あっち向いてホイゲームを始めます" 74 $case_pattern = nil 75 76 while Janken.new; end 77end

投稿2024/06/15 04:36

melian

総合スコア20255

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

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

aramocya

2024/06/15 11:03

回答ありがとうございます。試してみましたが解決できませんでした。 あっち向いてホイゲームを始めます 最初はグー、じゃんけん・・・ グーなら0、チョキなら1、パーなら2、を入力してください。 までは出ますが、そのは指定の数字以外も入力できてしまい、またじゃんけんのゲームが開始されませんでした。 この場合どの辺りに原因がありそうでしょうか?
melian

2024/06/15 11:12

手元の環境(ruby 3.2.3)で実行しますと以下の様にじゃんけんが進んでいきます。 あっち向いてホイゲームを始めます 最初はグー、じゃんけん・・・ グーなら0、チョキなら1、パーなら2、を入力してください。 3 # 3 を入力 入力が間違っています。 グーなら0、チョキなら1、パーなら2、を入力してください。 2 # 2 を入力 あなたはパーです。 コンピューターはグーです。 あっち向いて向いて 0(上)1(下)2(左)3(右) 1 # 1 を入力 ほいっ あなたは下を出しました 相手は左を出しました 引き分けです 最初はグー、じゃんけん・・・ グーなら0、チョキなら1、パーなら2、を入力してください。
guest

0

class Janken を定義しているようですが、コード内でインスタンスの生成を行ってないようです。 new を呼び出すなどしてインスタンスの生成が必要そうです。

投稿2024/06/15 01:15

Eggpan

総合スコア3190

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

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

aramocya

2024/06/15 12:42

バージョンが古いものでしたので、おそらく新しいバージョンにしたら問題かと思われます。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.40%

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

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

質問する

関連した質問