見出し画像

勇者とドラゴンが戦うプログラムの解説

いきなりですが、このプログラムは「継承」が理解出来てないと難しいと思います。ですが、何となくイメージができるように解説して行こうかなと思っています。

ちなみにプログラミング言語は「Java」です。

この記事の最後には、このプログラムを実行する環境がない方や、プログラミングってどんなものか簡単に試してみたい方の為にプログラムを実行できるものを紹介してますので、最後までご覧下さい。

それでは解説していきます。

このプログラムは6つのクラスで作られています。初めはそれぞれ分解して解説していき、最後に全部のコードが見えるようにしています。コメントをつけているのでわかりやすいと思います。

作成の流れとしては以下のようになります。

「生物を作る為のクラス」
           ↓
「生物を作るためのクラス」を継承した「生物に攻撃をする為のクラス」
           ↓
「生物に攻撃をする為のクラス」を継承した「勇者クラス」
           ↓
「生物に攻撃をする為のクラス」を継承した「ドラゴンクラス」
           ↓
「勇者とドラゴンを戦わせるクラス」
           ↓
「プログラムを実行する為のクラス」
それでは解説していきましょう♪

Creatureクラス

まずは「生物を作る為のクラス(Creature)」を作っていきましょう。

このクラスでは以下のような機能を記述します。

①生物を作る為に必要な「名前(name)」「体力(life)」「攻撃力(atp)」フィールドを設定します。

②フィールド(名前と体力)を初期化する為のコンストラクタ(引数2つ)を設定します。

③フィールドの値をセットしたり取得する為のセッター、ゲッターメソッド。

コードは以下のようになります。

class Creature {

  private String name;
  private int life;
  private int atp;

//コンストラクタ
  public Creature(String name,int life) {
    this.name = name;
    this.life = life;
  }

  //名前
  public void setName(String name){
    this.name = name;
  }
  public String getName(){
	return name;
  }

  //体力
  public void setLife(int life){
    this.life = life;
  }
  public int getLife() {
    return life;
  }
  
  //攻撃力
  public void setAtp(int atp) {
    this.atp = atp;
  }
  public int getAtp(){
    return atp;
  }
}


このクラスは「勇者クラス」と「ドラゴンクラス」の継承元になります。そしてこの勇者とドラゴンに名前と体力をコンストラクタで設定して、攻撃力はメソッドで設定するようなプログラムになっています。

Attackerクラス

次に、「Creature」を継承した「生物に攻撃をする為のクラス(Attacker)」を作ります。

このクラスでは以下のようなコードを記述します。

①引数を2つ持つコンストラクタ

②Attacker型の引数をもつattackメソッド

コードは以下のようになります。

abstract class Attacker extends Creature {
  
  //コンストラクタ(名前と、体力の設定)
  public Attacker(String n, int l) {
     super(n,l);
  }
  
  //抽象メソッド
  public abstract void attack(Attacker at);
} 


このクラスでは主に「攻撃する人」を設定するためのクラスになります。しかし、このクラスにはフィールドがなくコンストラクタで設定する物がありません。ですが「Creatureクラス」を継承しているので引数を2つもったコンストラクタを記述し、更にスーパークラス(super())にその変数を持たせます。こうする事で最終的にインスタンスを作成した時に「名前」や「体力」が設定できるようになります。

attackerメソッドは抽象メソッドにして、「勇者クラス」と「ドラゴンクラス」で内容を作るようにします。引数はAttacker型の引数を設定します。こうする事で攻撃するのは誰なのかを決める事ができます。

Humanクラス

次は「Attackerクラス」を継承して「勇者クラス(Human)」を作ります。

このクラスでは以下のようなコードを記述します。

①引数を1つ持つコンストラクタ(名前はコンストラクタで決めて、体力は固定で30にします)

②attackerメソッドで攻撃力(15 × 0〜1)とダメージを与えた後の処理

それではコードを見ていきましょう。

class Human extends Attacker { 
 
   //名前だけインスタンスで決めて体力は固定です
   public Human(String name){
     super(name,30);
   }
   
   //攻撃時の処理
   @Override
   public void attack(Attacker at) {
     int hit = (int)Math.round(15 * Math.random());
	int h = at.getLife() - hit;
	at.setLife(h);
	super.setAtp(hit);
   }
}


このクラスでは主に「勇者」の能力を作る為のクラスになります。体力を決めたり、ドラゴンに与えるダメージを決めたりします。

コンストラクタは引数1つで名前をインスタンス生成時に決めます。(勇者に設定してます。)

スーパークラスのコンストラクタの引数は2つなので、Humanクラスのコンストラクタの引数をスーパークラスのコンストラクタ(super())に持たせます。体力は固定なので「30」を持たせます。するとコードは「super(引数, 30)」となります。

attackメソッドでは攻撃力を決めて、攻撃した後の体力をセットします。

Monsterクラス

このクラスも「Attackerクラス」を継承して「ドラゴンクラス(Monster)」を作ります。

このクラスでは以下のようなコードを記述します。

①攻撃力を保持する為のフィールド

②引数3つのコンストラクタ(名前、体力、攻撃力を決めます)※インスタンスで名前は”ドラゴン”、体力は50で攻撃力は10に設定してます。

③attackerメソッドで攻撃力(① × 0〜1)とダメージを与えた後の処理

それではコードを見ていきましょう。

ここから先は

7,704字 / 1画像

¥ 780

この記事が気に入ったらチップで応援してみませんか?