U3D游戏中简单的属性类和管理
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/// <summary>
/// 枚举类
/// </summary>
public class Enums
{
/// <summary>
/// 性别
/// </summary>
public enum Sex
{
//男
Man = 1,
//女
Woman = 2,
//中性
Neutral = 3,
}
/// <summary>
/// 职业
/// </summary>
public enum Profession
{
//战士
Soldier = 1,
//魔法师
Master = 2,
//骑士
Knight = 3,
//道士
TaoistPriest = 4,
}
/// <summary>
/// 头衔
/// </summary>
public enum Title
{
初出茅庐 = 1,
初入江湖 = 2,
江湖小虾 = 3,
江湖中人 = 4,
大侠 = 5,
善人 = 6,
恶人 = 7,
邪道 = 8,
}
}
/// <summary>
/// 信息属性类
/// </summary>
public class InfoAttribute
{
//全局ID
public int id;
//名称
public string name;
//性别
public Enums.Sex sex;
//职业
public Enums.Profession pro;
//称谓
public Enums.Title title;
public void Init()
{
id = 0;
name = null;
sex = Enums.Sex.Man;
pro = Enums.Profession.Snake;
title = Enums.Title.初出茅庐;
}
public void Init(int id, string name, Enums.Sex sex, Enums.Profession pro, Enums.Title title)
{
this.id = id;
this.name = name;
this.sex = sex;
this.pro = pro;
this.title = title;
}
public InfoAttribute()
{
Init();
}
}
/// <summary>
/// 游戏属性类
/// </summary>
public class GameAttribute
{
//金币
public int gold;
//银币
public int silver;
//铜币
public int copper;
//钻石
public int diamond;
//活力
public int vitality;
//活力回复速度
public int vitalitySpeed;
public GameAttribute()
{
Init();
}
public void Init()
{
this.gold = 0;
this.silver = 0;
this.copper = 0;
this.diamond = 0;
this.vitality = 0;
this.vitalitySpeed = 0;
}
public void Init(int gold, int silver, int copper, int diamond, int vitality, int vitalitySpeed)
{
this.gold = gold;
this.silver = silver;
this.copper = copper;
this.diamond = diamond;
this.vitality = vitality;
this.vitalitySpeed = vitalitySpeed;
}
}
/// <summary>
/// 战斗属性类
/// </summary>
public class BattleAttribute
{
//等级
public int lvl;
//生命值
public int hp;
//魔法值
public int mp;
//攻击力
public int atk;
//防御力
public int def;
public void Init()
{
hp = mp = atk = def = 0;
lvl = 1;
}
public void Init(int hp, int mp, int atk, int def, int lvl)
{
this.hp = hp;
this.mp = mp;
this.atk = atk;
this.def = def;
this.lvl = lvl;
}
public BattleAttribute()
{
Init();
}
}
/// <summary>
/// 玩家类
/// </summary>
public class Player
{
//信息属性类
public InfoAttribute infoAttrib;
//游戏属性类
public GameAttribute gameAttrib;
//战斗属性类
public BattleAttribute battleAttrib;
public void Init(InfoAttribute infoAttrib, GameAttribute gameAttrib, BattleAttribute battleAttrib)
{
this.infoAttrib = infoAttrib;
this.gameAttrib = gameAttrib;
this.battleAttrib = battleAttrib;
}
public void Init()
{
infoAttrib = new InfoAttribute();
gameAttrib = new GameAttribute();
battleAttrib = new BattleAttribute();
}
}
public class PlayerManager
{
//本类对象
private static PlayerManager _instance;
//锁对象
private static readonly object obj = new object();
/// <summary>
/// 单例方法
/// </summary>
public static PlayerManager instance
{
get
{
if (_instance == null)
{
lock (obj)
{
_instance = new PlayerManager();
}
}
return _instance;
}
}
//玩家管理类
private Dictionary<int, Player> playerDic;
public PlayerManager()
{
playerDic = new Dictionary<int, Player>();
}
/// <summary>
/// 添加玩家(添加成功返回true,存在则返回false)
/// </summary>
/// <param name="id"></param>
/// <param name="player"></param>
/// <returns></returns>
public bool AddPlayer(int id, Player player)
{
if (playerDic.ContainsKey(id))
return false;
playerDic.Add(id, player);
return true;
}
/// <summary>
/// 移除玩家(移除成功返回true,该玩家不存在则返回false)
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public bool RemovePlayer(int id)
{
if (!playerDic.ContainsKey(id))
return false;
playerDic.Remove(id);
return true;
}
/// <summary>
/// 查找玩家(查找成功返回Player ,该玩家不存在返回null)
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public Player SelectPlayer(int id)
{
if (!playerDic.ContainsKey(id))
return null;
return playerDic[id];
}
/// <summary>
/// 查找同一职业的玩家(返回List集合)
/// </summary>
/// <param name="pro"></param>
/// <returns></returns>
public List<Player> SelectProPlayer(Enums.Profession pro)
{
List<Player> players = new List<Player>();
foreach (var item in playerDic.Values)
{
if (item.infoAttrib.pro == pro)
{
players.Add(item);
}
}
return players;
}
/// <summary>
/// 查找除指定ID的其他玩家的集合
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public List<Player> SelectOhterPlayer(int id)
{
List<Player> players = new List<Player>();
foreach (var item in playerDic.Values)
{
if (item.infoAttrib.id != id)
players.Add(item);
}
return players;
}
/// <summary>
/// 查找所有玩家,返回所有玩家的List结合
/// </summary>
/// <returns></returns>
public List<Player> SelectAllPlayer()
{
List<Player> players = new List<Player>();
foreach (var item in playerDic.Values)
players.Add(item);
return players;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using UnityEngine;
public class ConfigManager
{
//本类对象
private static ConfigManager _instance;
//锁对象
private static readonly object obj = new object();
/// <summary>
/// 单例方法
/// </summary>
public static ConfigManager instance
{
get
{
if (_instance == null)
{
lock (obj)
{
_instance = new ConfigManager();
}
}
return _instance;
}
}
/// <summary>
/// 玩家xml解析,路径自己改
/// </summary>
public void PlayerXmlParse()
{
// id = "" name = "" sex = "" pro = "" title = "" gold = ""
//silver = "" copper = "" diamond = "" vitality = ""
//vitalitySpeed = "" lvl = "" hp = "" mp = "" atk = "" def = ""
XmlDocument doc = new XmlDocument();
TextAsset textAsset = Resources.Load<TextAsset>("Xmls/players");
doc.LoadXml(textAsset.text);
XmlNode root = doc.SelectSingleNode("root");
XmlNodeList list = root.ChildNodes;
for (int i = 0; i < list.Count; i++)
{
int id;
int.TryParse(list[i].Attributes["id"].Value, out id);
string name = list[i].Attributes["name"].Value;
string temp = list[i].Attributes["sex"].Value;
Enums.Sex sex = Enums.Sex.Man;
if (temp != "" || temp != string.Empty)
sex = StringToEnum<Enums.Sex>(temp);
temp = list[i].Attributes["pro"].Value;
Enums.Profession pro = Enums.Profession.Knight;
if (temp != "" || temp != string.Empty)
pro = StringToEnum<Enums.Profession>(temp);
temp = list[i].Attributes["title"].Value;
Enums.Title title = Enums.Title.初入江湖;
if (temp != "" || temp != string.Empty)
title = StringToEnum<Enums.Title>(temp);
InfoAttribute infoAttribute = new InfoAttribute
{
id = id,
name = name,
sex = sex,
pro = pro,
title = title
};
int gold;
int.TryParse(list[i].Attributes["gold"].Value, out gold);
int silver;
int.TryParse(list[i].Attributes["silver"].Value, out silver);
int copper;
int.TryParse(list[i].Attributes["copper"].Value, out copper);
int diamond;
int.TryParse(list[i].Attributes["diamond"].Value, out diamond);
int vitality;
int.TryParse(list[i].Attributes["vitality"].Value, out vitality);
int vitalitySpeed;
int.TryParse(list[i].Attributes["vitalitySpeed"].Value, out vitalitySpeed);
GameAttribute gameAttribute = new GameAttribute
{
gold = gold,
silver = silver,
copper = copper,
diamond = diamond,
vitality = vitality,
vitalitySpeed = vitalitySpeed
};
int lvl;
int.TryParse(list[i].Attributes["lvl"].Value, out lvl);
int hp;
int.TryParse(list[i].Attributes["hp"].Value, out hp);
int mp;
int.TryParse(list[i].Attributes["mp"].Value, out mp);
int atk;
int.TryParse(list[i].Attributes["atk"].Value, out atk);
int def;
int.TryParse(list[i].Attributes["def"].Value, out def);
BattleAttribute battleAttribute = new BattleAttribute
{
lvl = lvl,
hp = hp,
mp = mp,
atk = atk,
def = def
};
Player player = new Player();
player.Init(infoAttribute, gameAttribute, battleAttribute);
PlayerManager.instance.AddPlayer(player.infoAttrib.id, player);
}
}
public static T StringToEnum<T>(string enumType)
{
T t = (T)Enum.Parse(typeof(T), enumType);
return t;
}
}