分类 游戏开发 中的文章

网络游戏南北互通问题分析

网络游戏南北互通问题方案

网络游戏用户按接入分,有多数的电信用户,次多数的网通用户,又有处于教育网的学生用户,造成了互联互通上极大的障碍。又由于当今游戏用户数据的越来越强的集中性和游戏服务器的分散性之间无可避免的矛盾,无法将游戏平台划分成为一个个独立的世界。

在上次的文档“QQ游戏服务器分布说明”后又补充了一篇“QQ游戏服务器响应速度”,可以发现QQ游戏服务器除去黑龙江,吉林,辽宁三省的大量网通用户外,在各地相对于电信和网通的访问速度都还是比较迅速的。下面是一些分析:

如果我们设计要求最高的实时性游戏的话,本着200ms的基准是完全合理的。

不同情况和不同游戏对网速的需求

网络情况\属性 响应时间 棋牌类游戏 竞技类游戏 实时性游戏
< 250ms 满足 满足 满足
250ms-450ms 满足 基本满足 N/A
450ms-1000ms 基本满足 难满足 N/A
恶劣 > 1000ms 难满足 N/A N/A
……

阅读全文

网络游戏同步法则

网路的硬件也有限,而人的创造也无限,在公网平均130ms的Latency下,是不存在“完全的”的同步情况。如何通过消除/隐藏延时,将用户带入快速的交互式实时游戏中,体验完美的互动娱乐呢?

以下六点,将助你分清楚哪些我们可以努力,哪些我们不值得努力,弄明白实时游戏中同步问题关键之所在,巧妙的化解与规避游戏,最终在适合普遍用户网络环境中(200ms),实现实时快速互动游戏:

1. 基本情况:

(A) 网络性能指标一:带宽,限制了实时游戏的人数容量
(B) 网络性能指标二:延时,决定了实时游戏的最低反应时间

2. 两个基本原则:

(A) 让所有的用户屏幕上面表现出完全不同的表象是完全没有问题的。
(B) 把这些完全不同表象完全柔和在一个统一的逻辑中也是完全没有问题的。

3. 同步的十二条应对策略:

(A) 最大可能减少游戏中的数据传输
(B) 将阻塞通信放到线程池中实现
(C) 永远不要为了等待某个数据而不让游戏进行下去
(D) 利用预测和插值改进游戏的效果
(E) 当使用预测插值的时候传送的数据不仅包括坐标,还需要速度和加速度
(F) 将输入数据枷锁或者队列化(例如键盘消息队列),直到下次发送数据的时刻,传统的方法是在固定的时间(发送数据前)检测键盘,在游戏的原理上隐藏延时
(G) 使用事件调度表,将需要在所有用户客户端同时发生的事件,提前广播到所有用户
(H) 使用多次攻击来杀死一个精灵,尽量减少一次性的、确定性的、延时敏感的事件
(I) 延长子弹或者火箭在空中飞行的时间(在其飞行的同时,在所有客户端进行预测插值)
(J) 所有物体从一个地方移动到另外一个地方都需要时间,避免诸如“瞬间移动”的设计
(K) 尽量使游戏中所有精灵,飞船或者其他物体,都按照可预测的轨迹运行,比如在移动中增加惯性
(L) 充分发挥创造力,尽最大可能的合并游戏中前后相关的事件,合并游戏中存在的延时此问题,需要在技术上改进的同时也需要策划有所重视,规避一些影响较大的设计,巧妙的隐藏”延时”

4. 同步问题现状:

(A) 重视程度不够:很多人尚未意识到此问题的存在,曾有公司花半年时间打算做一款“松鼠大战”的网络版。
(B) 技术上无彻底解决方案:对于多数程序员,单机游戏技术善未成熟就匆匆步入网络时代。
(C) 研究这个技术需要条件:需要有实力的公司才能提供,无此条件,即便有能力的程序员也无法成功。

5. 目前网游的三大技术难题:

(A) 服务器的响应问题:如何使服务器在支持越来越多的人数的情况下提供最高的响应。
(B) 同步问题:如何在有限的网络响应情况下,实现快速实时类游戏,提供最完美的交互。
(C) 服务器分布式问题:如何在统一用户数据的情况下,利用分部式将各个分散的“世界”统一到一个“世界”中。

谁能真正解决好以上三个问题,配合策划在设计上的突破,将使其他人在至少两年内无法超越。

6. 相关补充:

(A) 网格技术现在还是抄作,真正用到游戏中,还有很多技术难点需要突破(比如:目前网格的单位计算时间是以秒计算).
(B) 其实与很多人想法相反的是现在3D技术早已不是主要的矛盾。而现在国内外对于以上三个问题可以说处于同一个起跑线上,完全有机会取得先机。
(C) 现在解决同步问题已经很紧迫,而同时所需要的环境也已经成熟,只要有所关注,半年之内可以得出较成熟的结论

那么具体怎么解决呢?再下一步怎么办?
这就得自己去实践了,我只说这么多了,哈哈,不然又教懒了那些成天再网上搜方案的人。

转载请著名出处:http://www.skywind.me/

……

阅读全文

艺术化的程序设计

计算机的硬件也有限,而人的创造也无限,程序设计美于思维和行为,记得1997年一个叫做 “OMNISCENT”的DEMO使人感慨万分, 作者就像一名艺术家在一粒小小的米粒上雕刻着自己的作品一般。能力虽有不及,仍不妨我校仿,以此挖掘计算机最原始的艺术表现形式:

(此为自去年九月到现在三次发布中的最终版本: EXFORCE)

在DOS窗口中运行DEBUG,然后把横线下的内容复制、粘贴到DEBUG窗口中,回车就可以见到了。

……

阅读全文

关于路径搜索算法的实用性优化

关于路径搜索算法的实用性优化

UESTC 20013080 林 伟 2002.9.12

介绍:本文阐述对著名的路径搜索算法 A* 算法的重要改进,使之更实用于大规模,高效率,多阻塞,模糊求解的任务中。希望本文起一个抛砖引玉的作用,使读者能举一反三。

这里所提及的 A* 算法在许多领域内得到广泛的应用,比如我们熟悉的即时战略游戏正是利用这个算法来实现路径搜索的。 但是人工智能的书上只是说,却很少有实现的例子,理论与实际差距太大,一些专业人士也曾经书写过代码,但代码的优点在于说明算法,而在效率与实用性方面就有些欠缺。

A* 是启发试搜索加动态规划。具体实现依靠两个队列Open队列和Close队列。从一点开始探走几个相邻的格子如果可以移动且当前移动为起点到哪个格子的历 史最佳方法则把那个格子按照估价值从小到大插入Open队列里面,几个方向试探结素后取出估价值最小的节点放入Close再从这里开始试探几个相邻的方向 同样放入Open队列里面,放入Open的条件是1.这步在地图上面是可以移动的,2.这步所在节点在Open里面并不存在,3.从起点到这步的实际距离 比这点的历史最小距离还短满足这三个条件就把节点放入Open队列。具体的算法网友们已经描述的再清楚不过了大致算法如下:

WHILE TRUE BEGIN
  1. 把S点加入OPEN队列(按该点到E点的距离排序+走过的步数从小到大排序) 
  2. 排序队列OPEN队列中距离最小的第一个点出列,并保存入CLOSE队列中 
  3. 从出列的点出发,分别向4个(或8个)方向中的一个各走出一步 
  4. 估算第3步所走到位置到目标点的距离,并把该位置按估价距离从小到大排序后并放入OPEN中 
  5. 如果该点从四个方向上都不能移动,则把该点从CLOSE队列中删除 
  6. 从目标点回溯树,直到树根则可以找到最佳路径,并保存在PATH中 
END

图表1:A*路径搜索算法流程

……

阅读全文

虚拟机及VmBasic编译引擎说明

2001-2002期间开发的虚拟机/编译器开源项目代码和资料

  1. 关于虚拟机及其编译器的说明
  2. VmBasic开发/调试环境的介绍及说明
  3. 关于其他

所有资料可以从下面地址下载: 下载可执行 源程序下载 设计说明书

关于虚拟机及其编译器的说明

记得3DS/MAX里面实现了一个类似BASIC的脚本,Animator里面实现了一个类C的脚本语言,Autodesk公司的软件对于脚本支持的很出色,好的脚本引擎在乎平台无关性、高效性和扩充性,一个脚本引擎的需要对一个好程序来说非常迫切,于是半年前我写了一款虚拟机,最近又实现了一个类Basic的脚本编译器,特性说明:

  1. 高效性和独立于平台:由于虚拟机运行是解释二进制的字节码因此速度明显快于每次运行及时解释的脚本语言,比如Perl和PHP,而虚拟机的核心程序代码也经过数个C++编译器和平台的测试,可以毫无修改的编译运行于多个操作系统。
  2. 充分的开放:通过虚拟机的端口I/O技术,要对它进行扩充变得十分容易,VmBeta指令通过输出/输入的方法向用户自己的程序进行通讯,用户通过处理输出输入消息来达到功能的扩充,使它符合你产品的需要,具体的虚拟机实现和设计说明参考文档 vmbeta.txt
  3. 可设安全级别:通过可设置安全级别,对程序运行状态进行检控

通过半年的修改我自己觉得虚拟机够高效开放,就是vmbasic编译器写的没有多高的水准:完全没有对生成代码做优化,弄出许多繁琐的中间代码,不过还是明显快于及时解释语言,通过测试速度大概是DOS自带的QBASIC程序的三倍左右(可以通过目录下的几个算法程序来实验)。

……

阅读全文