U3D游戏中简单的属性类和管理

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;
    }


}
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值