游戏数据表的数据驱动

16 篇文章 1 订阅

前言

之前博文介绍过了,一种代码导出的工作方式《如何让你的程序加载Excel配置文件》。但这种方式存在一些弊端,比如如果想在运行时替换数据(Reload),就会比较困难(解释执行语言例外)。但在目前的游戏架构中,不论是客户端还是服务器,都强烈的具有这种需求。

主要思想

此时,我们的思路是,分离类定义和数据本身,类定义必须生成为导出语言的代码,以方便IDE识别。数据导出成自动生成类型可以识别的文件格式。

导出类结构

    public class TestAllTypeConfig
    {
		public uint Id;
		public uint Id2;
		public string[] StringArray;
		public uint[] uintArray;
		public int[] intArray;
		public bool[] boolArray;
		public float[] floatArray;
		public double[] doubleArray;
		public uint uintType;
		public string stringType;
		public float floatType;
		public double doubleType;
	}

把excel文件中的定义头,导出成代码(上面的例子是C#),程序员不需要在手写配表匹配的类定义以及数据加载代码(ReadFile方法)。其中,数据加载的代码是和数据文件格式相关联的,这一部分会再导出数据一节中讲解。

此外,我们还需要生成数据容器和访问函数,提供给程序员访问需要的数据。

        private static Dictionary<uint, ItemConfig> config = new Dictionary<uint, ItemConfig>();
        public static ItemConfig GetConfig(uint id)
        {
            ItemConfig data;
            if (config.TryGetValue(id, out data))
                return data;
            throw new NullReferenceException(string.Format("配置表ItemConfig不存在id={0}", id));
        }

导出数据

数据文件的核心部分显然就是上面config字典中的数据。这应该不是什么难事,有一万种方法可以把一个对象序列化成一个字节流byte[]。我们可要调用现有的类库(比如json),或者自动化生成代码,把对象转化为流。作为逆流程,我们生成对应的Read方法,负责把数据从流读出,并初始化对象。

此外,我们还需要给这个文件增加一些安全机制,让整个文件的格式更加完整。

|CFGF|----VERSIONCODE----|-------------DATA-------------|CHECKSUM|

|CFGF| 文件头,如果读取错误文件,Read方法可以快速返回错误

|VERSIONCODE| 配置表版本码,如果加载代码和数据版本不同,Read方法同样会返回失败

|DATA| 之前提到的数据部分

|CHECKSUM| 文件内容的MD5校验和,防止文件内容被篡改的情况等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值