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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

2回答

2733閲覧

hogeを変数に解決できません。

Rivermouth

総合スコア19

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/05/15 06:49

Javaで簡単なゲームを作成しているのですが、わからないことがありますので、質問させて頂きます。

勇者が敵を攻撃するというメソッド<attackEnemy>
・自信の攻撃力の分だけ相手のHPを減らす。
・相手のHPを表示する
という二つの分を書いて、実行したところ

Exception in thread "main" java.lang.Error: Unresolved compilation problems:

Monster を変数に解決できません
Monster を変数に解決できません
at Hero.attackEnemy(Hero.java:32)
at Game.main(Game.java:17)

と例外が出てしまいました。

おそらくスコープの問題だと思うのですが、調べても分かりにくい表現ばかりで、よく分かりませんでしたので、こちらに質問させていただきました。

クラスはGameクラス、Heroクラス、Enemyクラスの3つです。

java

1public class Game { 2 public static void main(String[] args) { 3 Hero Yusya = new Hero(100, 15, 5, 15); 4 Enemy Monster = new Enemy(100, 10, 10, 12); 5 6 System.out.println("[初期値]"); 7 System.out.println("HiroのHPは" + Yusya.getHP() + "です。"); 8 System.out.println("Hiroの攻撃力は" + Yusya.getAttackPoint() + "です。"); 9 System.out.println("Hiroの防御力は" + Yusya.getDefendPoint() + "です。"); 10 System.out.println("Hiroのすばやさは" + Yusya.getSpeed() + "です。"); 11 System.out.println("MonsterのHPは" + Monster.getHP() + "です。"); 12 System.out.println("Monsterの攻撃力は" + Monster.getAttackPoint() + "です。"); 13 System.out.println("Monsterの防御力は" + Monster.getDefendPoint() + "です。"); 14 System.out.println("Monsterのすばやさは" + Monster.getSpeed() + "です。"); 15 16 Yusya.attackEnemy(); 17 18 } 19}

java

1 2public class Hero { 3 private int HP; 4 private int attackPoint; 5 private int defendPoint; 6 private int speed; 7 8 Hero(int hp, int ap, int dp, int sp){ 9 HP = hp; 10 attackPoint = ap; 11 defendPoint = dp; 12 speed = sp; 13 } 14 public int getHP() { 15 return HP; 16 } 17 18 public int getAttackPoint() { 19 return attackPoint; 20 } 21 22 public int getDefendPoint() { 23 return defendPoint; 24 } 25 26 public int getSpeed() { 27 return speed; 28 } 29 30 public void attackEnemy() { 31 System.out.println("勇者の攻撃:敵に" + this.attackPoint + "のダメージ"); 32 Monster.HP -= this.attackPoint; 33 System.out.println(Monster.HP); 34 35 } 36 public void heal() { 37 System.out.println("勇者の回復:勇者は50ptの体力を回復した"); 38 this.HP += 50; 39 if(this.HP > 100) this.HP = 100; 40 } 41 42 public void run() { 43 System.out.println("勇者は逃げ出した。"); 44 } 45}

java

1public class Enemy { 2 private int HP; 3 private int attackPoint; 4 private int defendPoint; 5 private int speed; 6 7 Enemy(int hp, int ap, int dp, int sp){ 8 HP = hp; 9 attackPoint = ap; 10 defendPoint = dp; 11 speed = sp; 12 } 13 14 public int getHP() { 15 return HP; 16 } 17 18 public int getAttackPoint() { 19 return attackPoint; 20 } 21 22 public int getDefendPoint() { 23 return defendPoint; 24 } 25 26 public int getSpeed() { 27 return speed; 28 } 29 30 public void attackEnemy() { 31 System.out.println("敵の攻撃:敵に" + this.attackPoint + "のダメージ"); 32 } 33 public void heal() { 34 System.out.println("敵の回復:敵は50ptの体力を回復した"); 35 this.HP += 50; 36 if(this.HP > 100) this.HP = 100; 37 } 38 39} 40

どのように対処すれば良いのか教えていただきたいです。

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

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

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

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

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

m.ts10806

2020/05/15 06:53

>調べても分かりにくい表現ばかりで 本当に分かりにくい表現なのか、質問者自身の理解不足によるものなのか判断できるよう出典明示してください。 でないと、調べて出てくるような表現しかしようがありません。 全部説明してもらおうと言う魂胆ならやめてください。自身の理解度を示すのが先です。 アドバイスの確度が定まりません
guest

回答2

0

Yusya.attackEnemy()に引数としてMonsterを与えなければ、
Yusya.attackEnemy()からはMonsterを参照できないと思いますよ。

投稿2020/05/15 07:05

mattrick

総合スコア135

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

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

Rivermouth

2020/05/15 07:47

Yusya.attackEnemy(Monster); とすると、Hero のメソッド attackEnemy() は引数 (Enemy) に適用できま せん。と表示されてしまいます。。
mattrick

2020/05/15 07:55

それはattackEnemyメソッドに引数を設定していないからですね。 attackEnemyの定義を public void attackEnemy(Enemy Monster) に変更する必要があります。
momon-ga

2020/05/15 11:49

誰が.attackEnemy(誰を)って、ならないとYusyaは誰を攻撃していいか、わからないですね。 何かの本を参考にしてるなら、それを提示してくれた方がよいのと その本のサポートページがあるなら、そこで質問した方がいいですね。
Rivermouth

2020/05/16 07:39

みなさん回答ありがとうございます。 なぜ、public void attackEnemy(Enemy Monster)とすると問題なく実行できるのでしょうか? arrackEnemyメソッドの引数をEnemyクラスのMonsterとすると内部では何が起こっているのでしょうか?
mattrick

2020/05/16 17:46

一度、関数と引数について調べてみたらいいと思います。
guest

0

次の変更で思い通りに動きますか?

Game.java Yusya.attackEnemy(); を Yusya.attackEnemy(Monster); に変更。 Hero.java public void attackEnemy() { を public void attackEnemy(Enemy Monster) { に。 Monster.HP -= this.attackPoint; を Monster.setHP(Monster.getHP() - this.attackPoint); に。 System.out.println(Monster.HP); を System.out.println(Monster.getHP()); に。 Enemy.java public void setHP(int point) { HP = point; } を追加。

これがどういう意味かよく考えてみてください。

投稿2020/05/16 18:31

kazuma-s

総合スコア8224

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問