日期:2014-05-20  浏览次数:20807 次

java一个设计的问题
不知道有没人玩过魔兽没?呵呵

现在我想用java模拟魔兽里的一个人物角色

在魔兽里,人物分联盟、部落2个阵营,阵营之间是互相对立的
共有9个职业:战士,盗贼,法师,牧师,术士,猎人,萨满,圣骑士,德鲁伊;
共有8个种族:人类,精灵,矮人,侏儒,兽人,牛头,巨魔,亡灵;
其中人类,精灵,矮人,侏儒属于联盟阵营,兽人,牛头,巨魔,亡灵属于部落阵营
现在设想每个种族都可以选择不同的职业创建游戏角色

谁能帮助我设计一个类体系表示以上的关系啊,谢谢了




------解决方案--------------------
这个貌似有点太复杂了吧
------解决方案--------------------
UML
------解决方案--------------------
一个人物类,
有两个属性。
一个是职业,一个是种族。
部落阵营可以通过一个方法从种族得到。

------解决方案--------------------
首先种族,职业,阵营都是基本不变的可以设置为常量,或者说c#/c中的枚举类型.
而一个角色只能选择职业中的一种,阵营中的一种,种族中的一种,故只需要在角色类中添加三个属性即可.
再添加一个构造方法,使得每次创建角色时都能指定角色所属的阵营职业种族,同时这三个属性为只度属性.
(仅供参考)
代码如下:
Java code

package com.moshou;

public interface 阵营 {
//人物分联盟、部落2个阵营
    String LIANMENG="联盟";
    String BULUO="部落";
}

package com.moshou;

public interface 职业 {
    //战士,盗贼,法师,牧师,术士,猎人,萨满,圣骑士,德鲁伊
    String ZHANSHI = "战士";
    String DAOZEI="盗贼";
    String FASHI="法师";
    String MUSHI="牧师";
    String SHUSHI="术士";
    String LIEREN="猎人";
    String SAMAN="萨满";
    String SHENGQISHI="圣骑士";
    String DELUYI="德鲁伊";
}

package com.moshou;

public interface 种族 {
//人类,精灵,矮人,侏儒,兽人,牛头,巨魔,亡灵
    String RENLEI="人类";
    String JINGLING="精灵";
    String AIREN="矮人";
    String ZHURU="侏儒";
    String SHOUREN="兽人";
    String NIUTOU="牛头";
    String JUMO="巨魔";
    String WANGLING="亡灵";
}


package com.moshou;

public class 角色 {
    private String 阵营;

    private String 职业;

    private String 种族;

    public String get阵营() {
        return 阵营;
    }

    public String get职业() {
        return 职业;
    }

    public String get种族() {
        return 种族;
    }

    public 角色(String 阵营, String 职业, String 种族) {
        super();
        this.阵营 = 阵营;
        this.职业 = 职业;
        this.种族 = 种族;
    }

    @Override
    public String toString() {
        return "该角色的详细信息如下:\n" + "阵营:" + this.阵营 + "\n职业:"+this.职业+"\n种族:" + this.种族;
    }

}
package com.moshou;

public class TestMoshou {
    public static void main(String[] args) {
        角色 juese = new 角色(阵营.BULUO, 职业.DAOZEI, 种族.JINGLING);
        System.out.println(juese.toString());
    }
}