別クラスのフィールドにアクセス
- 評価
- クリップ 0
- VIEW 3,950
public class Hero{
String name;
int hp;
int atk;
boolean def; //防御状態かどうか
boolean esc; //逃走状態かどうか
Hero(){
this.hp = 100;
this.atk = 15;
}
void act(){
System.out.println("1 攻撃 2防御 3逃走");
int commandSelect = new java.util.Scanner(System.in).nextInt(); //コマンドの入力
switch (commandSelect){
case 1:
attack(); //アタックメソッドの呼び出し
break;
case 2:
defence(); //ディフェンスメソッドの呼び出し
break;
case 3:
escape(); //逃走メソッドの呼び出し
break;
}
}
void attack(){
int damage = (int)((Math.random()+1)*this.atk); //自分の攻撃力×1.0^1.9のダメージを生成
e.hp -= damage;
System.out.println("あなたは"+e.name+"に"+damage+"ダメージ与えた!!\r\n残りの体力は"+e.hp);
}
void defence(){
def = true;
}
void escape(){
int a = (int)(Math.random()*10); //二分の一で逃げれるかどうか
if (a >= 4 ){
esc = true;
}else{
esc = false;
}
}
}
public class Enemy{
String name;
int atk;
int hp;
Enemy(){
this.hp = 200;
this.atk = 5;
this.name = "スライム";
}
void act(){
int a = new java.util.Random().nextInt(2)++;
switch (a){
case 1:
attack();
break;
case 2:
grin();
break;
}
}
void attack(){
int damage = (int)((Math.random()+1)*this.atk); //自分の攻撃力×1.0^1.9のダメージを生成
h.hp -= damage;
if (h.def == true){
damage = damage/2;
}
System.out.println(tihs.name+"の攻撃"+damage+"のダメージを食らった!!");
}
void grin(){
System.out.println(this.name+"はにやにやしている");
}
}
Java
public class BattleSystem{
public static void main(String[] args){
Hero h = new Hero();
Enemy e = new Enemy();
System.out.println("あなたの名前を入力してください");
h.name = new java.util.Scanner(System.in).nextLine();
System.out.println(e.name+"が現れた!!\r\n君はどうする?\r\n現在の体力:"+h.hp);
while (true){ //ここからバトルのループのwhile
h.act(); //主人公のターンでの行動
e.act(); //敵のターンでの行動
if (h.hp == 0){ //バトルの結果表示のif
System.out.println("GAME OVER");
break;
}else if (h.esc == true){
System.out.println("逃亡に成功した");
break;
}else{
System.out.println("YOU WIN");
break;
}
} //ここまでwhileループ
}
}
簡単なゲームを作っているのですが
上記のそれぞれのactメソッドにはswitchでattackメソッドなどコマンド入力で選べるようにしてあるのですがHeroクラスのattackメソッドではEnemyクラスのhpフィールドといったふうにそれぞれがそれぞれのフィールドにアクセスしたいのですがアクセスすることができません。どうすればいいでしょうか?よろしくお願いします
追記 すみませんほかのクラスを記入するの忘れていました、、、
具体的にはHeroクラスのattackメソッドでe.hpを使えない、といった感じです。追加しましたので改めてよろしくお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
hとかeはMainクラス内でしか有効でありません。これを引数で渡すか、グローバル化(非推奨)する必要があります。
Emenyクラス側
void attack(Hero h)以下略
とかの作りが必要です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
HeroとかEnemyクラスの記述がないので正確には回答できません。
まあ推測としては、他のクラスの非staticメソッドをインスタンスなしで呼び出そうとしているとかだと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.32%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/04/23 16:07
ありがとうございました!