实际上在很早之前,我曾经发表了好几个Post,来解说我这个计划的总体思想以及一些详细的解说,也许是比较零散吧,可能有部分朋友没有能够全面的了解。先给大家收集一下这些文章的连接,不过也许我那些都说得太详细了,如果您嫌麻烦,可以跳过这些链接,我会尝试用简洁的语言,从另外一个角度描述整个的计划。当然,如果您能够耐心的看完所有的这些东西,自然最好,毕竟详细的解释比起简单的解释不容易引起歧义。下面是连接:
[公告] 重新写的“注册描述”[Sumtec] (这里给大家清楚地讲解了整个项目的目的)
[构想] 关于框架-1 [sumtec] (这里告诉大家我的计划并不是实现一个图像引擎)
[构思] 关于框架-2 [sumtec] (这里给大家展示的是我一个很玄乎的想法,目的是和普通的游戏引擎概念区别出来)
[构思] 关于框架-4 [sumtec] (这个Post里面展示的是几个比较现实的东西,有一些正在这里面实现)
上面都是文字资料,看起来也许会头疼。下面给出一些图像资料:
[讨论] 我的简单框架图[Sumtec] (这里有一个比较完整的结果图,用图形来展示整个计划的结果和想法,虽然比较粗糙,但是总可以了解一些基本的东西)
[讨论] 分布式计算的Action,我的解决方案[Sumtec] (这个是我的“分布式计算”的一个解决方案,说的是“动作”方面的问题的解决。如果没有仔细看前面的文章,也许并不能够很好的了解这个意图)
好了,下面开始简单的进行介绍:
首先这个计划并不是一个具体的游戏计划,其次不是一个传统意义的游戏引擎的计划。所谓传统意义的游戏引擎是指,基本上围绕解决图形系统的图形引擎(例如QuakeIII的引擎)或者围绕多媒体方面的、各种感官方面的引擎。
那么我们围绕的问题是什么呢?游戏当中对象模型的建立、数据保存问题、网络连接与传输问题、分布式处理问题,等等,简而言之就是一个底层的基础框架。对照.NET Framework的作用和意义,就能够明白这个.Game Framework的作用和意义——我们不是仅仅提供一个GDI+,而是所有与游戏开发相关的底层基础。
有人会有疑问,你的想法是不是太大了?对,这个想法是太大了,但是我并没有说立刻要实现,这个只是一个最终的目标。.NET能够实现,为什么我们的计划是不可能实现的呢?Mono不也一样在逐步建立吗?
另外,我在这里向澄清一下一些问题。比如说分布式处理中的数据安全问题。
首先需要说明的是,这个问题不是说一两句话就能够说明白的。如果真需要知道这些细节问题,需要看一下《应用密码学》这本书。
很多人会提出来,如果分布式处理的话,数据安全很难保证。理由如下:
1、.NET的程序很容易破解
2、客户的数据在客户端很容易被破解
3、外挂更容易实现,或者功能会更加强大
对于上面这三点我一一解释:(当然,还有更多的问题,简便起见这里不讨论了。)
1、.NET的程序的破解并不是如你想象的那么简单。
首先.NET的强命名可以保证你的程序不被修改。其次,native和msil混合模式(也就是非托管和托管的混合模式)能够抵抗“反编译——再编译”这种破解方式,因为ildasm无法得到native的反汇编。或者说目前没有什么好的办法对付混合模式的程序。最后,我们应当相信.NET的安全机制,这个机制保证了我们只需要有一个“混合模式”的核心,就可以用这个核心以及.NET提供的安全机制来阻止整个代码遭受入侵。
因此说,.NET的程序的计算过程应当是可信的。或者说我们不需要担心计算过程被破坏,或者计算数据被篡改。但是这样并不解决数据的传输和保存问题,这个问题我在下面一点说明。
2、客户端的数据在客户端的修改也许并不容易。
为了解决这方面的问题,我们需要对整个数据进行加密。实际上我们完全可以做到整个数据是不可被修改的。简单的说一个方案来示意一下(也许有漏洞):每一次客户端希望保存数据的时候,把保存的数据的散列值发送到服务端保存,下一次读出的时候和服务端的散列值比较,如果不一样代表被修改了。这个方法的安全强度取决于散列的方式,如果采用比较安全的散列算法,甚至交由服务器来散列,这个过程应当是相当安全的。这里需要说明一下,这个散列并不是.NET的HashCode函数那种简单的散列,而是密码学里面的散列。虽然意思是一样的,但是安全角度看则完全不一样。密码学的散列要求的是数据的改变对于散列值的改变是不可预测的(不是不可重复的),如果有疑问,还是先看看相关书籍。
3、从漏洞方面看,也许给外挂的漏洞更大,但是不代表我们不能够比目前的游戏做得更好。
我之所以这么说,主要的原因是现在的网络游戏的数据传输实在是做得很弱,从数据安全角度说,也就是说我们完全可以做到比他们更安全。当然,如果他们也采取了和我们一样的措施,也许会更安全一点。但是我想告诉大家的是,如果认真去做着一件事情的话,也许对于数据安全专家才能够感觉到分布式与传统的C/S模式之间,在数据传输安全方面的差别。为什么这么说呢,我举一个例子:比如说我们传输的数据完全可以数字签名,签名之后别人就不能够修改或者伪造我们的数据了。你觉得破解数字签名会很容易吗?我想关于如何破解签名,知道的人并不多,何况我们传输的数据有效时间很短暂,想要有效的进行攻击,是一件非常困难的事情。那么分布式与C/S模式之间的数据安全问题有什么区别呢?有,但是也只有真正研究这方面的人才知道。而且我可以说,这最多是降低了安全强度,但是同样是非常困难的一件事情。
最后,我再强调一下这个项目的目的:把游戏设计者从繁重的、与游戏设计本身无关的那些对象模型建立、传输协议设计甚至数据安全等各方面的任务里面解脱出来,专心做游戏剧情的设计等。
如果我有空,还会继续写一些稍为详细一点的框架结构图出来给大家看。