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

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

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

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

Q&A

解決済

3回答

4763閲覧

攻撃メソッドの引数で呼んだオブジェクト

samhi

総合スコア11

Java

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

1グッド

0クリップ

投稿2019/05/14 14:27

現在Java言語でゲームを作っています。
2体のモンスターを作り、順番に攻撃させ、先に0にしたほうが勝ちという内容です。

モンスター2体にはそれぞれ名前、HP、引数でモンスターを呼びだしてHPをランダムにダメージを与えるAttckメソッドを与え、
交互にAttackメソッドを実行し、お互いのHPどちらか0になるまで攻撃を続けると言った内容で以下のプログラムを書きました。

import

1 2 3 4public class Monster { 5 6 private String name; 7 8 private int hp; 9 10 private Monster() { 11 12 } 13 14 15 private Monster(String name, int hp) { 16 17 this.name = name; 18 this.hp = hp; 19 20 } 21 22 23 public String getName() { 24 return name; 25 } 26 27 28 public int getHp() { 29 return hp; 30 } 31 32 33 public void setName(String name) { 34 this.name = name; 35 } 36 37 38 public void setHp(int hp) { 39 this.hp = hp; 40 } 41 42 public void Attack(Monster m) { //対象のモンスターを(オブジェクト)のHPをランダムに減らす 43 44 System.out.println(this.name+"に攻撃!"); 45 46 47 48 Random damage = new Random(); 49 50 int random= damage.nextInt(10)+5; 51 52 53 this.hp = this.hp - random; 54 55 if (this.hp < 0){ 56 this.hp = 0; 57 } 58 59 60 System.out.println(this.name + "に" +random + "ダメージ。残りHPは" + hp + "です"); 61 62 63 64 65 66 67 68 } 69 70 71 public static void main(String[]args) { 72 73 74 System.out.println("バトルスタート"); 75 76 Monster m1 = new Monster("スライム",100); 77 78 Monster m2 = new Monster("ゴースト",100); 79 80 81 82 83 84 85 86 for (;;) { 87 88 89 90 91 m1.Attack(m2); 92 93 94 if (m2.hp <= 0) { 95 System.out.println("終了!スライムの勝利!"); 96 break; 97 98 } 99 100 101 m2.Attack(m1); 102 103 if(m1.hp <= 0) { 104 System.out.println("終了!ゴーストの勝利!"); 105 break; 106 } 107 108 } 109 110 } 111 112 113} 114 115コード

しかし、この内容で実行したところ。
スライムに攻撃! 
スライムに●ダメージ!残りHPは●です。

ゴーストに攻撃!
ゴーストに●ダメージ!残りHPは●です。

引数で呼んだモンスターを攻撃するようにするにはどうすればよいのでしょうか?
cafeore_nmti👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

Attackという関数が、引数にとったMonsterクラスのオブジェクトに対し攻撃するという意味なら、
攻撃の対象がthisになっているのが間違いです。

Java

1System.out.println(this.name+"に攻撃!");

thisは自分なので、自分への攻撃になります。
引数で取っている m に攻撃するようにしましょう。

Java

1System.out.println(m.getName() + "に攻撃!");

以下同様です。

あと、この件と直接関係ないですが、Monsterクラスの中でmain()を呼ぶのは、Monsterクラスとして不適切だと思います。
別途クラスを用意して、そちらからMonsterクラスのオブジェクトを作るのが適切と思われます。

投稿2019/05/14 14:47

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

samhi

2019/05/15 13:53

返信遅くなってすみません 皆さま、回答ありがとうございます。 yukee様のアドバイスを基にもう一つ作ってみたいと思います
guest

0

引数使い忘れてるああ

投稿2019/05/14 14:44

bcaa

総合スコア170

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

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

0

thisのname属性 は this.name で取得できます。
それでは mのname属性 はどのように取得すれば良いでしょうか?

投稿2019/05/14 14:37

LouiS0616

総合スコア35660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問