前提・実現したいこと
Javaで下記を実現するためのプログラムを作成しています。
1.Scannerで主人公と敵に名前を付ける※仮に主人公を『勇者』敵を『ゴブリン』とする
2.1で取得した名前を基に主人公と敵でじゃんけんをする(グー、チョキ、パーのコマンドを入力)
3.じゃんけんで勝った方が負けた方に1のダメージを与える(それぞれのHPは20)
4.主人公がじゃんけんで勝った場合は「敵の名前に1のダメージ」と表示する
5.主人公がじゃんけんに負けた場合は「主人公の名前に1のダメージ」と表示する
発生している問題・エラーメッセージ
JAVAファイルAでScanner を用いて名前を入力するメソッドで『勇者』と『ゴブリン』という名前を付けたとします。 その値をJAVAファイルBの戦闘処理をするファイルでも取得して勇者の勝利!ゴブリンに1のダメージ と表示するようにしたいのですが、うまくいかずに nullに1のダメージ となってしまいます。 おそらく設定したフィールド値にScannerで取得した値が代入できていないのが原因では? と思っています。
該当のソースコード
--メインメソッド import java.util.Scanner; public class Sample { public static void main(String[] args) { BattleF suteitasu = new BattleF(); named namae = new named(); namae.input_youname();//あなたの名前を入力 // 入力を促すメッセージ do{ System.out.print("コマンド? 0:グー 1:チョキ 2:パー"); java.util.Scanner input = new java.util.Scanner(System.in); int hand = input.nextInt(); if( hand == 9 ) { System.out.println("コマンド9検出:強制終了しました"); break; } java.util.Random rand = new java.util.Random(); int com = rand.nextInt(3); // ジャンケンによる勝敗の条件分岐 if( hand == com ) { System.out.println("引き分け"); } if( com == 0 ) { if( hand == 1 ) { suteitasu.dameizi();//あなたへのダメージ処理 } if( hand == 2 ) { suteitasu. ataltuku();//敵へのダメージ処理 } } if(com == 1 ) { if( hand == 0 ) { suteitasu.ataltuku();//敵へのダメージ処理 } if( hand == 2 ) { suteitasu.dameizi();//あなたへのダメージ処理 } } if( com == 2 ) { if( hand == 0 ) { suteitasu.dameizi();//あなたへのダメージ処理 } if( hand == 1 ) { suteitasu. ataltuku();//敵へのダメージ処理 } } }while( true ); } }
--戦闘処理メソッド class BattleF{ /*フィールド値*/ int playr_hp = 20; int enemi_hp = 20; named namae = new named(); void ataltuku(){ System.out.print(namae.input_enemi+"1のダメージ"); enemi_hp--; System.out.print(namae.input_enemi+enemi_hp); System.out.print(namae.input_name+"HP"+playr_hp); } void dameizi(){ System.out.print(namae.input_name+"1のダメージ"); playr_hp--; System.out.print(namae.input_name+"HP"+playr_hp); System.out.print(namae.input_enemi+"HP"+enemi_hp); } }
--名前入力メソッド import java.util.Scanner; public class named { /*フィールド値*/ String input_name; String input_enemi; void input_youname( ){ Scanner name = new Scanner(System.in); // 入力を促すメッセージ System.out.print("名前を入力してください > "); //入力された内容をインスタンスから取得 String input_name = name.nextLine(); //入力された内容を画面に表示 System.out.println("あなたの名前は"+input_name + "です"); Scanner enemi = new Scanner(System.in); // 入力を促すメッセージ System.out.print("敵の名前を入力してください "); //入力された内容をインスタンスから取得 String input_enemi = enemi.nextLine(); //入力された内容を画面に表示 System.out.println(input_enemi + "が入力されました"); System.out.println("敵の名前は"+input_enemi); System.out.println("あなたの名前は"+input_name); } }
試したこと
様々なサイトを見て動かそうと試しましたがどうしてもScannerで取得した勇者やゴブリンといった値を他のファイルでも使えるようにならずにnullになってしまいます。
20時間ほど試行錯誤しましたが無理でした。
補足情報(FW/ツールのバージョンなど)
実際文字での説明では理解が難しいので、nullとならずに正常にダメージ処理のセリフが表示されるようにするにはどんなコードに変更すればよいのでしょうか?
コードを教えてください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/08 02:16
2020/12/08 03:00