インタフェースで、簡単なゲームを書きます.


roleインタフェース:キャラクタ攻撃と修練
  public interface Role {
    int attack();//    ,           
    void practise();//     。             
}

MagicStickインタフェース:法師用の杖
public interface MagicStick {
    int fire();
}

Weaponインタフェース:戦士に適した武器
public interface Weapon {
    void setSoldier(Soldier s);//              
    int fire(); //                 ,       
}

法師が使っている2種類の杖類
public class GreenStick implements MagicStick {
    //      
    Calendar calendar = Calendar.getInstance();
    //      
    int month = calendar.get(Calendar.MONTH)+1;
    /**
     *            
     *           (6-8)   :2;
     *            :1
     */
    public int fire() {
        if(month >=6 && month <=8){
            return 2;
        }else {
            return 1;
        }
    }
public class BlackStick implements MagicStick {
    Calendar calendar = Calendar.getInstance();
    int month = calendar.get(Calendar.MONTH)+1;

    @Override
    public int fire() {
        if(month % 2 == 0){
            return 2;
        }else {
            return 1;
        }
    }

法師類:法師の基本的な情報
public class Magicer extends NamedRole {

    private MagicStick stick;
    private int level = 0;

    /**
     *       
     *            *5
     */

    @Override
    public int attack() {
        return level * 5;
    }

    @Override
    public void practise() {
        //     stick  ,     +1
        //     ,    :    +1+stick   fire      
        if(stick == null){
            level++;
        }else {
            level = level + 1 + stick.fire();
        }
    }

    public Magicer(String name, MagicStick stick, int level) {
        super(name);
        this.stick = stick;
        this.level = level;
    }

    public Magicer(int age, MagicStick stick, int level) {
        super(age);
        this.stick = stick;
        this.level = level;
    }

    public Magicer(String name, int age, int level) {
        super(name, age);
        this.level = level;
    }

    public Magicer(String name) {
        super(name);
    }

    public Magicer(int age) {
        super(age);
    }

    public Magicer(String name, int age) {
        super(name, age);
    }

    public MagicStick getStick() {
        return stick;
    }

    public void setStick(MagicStick stick) {
        this.stick = stick;
    }

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }
}


戦士の武器類1
public class Bolo implements Weapon {
    private Soldier s;
    private int age;
    @Override
    public void setSoldier(Soldier s) {
        this.s = s;
    }
    @Override
    public int fire() {
        s = new Soldier(age);
        if(s.getAge()>=18){
            return 100;
        }else {
            return 50;
        }
    }

    public Soldier getS() {
        return s;
    }

    public void setS(Soldier s) {
        this.s = s;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

戦士の武器類2
public class Pike implements Weapon {
    private String name;
    private Soldier s;


    @Override
    public void setSoldier(Soldier s) {
      this.s = s;
    }

    @Override
    public int fire() {
       s = new Soldier(name);
       if(s.getName() == name){
           return 1000;
       }else{
           return 25;
       }
    }


    public Pike(String name, Soldier s) {
        this.name = name;
        this.s = s;
    }

    public Pike(Soldier s) {
        this.s = s;
    }

    public Pike(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Soldier getS() {
        return s;
    }

    public void setS(Soldier s) {
        this.s = s;
    }


戦士類:戦士の基本情報を保存するために使用される
public class Soldier extends NamedRole {
    private int hurt;
    private Weapon w;


    @Override
    public int attack() {
        return hurt+w.fire();
    }

    @Override
    public void practise() {
        hurt += 10;
    }
    public Weapon getW() {
        return w;
    }

    public void setW(Weapon w) {
        this.w = w;
    }

    public Soldier(String name, Weapon w) {
        super(name);
        this.w = w;
    }

    public Soldier(int age, Weapon w) {
        super(age);
        this.w = w;
    }

    public Soldier(String name, int age, Weapon w) {
        super(name, age);
        this.w = w;
    }

    public Soldier(int age, int hurt, Weapon w) {
        super(age);
        this.hurt = hurt;
        this.w = w;
    }

    public Soldier(String name, int age, int hurt, Weapon w) {
        super(name, age);
        this.hurt = hurt;
        this.w = w;
    }

    public Soldier(String name, int age, int hurt) {
        super(name, age);
        this.hurt = hurt;

    }

    public Soldier(String name) {
        super(name);
    }

    public Soldier(int age) {
        super(age);
    }

    public Soldier(String name, int age) {
        super(name, age);
    }

    public int getHurt() {
        return hurt;
    }

    public void setHurt(int hurt) {
        this.hurt = hurt;
    }

NamedRoleクラスNamedRoleクラス:2つのロールの親
public abstract class NamedRole implements Role {
    private String name;//   
    private int age;//  

    /**
     *        
     * @return
     */
    @Override
    public int attack() {
        return 0;
    }

    @Override
    public void practise() {

    }

    public NamedRole(String name) {
        this.name = name;
    }

    public NamedRole(int age) {
        this.age = age;
    }

    public NamedRole(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


テストクラス;
  public static void main(String[] args) {
        //       
        MagicStick magicStick1 = new GreenStick();
        MagicStick magicStick2 = new BlackStick();
        //      
        Magicer magicer1 = new Magicer("    ", 21, 10);
        Magicer magicer2 = new Magicer("   ", 15, 5);
        //       
        magicer1.setStick(magicStick1);
        magicer2.setStick(magicStick2);
        //           
        System.out.println(magicer1.getName() + "\t" + "  :" + magicer1.getAge() + "\t" + "      :" + magicer1.attack());
        System.out.println(magicer2.getName() + "\t" + "  :" + magicer2.getAge() + "\t" + "      :" + magicer2.attack());
        //    ,  Role   practise();
        magicer1.practise();
        magicer2.practise();
        //           
        System.out.println(magicer1.getName() + "\t" + "  :" + magicer1.getAge() + "\t" + "        :" + magicer1.attack());
        System.out.println(magicer2.getName() + "\t" + "  :" + magicer2.getAge() + "\t" + "        :" + magicer2.attack());
        System.out.println("-----------------------------------------------------------------");
        //      
        Soldier soldier1 = new Soldier("Ziph", 21, 200);
        Soldier soldier2 = new Soldier("   ", 30, 150);
        //     
        Weapon weapon1 = new Bolo();
        Weapon weapon2 = new Pike("Ziph");
        //       
        soldier1.setW(weapon1);
        soldier1.setW(weapon2);
        soldier2.setW(weapon1);
        soldier2.setW(weapon2);
        //    
        System.out.println(soldier1.getName() + "\t" + "  :" + soldier1.getAge() + "\t" + "              :" + soldier1.attack());
        System.out.println(soldier2.getName() + "\t" + "  :" + soldier2.getAge() + "\t" + "              :" + soldier2.attack());
        //  
        soldier1.practise();
        soldier2.practise();
        //    
        System.out.println(soldier1.getName() + "\t" + "  :" + soldier1.getAge() + "\t" + "       ,          :" + soldier1.attack());
        System.out.println(soldier2.getName() + "\t" + "  :" + soldier2.getAge() + "\t" + "       ,          :" + soldier2.attack());
    }