I want to give my characters a Role (like Driver, gunman etc...)with the Decorator design pattern.Not every Role needs all the skills, just some of them (for example, Partner In Crime Needs Startegy Only) . But When I want to create the different roles, program crashes.(I give my characters to the exact decorator later with the decision of the user.He chooses the members for the roles) As an example, Here I need only the Strategy Skill from the Member class (Because Partner In crime only uses that one). But when I am creating the EnumMap it is not working. How To solve this problem ?
///Member Class
import java.util.*;
public class Member implements Partner{
String Name;
int Share;
//Creating the enum for the skills
public static enum Skill {
DRIVE, VEHICLE, ACCURACY, WEAPONS, REFLEX, STRATEGY, CHARISMA, HACKING, SPEED, STEALTH;
public static Integer valueOf(Skill skill) {
// TODO Auto-generated method stub
return Member.skills.get(skill);
}
}
//Creating an EnumMap to store the values and the names of the skills
static Map<Skill, Integer> skills = new EnumMap<Skill, Integer>(Skill.class);
Random r = new Random();
//Constructor
public Member(String Name) {
this.Name = Name;
skills.put(Skill.DRIVE, r.nextInt(100));
skills.put(Skill.VEHICLE, r.nextInt(100));
skills.put(Skill.ACCURACY, r.nextInt(100));
skills.put(Skill.WEAPONS, r.nextInt(100));
skills.put(Skill.REFLEX, r.nextInt(100));
skills.put(Skill.STRATEGY, r.nextInt(100));
skills.put(Skill.CHARISMA, r.nextInt(100));
skills.put(Skill.HACKING, r.nextInt(100));
skills.put(Skill.SPEED, r.nextInt(100));
skills.put(Skill.STEALTH, r.nextInt(100));
}
public Map<Skill, Integer> getSkills() {
return skills;
}
public Integer getSkill(Member.Skill skill) {
return (Integer) skills.get(Skill.valueOf(skill));
}
public void setSkills(String skillname, int number) {
skills.put(Skill.valueOf(skillname), number);
}
}
///Partner Interface
public interface Partner {
//Creating the enum for the skills
public static enum Skill {
DRIVE, VEHICLE, ACCURACY,
WEAPONS, REFLEX, STRATEGY, CHARISMA, HACKING, SPEED, STEALTH;
}
}
///RoleDecorator class
public class RoleDecorator implements Partner {
protected Partner DecoratedPartner;
public RoleDecorator(Partner DecoratedPartner){
this.DecoratedPartner=DecoratedPartner;
}
}
////PartnerInCrime Class Something is bad here...
import java.util.*;
public class PartnerInCrime extends RoleDecorator {
Member.Skill STRATEGY;
Random r = new Random();
Map<Member.Skill, Integer> skill=new EnumMap<Member.Skill, Integer>(Member.Skill.class);
public PartnerInCrime(Partner DecoratedPartner) {
super(DecoratedPartner);
skill.put(STRATEGY, Member.Skill.valueOf(STRATEGY));
}
public Map<Member.Skill, Integer> getskill() {
return skill;
}
}
Aucun commentaire:
Enregistrer un commentaire