游戏角色管理系统
知識(shí)點(diǎn):工廠模式,MVC模式,xml文件解析存取,反射
jar包:lombok,JUnit 4,dom4j
項(xiàng)目結(jié)構(gòu)圖
Action`
Constant
package cn.kgc.tangcco.chengxiangjian.common;import java.io.File; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap;import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader;public class Constant {//設(shè)置靜態(tài)常量public static final String DAO = "dao";public static final String SER = "ser";//創(chuàng)建map集合,存放解析后的xml文件private static Map<String, String> map = new ConcurrentHashMap<String, String>();//聲明document對(duì)象static Document document = null;//解析xml文件,并將結(jié)果存入map集合static {SAXReader saxReader = new SAXReader();try {document = saxReader.read(new File("src/files/applicationContext.xml"));} catch (DocumentException e) {e.printStackTrace();}Element root = document.getRootElement();List<Element> list = root.elements();for (Element element : list) {String key = element.attributeValue("id");String value = element.attributeValue("class");map.put(key, value);}}//根據(jù)key值,返回value值public static String getURL(String key) {return map.get(key);} }PropertyFactory
package cn.kgc.tangcco.chengxiangjian.common;import java.nio.charset.MalformedInputException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap;public class PropertyFactory {//創(chuàng)建map集合private static Map<String, Object> map = new ConcurrentHashMap<String, Object>();//工廠模式,結(jié)果存入mappublic static <E> E getInstence(String key) {E obj = null;if (map.containsKey(key)) {obj = (E) map.get(key);}Class clz;try {clz = Class.forName(Constant.getURL(key));obj = (E) clz.newInstance();map.put(key, obj);} catch (Exception e) {e.printStackTrace();}return obj;}}GameDaoImp
package cn.kgc.tangcco.chengxiangjian.dao.impl;import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap;import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter;import cn.kgc.tangcco.chengxiangjian.dao.GameDao; import cn.kgc.tangcco.chengxiangjian.entity.Magicer; import cn.kgc.tangcco.chengxiangjian.entity.Role; import cn.kgc.tangcco.chengxiangjian.entity.Soldier; import cn.kgc.tangcco.chengxiangjian.entity.Team;public class GameDaoImp implements GameDao {//創(chuàng)建map集合,key-角色名稱,value-角色private static Map<String, Role> map = new ConcurrentHashMap<String, Role>();//創(chuàng)建teamMap集合,key-隊(duì)伍名稱,value-teamprivate static Map<String, Team> teamMap = new ConcurrentHashMap<String, Team>();//聲明document集合Document document = null;//無參構(gòu)造方法,導(dǎo)入xml文件public GameDaoImp() {String xmlPath = "src/files/Role.xml";improt(xmlPath);}//解析xml文件,結(jié)果存入map集合public void improt(String xmlPath) {SAXReader saxReader = new SAXReader();try {document = saxReader.read(new File(xmlPath));} catch (Exception e) {e.printStackTrace();}Element root = document.getRootElement();List<Element> list = root.elements();for (Element element : list) {if (element.getName().equals("Magicer")) {String name = element.elementText("name");Integer magicLevel = Integer.parseInt(element.elementText("magicLevel"));Magicer magicer = new Magicer(magicLevel, name);map.put(name, magicer);} else if (element.getName().equals("Soldier")) {String name = element.elementText("name");Integer physique = Integer.parseInt(element.elementText("physique"));Soldier soldier = new Soldier(physique, name);map.put(name, soldier);}}}//返回map集合public Map<String, Role> getRoles() {return map;}//返回角色集合(map集合的 value)public List<Role> getRole() {List<Role> list = new ArrayList<Role>();for (Role role : map.values()) {list.add(role);}return list;}//增加角色public void add(Role role) {map.put(role.getName(), role);}//刪除角色public void del(String name) {map.remove(name);}//修改戰(zhàn)士角色public void sModify(String name, String newName, Integer newPhysique) {Soldier soldier = (Soldier) map.get(name);soldier.setName(newName);soldier.setPhysique(newPhysique);}//修改魔法師角色public void mModify(String name, String newName, Integer newMagicLevel) {Magicer magicer = (Magicer) map.get(name);magicer.setName(newName);magicer.setMagicLevel(newMagicLevel);}//返回teamMap集合public Map<String, Team> getTeam() {return teamMap;}//把team添加進(jìn)teamMap集合public void addTeam(Team team) {teamMap.put(team.getTeamName(), team);}//結(jié)果保存至xml文件public void saveXml(String xmlPath) {Element root = document.getRootElement();List<Element> list = root.elements();for (Element element : list) {root.remove(element);}for (Role role : map.values()) {if (role instanceof Magicer) {Magicer magicer = (Magicer) role;Element element = root.addElement("Magicer");element.addElement("name").setText(magicer.getName());element.addElement("magicLevel").setText(magicer.getMagicLevel().toString());} else if (role instanceof Soldier) {Soldier soldier = (Soldier) role;Element element = root.addElement("Soldier");element.addElement("name").setText(soldier.getName());element.addElement("physique").setText(soldier.getPhysique().toString());}}XMLWriter cWriter = null;OutputStream out = null;try {out = new FileOutputStream(xmlPath);OutputFormat format = new OutputFormat().createPrettyPrint();cWriter = new XMLWriter(out, format);cWriter.write(document);} catch (Exception e) {e.printStackTrace();} finally {try {cWriter.close();} catch (IOException e) {e.printStackTrace();}}} }GameDao
package cn.kgc.tangcco.chengxiangjian.dao;import java.util.List; import java.util.Map;import cn.kgc.tangcco.chengxiangjian.entity.Role; import cn.kgc.tangcco.chengxiangjian.entity.Team;public interface GameDao {// 解析xml文件,結(jié)果存入map集合public void improt(String xmlPath);// 返回map集合public Map<String, Role> getRoles();// 返回角色集合(map集合的 value)public List<Role> getRole();// 增加角色public void add(Role role);// 刪除角色public void del(String name);// 修改戰(zhàn)士角色public void sModify(String name, String newName, Integer newPhysique);// 修改魔法師角色public void mModify(String name, String newName, Integer newMagicLevel);// 返回teamMap集合public Map<String, Team> getTeam();// 把team添加進(jìn)teamMap集合public void addTeam(Team team);// 結(jié)果保存至xml文件public void saveXml(String xmlPath);}Magicer
package cn.kgc.tangcco.chengxiangjian.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; //繼承抽象類Role public class Magicer extends Role {// 魔法師等級(jí)private static Integer magicLevel;@Override// 重寫toString方法public String toString() {return "魔法師,姓名:" + getName() + ",魔法等級(jí)" + getMagicLevel() + ",攻擊值:" + attack();}// magicLevel的get方法public static Integer getMagicLevel() {return magicLevel;}// magicLevel的set方法,magicLevel值大于10,默認(rèn)為10.小于1,默認(rèn)為1.public void setMagicLevel(Integer magicLevel) {if (magicLevel > 10) {this.magicLevel = 10;} else if (magicLevel < 1) {this.magicLevel = 1;} else {this.magicLevel = magicLevel;}}@Override// 重寫attack()方法。攻擊值=魔法等級(jí)*10public int attack() {return magicLevel * 5;}// 無參構(gòu)造public Magicer() {super();}// 有參構(gòu)造,magicLevel值大于10,默認(rèn)為10.小于1,默認(rèn)為1.public Magicer(Integer magicLevel, String name) {super(name);if (magicLevel > 10) {this.magicLevel = 10;} else if (magicLevel < 1) {this.magicLevel = 1;} else {this.magicLevel = magicLevel;}} }Role
package cn.kgc.tangcco.chengxiangjian.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;@NoArgsConstructor @AllArgsConstructor //抽象類 public abstract class Role {//角色名稱private String name;//name的get方法public String getName() {return name;}//name的set方法public void setName(String name) {this.name = name;}//抽象方法public abstract int attack();}Soldier
package cn.kgc.tangcco.chengxiangjian.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;//繼承抽象類Role public class Soldier extends Role {// 體魄private static Integer physique;// physique的get方法public static Integer getPhysique() {return physique;}// physique的set方法public void setPhysique(Integer physique) {this.physique = physique;}@Override// 重寫toString方法public String toString() {return "戰(zhàn)士,姓名:" + getName() + ",體魄" + getPhysique() + ",攻擊值:" + attack();}@Override// 重寫attack()方法,攻擊值=體魄*10public int attack() {return physique * 10;}// 有參構(gòu)造public Soldier(Integer physique, String name) {super(name);this.physique = physique;}// 無參構(gòu)造public Soldier() {super();}}Team
package cn.kgc.tangcco.chengxiangjian.entity;import java.util.List;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;@NoArgsConstructor @AllArgsConstructor @Data public class Team {// 隊(duì)伍名稱private String teamName;// 成員集合private List<Role> members; }GameServiceImp
package cn.kgc.tangcco.chengxiangjian.service.imp;import java.util.List; import java.util.Map; import java.util.Scanner;import cn.kgc.tangcco.chengxiangjian.common.Constant; import cn.kgc.tangcco.chengxiangjian.common.PropertyFactory; import cn.kgc.tangcco.chengxiangjian.dao.GameDao; import cn.kgc.tangcco.chengxiangjian.entity.Magicer; import cn.kgc.tangcco.chengxiangjian.entity.Role; import cn.kgc.tangcco.chengxiangjian.entity.Soldier; import cn.kgc.tangcco.chengxiangjian.entity.Team; import cn.kgc.tangcco.chengxiangjian.service.GameService;public class GameServiceImp implements GameService {Scanner scanner = new Scanner(System.in);// 工廠模式創(chuàng)建GameDaoImp對(duì)象GameDao gameDao = PropertyFactory.getInstence(Constant.DAO);// 增加角色public String add(Role role) {String message = "";if (gameDao.getRoles().containsKey(role.getName())) {message = "添加失敗,角色名稱重復(fù)!";} else {gameDao.add(role);message = "添加成功!";}return message;}// 返回角色集合public List<Role> showAll() {return gameDao.getRole();}// 刪除角色public String del(String name) {String message = "";if (gameDao.getRoles().containsKey(name)) {gameDao.del(name);message = "刪除成功!";} else {message = "刪除失敗,要?jiǎng)h除的角色不存在!";}return message;}// 修改戰(zhàn)士角色public String sModify(String name, String newName, Integer newPhysique) {String message = "";if (gameDao.getRoles().containsKey(name) && gameDao.getRoles().values() instanceof Soldier) {gameDao.sModify(name, newName, newPhysique);message = "修改成功";} else {message = "修改失敗";}return message;}// 修改魔法師角色public String mModify(String name, String newName, Integer newMagicLevel) {String message = "";if (gameDao.getRoles().containsKey(name) && gameDao.getRoles().values() instanceof Magicer) {gameDao.mModify(name, newName, newMagicLevel);message = "修改成功";} else {message = "修改失敗";}return message;}// 把team添加進(jìn)teamMap集合public String addTeam(Team team) {String message = "";if (gameDao.getTeam().containsKey(team.getTeamName())) {message = "組隊(duì)失敗";} else {gameDao.addTeam(team);message = "組隊(duì)成功";}return message;}// 返回teamMap集合public Map<String, Team> AllTeam() {return gameDao.getTeam();}// 根據(jù)角色名稱判斷角色類型,魔法師-true,戰(zhàn)士-falsepublic boolean pdlx(String name) {boolean flag = false;if (gameDao.getRoles().get(name) instanceof Magicer) {flag = true;} else if (gameDao.getRoles().get(name) instanceof Soldier) {flag = false;}return flag;}// 結(jié)果保存至xml文件public String saveXml() {String message = "";String xmlPath = "src/files/Role.xml";gameDao.saveXml(xmlPath);if (xmlPath.isEmpty()) {message = "保存失敗";} else {message = "保存成功";}return message;}}GameService
package cn.kgc.tangcco.chengxiangjian.service;import java.util.List; import java.util.Map;import cn.kgc.tangcco.chengxiangjian.entity.Role; import cn.kgc.tangcco.chengxiangjian.entity.Team;public interface GameService {// 增加角色String add(Role role);// 返回角色集合List<Role> showAll();// 刪除角色String del(String name);// 修改戰(zhàn)士角色String sModify(String name, String newName, Integer newPhysique);// 修改魔法師角色String mModify(String name, String newName, Integer newMagicLevel);// 把team添加進(jìn)teamMap集合String addTeam(Team team);// 返回teamMap集合Map<String, Team> AllTeam();// 根據(jù)角色名稱判斷角色類型,魔法師-true,戰(zhàn)士-falseboolean pdlx(String name);// 結(jié)果保存至xml文件String saveXml(); }applicationContext
<?xml version="1.0" encoding="UTF-8"?><beans ><bean id="dao" class="cn.kgc.tangcco.chengxiangjian.dao.impl.GameDaoImp"></bean><bean id="ser" class="cn.kgc.tangcco.chengxiangjian.service.imp.GameServiceImp"></bean> </beans>Role
<?xml version="1.0" encoding="UTF-8"?> <Role><Magicer><name>瑪麗</name><magicLevel>5</magicLevel></Magicer><Soldier><name>老唐</name><physique>20</physique></Soldier><Soldier><name>李陽</name><physique>15</physique></Soldier><Magicer><name>qq寶寶</name><magicLevel>5</magicLevel></Magicer><Soldier><name>廣野</name><physique>34</physique></Soldier><Magicer><name>在天貓</name><magicLevel>5</magicLevel></Magicer> </Role>總結(jié)
- 上一篇: 电磁兼容试验项目之辐射发射(三)
- 下一篇: 浅谈医疗器械的工频磁场抗扰度试验