とあるサイトを使って、勉強のために少しプログラムを書いてみました。
こちらがサイトになります。→リンク
コンストラクタや、引数、戻り値などの勉強のためにやっております。基本的なことからあまり理解ができておらず、簡単なことかもしれませんが、よろしくお願い致します。
Java1
1package application; 2 3public class MyMain { 4 5 6 public static void main(String[] args) { 7 8 Actor Hero = new Actor("主人公",100,25,15); 9 10 Actor Enemy1 = new Actor("敵1",60,30,5); 11 12 Hero.setTarget(Enemy1); 13 Enemy1.setTarget(Hero); 14 Hero.start(); 15 Enemy1.start(); 16 } 17} 18 19
Java2
1package application; 2class Actor extends Thread{ 3 private int hitpoint; 4 private int offence; 5 private int deffence; 6 private String name; 7 private Actor target; 8 private int deley = 1; 9 10 public int getHitPoint() { 11 return hitpoint; 12 } 13 14 public int getOffence() { 15 return offence; 16 } 17 18 public int getDeffence() { 19 return deffence; 20 } 21 public Actor getTarget() { 22 return target; 23 } 24 25 public void setHitPoint(int hitpoint) { 26 this.hitpoint = hitpoint; 27 } 28 public void setAttack(int offence) { 29 this.offence = offence; 30 } 31 public void setDeffence(int deffence) { 32 this.deffence = deffence; 33 } 34 35 public void setTarget(Actor target) { 36 this.target = target; 37 } 38 public boolean isDead() { 39 return target.hitpoint<=0; 40 } 41 42 public Actor(String name,int hitpoint,int offence,int deffence) { 43 this.name = name; 44 this.hitpoint = hitpoint; 45 this.offence = offence; 46 this.deffence = deffence; 47 } 48 49 public void attack(Actor pActor) { 50 int damage = offence - pActor.getDeffence(); 51 if(damage >= 0) { 52 pActor.setHitPoint(pActor.getHitPoint()-damage); 53 System.out.println(name+"は"+pActor.getName()+"に"+damage+"のダメージを与えた!"); 54 55 }else if(damage<=0) { 56 System.out.println("ダメージを受けない"); 57 } 58 59 60 } 61 62 public void run() { 63 while(true) { 64 try { 65 sleep(100 * deley); 66 67 }catch(InterruptedException e) { 68 } 69 if(isDead()) 70 break; 71 } 72 attack(target); 73 } 74 }
こちらを実行すると、何も表示されません。デバッグで確認したところ、Hero.start() Enemy1.start()のどちらのメソッドも実行されずにそのまま処理が終了しています。
サイトを見ていて感じたことなのですが、そもそもstart()のようなメソッドは作成していないのでは、、と疑問に思いました。
Hero.run();に変更してデバッグを行うと、その行で止まってしまいます。
Hero.attack(target);
Enemy1.attack(target)
のように記載すると、一度ずつ実行されますが、サイトの趣旨とは異なってしまいます。
どのように表記するのが正しいのでしょうか。よろしければご回答お願い致します。