2006年12月28日星期四

地震了

晚上,8:30。

我们正待在屋子里聊天,陈拓琳突然说:“地震了”,然后果然觉得脚下微微有些摇晃,相顾愕然。于是我提议出屋暂避,便逃到屋外。天气较凉,大家都不愿意走远,于是我们说:要是真震的厉害,可能就是我们这些躲得半远不远的先挂了。

刚回屋不久,又有震感,于是又落荒逃到门口。正在此时,女友从深圳发消息过来:“地震了”。

震得好远,走的好快。

待到局面似乎稳定下来,回屋查阅了一番消息,原来是台湾恒春发生地震,自称6.7级,厦门地震局称7.0级,美国称7.2级,日本人趁乱发话:一道海啸奔菲律宾去了,三英尺高。真是.... 残念!

可以预见的是,第二天到了公司,这将是一个主要讨论的话题。总的来说,这次地震看来是一个娱乐性质的活动,兼给大家扫盲。

然而,恶果要待到稍后才能显现出来:经过台湾附近海域的海底电缆,一口气断了六根。所有美国网站几乎均无法访问或速度极慢,MSN无法登录。

大地一怒,威力如斯。

2006年12月9日星期六

看了《云水谣》

网上似乎很多人都说这个片子好... 看过以后,我只能觉得:和这些人的审美观严重不符合。

2006年10月6日星期五

设计者是无奈?还是心态不端正?

前两天看了一部电影《狗狗的心事》,开头有这样一段情节:主角(可能是?我不敢肯定是因为我没看太懂)山田作为一个广告设计者,饱受来自上级、客户、承排广告主演明星经纪人的蹂躏,综合了各家的意思,最后拍了一个垃圾广告。

这倒让我想起了一些往事,刚工作的时候,同寝室来自浙江大学工艺设计系的室友也遭遇过类似的情况,各个主管纷纷在他设计的外形上加入自己的需求、喜好,结果就是一个他称之“奇丑无比”的壳子。

细想下来,其实我又何尝没有遇到过这样的情况?大约是96年吧,我帮人做一个项目,因为当时win95刚出来,觉得很漂亮,于是在界面上采用了许多95的设计元素,觉得颇为不错。但是随即被人认为“菜单太小,功能隐藏太深”,最后就修改成为中间一排大按钮的朴实的布局了。

曾几何时,多少人感慨过外行指导内行,由一批“美丑不分”的但是偏偏掌握了资源的人领导着专业人士,制造了一批又一批的“垃圾”,他们专心致志的扼杀艺术品,扼杀新事物,扼杀一切有创造力的东西。

我也感慨过。

但是十年过去了,我的看法却有了很大的转变。首先,外行捣乱的事情的确有很多,这点我同意。但是还有很多事情并非是想像的那么简单,因为:

1. 外行领导内行是必须的,随着指挥者管辖领域的扩大,被指挥人员必然是多行业的,指挥者不会了解所有的行业。

2. 外行有资格提出他的需求和意见,这里他的权力。因为所有的工业产品都是由内行制作给外行人使用的,换言之,专业人士的产品必须为非专业人士所接受。

3. 内行容易神秘化自己的领域,以偏见的眼光审视外行的意见。


我们需要了解一件作品它的受众群体是哪些人?作品必须符合它目标人群的口味。比如你给MM送礼物,你得挑选MM喜欢的送,比如鲜花巧克力化妆品衣服首饰。你不能送给她一个双核CPU。可能你觉得酷睿很好,密密麻麻的管脚,优雅美丽,性能又高还省电,但是她会觉得扎手得很。

如果你的作品是给自己欣赏的神品,那么你可以随意发挥你的想法,比如梵高;
如果你的作品是给专家欣赏的艺术品,那么你需要研究当代的主流,比如张艺谋;
如果你的作品是给大众欣赏的工业品,那么你需要琢磨俗人的口味,比如周星驰。


事实上,很多专业人士并没有能力去琢磨清楚俗人喜好什么口味(是没能力,不是不屑或没时间),因为人了解和自己想法不一样的人,是很难的一件事情。在你不能了解的情况下,应该多听听了解那些想法的人的意见,可惜,专家们喜欢维护自己的权威,不愿意接受这些意见,他们更喜欢神秘化自己的领域。

什么叫神秘化?表现出来就是:“你不懂”,“说也说不清楚”,“这些东西不是一下子就能解释明白的”,“你问这些干嘛”,抑或很不耐烦的乜一眼,扬长而去;如果是领导,那么就只好先屈从,然后回家再骂。

其实在拒绝这些外行的同时,专家们浪费了自己的生命,他们在花力气制造一些精美的垃圾。

话说回来,当时我按照修改了界面后,我觉得用户都是猪头,区别只是大猪头或是小猪头,但是实际上,用户用的挺爽。后来我在另外一个软件项目中,上来就采用了这种布局方案,果然,用户赞不绝口,纷纷称赞我的东西做得比别人好……(那一刻真是深深体会到了买椟还珠的感觉。然而多年以后我看到很多人的计算机桌面,他们把一排一排的图标摆在上面,只图点起来方便,全然不似我这样分门别类,那时我才算是大彻大悟了)

所以说,设计者们,请不要抱怨别人的无理,请不要嘲笑别人的无知,放下架子,要对每一个提出要求的人心存感激,要对每一条意见诚惶诚恐,要对每一个疑问耐心解答,就按照用户的审美观,用自己的技术去制造作品。

---

ps

a. 那部电影严重不符合我的审美观。看得我晕头转向(就最后一段和毛毛对话的部分觉得不错),还是好莱坞的快餐电影适合我的口味。

b. 那个广告投放者是做狗粮的,他们的要求是要突出自己产品使用的优质材料,于是山田就打了四个大字“国产牛肉”,看得我真是感慨。什么时候中国人也能做到这一点,让“国产”成为“优质”的代言词,是值得大张旗鼓宣扬的呢?

c. 你觉得人和人看法、喜好不同并且难以理解这点很不可思议吗?其实我们身边就有这样的例子,大部分MM喜欢逛街,而大部分BOY都视为畏途。OK,你可以不理解,但是你要接受。类似的,你要像初恋追MM的时候会 -

心甘情愿的、
欢天喜地的、
受宠若惊的、
无比幸福的


- 和陪MM逛街一样去做项目,这样,你会从用户的认可中体会到成功的乐趣的。(21世纪了,人不好多泡MM,就多做项目吧,能多快乐几次)

2006年9月29日星期五

国庆放假了

似乎前一段时间精力养的比较足,但是杂事太多,看看假期能不能动手作一些东西出来。10月7号回来看看。

2006年9月13日星期三

关于MYSQL INSERT命令的两点用法

INSERT指令的ON DUPLICATE KEY UPDATE...可以在插入时发现有重复的记录自动转为UPDATE。(4.1以后的版本才支持)

另外INSERT .... values (...), (...), ... 可以一次插入多条记录。

这两点今天才知道,对优化效率确有帮助。

2006年9月10日星期日

关于狭小地图的大量NPC寻路算法

在 GameRes 上,看到这个问题:如果很多NPC同时在一个场景寻路,又不能互相穿透,那么很容易导致卡死,这种情况如何解脱?

基本上,“规则 + 限制”就有可能陷入锁死,寻路是一种规则,碰撞则是是一种限制。有时候,特殊的场景和恰好的时序会导致系统到达一个稳定的状态而无法继续。看上去可能比较难这么巧合,但是实际上这几乎是必然的,因为稳定状态随着限制增多(比如地方狭小之处,又或是存在大量人物),而系统一旦到了稳定状态就会停滞不前。所以规则中必须有一种可靠的打破平衡的方法。

一个比较简单的思路正如论坛上有人提到的,参考 ethernet 的数据发送碰撞检测退让算法 CDMA/CD(每次冲突退让 random(min(2^n, LIMIT)) 个时间片,n 为冲突次数,LIMIT 为最大退让时间,如果 n 到达最大值则丢弃数据)。这个方法容易想到,但是实际上并不是那么有效,因为:

1. 以太网在发送数据节点较多、通讯负载高的网络下效率会下降,而且随着负载高下降得很快。根据经验,
传统的以太网带宽利用率是 1/e,大概是 30% 左右,也就是说 10M 的以太网在在负荷较高时只能维持 3M 左右的通讯数据带宽。(现代普遍采用的是交换式的网络了,可以大量减少冲突,才能保证 1G 以上的应用)

2. 以太网的表现是机器越少,通讯越少越实用反之则不实用。而我们的目标是在高负载的时候还能够继续的工作而不陷入一种稳定状态,随机退让的思路刚好不符合我们的要求。

举一个具体的例子:

------------------
XXXYYY
XXXYYY
------------------

如果 X 往右,Y 往左,那么显然的,不论 X、Y 怎么退让(等待一段时间寻路),那么这个系统都是不会脱离稳定状态的。

关于打破平衡的方法很多,这些都和具体的情况有关,如果我们考虑的是游戏中的自动寻路,那么我们可以借鉴一下真实世界的方法:

如果很多人在一个拥挤的空间朝各个方向前进,那么可以想象的是,这些人会陷入混乱,甚至会导致悲剧发生(比如球场骚乱导致践踏事件,实际上,大家争先恐后的脱离危险地区的方法效率是不高的,所以才导致了更多的人遭到不幸)。真实世界真正能够有效的维持交通秩序,是因为大家有一套限制比较严格的规则,避免出现这种情况发生。比如,靠右行走;排成纵队而非横列。如果你试图建立一个这样的系统,大家随意行走,只遵守物理规则(不能飞,不能穿透),遇到瓶颈自动恢复,基本上这是无解的。

所以,综合上面分析的结果,如果你期望游戏中 AI 看起来不那么傻,那么就需要从以下几个方面完善你的寻路算法:

1. 一个区域内,如果寻路人员的空间密度小于一定数值,自由寻路。
2. 如果密度较高,则靠右行走,限制队列宽度。

那么这时,问题的关键就在于第二点如何实现,如果采用的是 A* 类的算法,那么我们可以简单的在地图上做一些标记来辅助我们解决这些问题,例如:

---------------------
RRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUU
---------------------

R、S、T、U 表示不同的四元组:
R - (1, 10, -, 3)
S - (1, 10, 3, 12)
T - (10, 1, 12, 3)
U - (10, 1, 3, -)

四元组的含义是,(向左走开销,向右走开销,向上走开销,向下走开销,-表示不可能),这样,我们寻路时,根据寻路的下一步方向,可以估算一个符合我们期望的开销成本,促使选择一条靠右走,宽度为 2 的道路。在较为拥堵的时候,禁止选择走 > 10 的节点,如果寻路失败,则原地等待一段时间。这样,发生完全堵死的情况就很不容易了(实际设计算法中,还需要考虑一些更复杂的具体情况)

最后,我们是否需要在所有场景一点一点的去描述这个四元组?这是不必要的,除非非常特殊的地图,可能需要人为的设置(好像划分单行线一样),一般来说,这些数据可以由程序根据我们的规则自动预先生成。

2006年9月3日星期日

由“谁证明了庞加莱猜想”想开的

前不久,看到了丘成桐宣布最后完证了庞加莱猜想,似乎是一个能让中国数学界振奋的消息。
然后随后引起了不少质疑,最近又看到丁伟岳在其BLOG上提了最新的质疑,包括以下内容:
  1. 佩雷尔曼(俄)已经解决了庞加莱猜想(8月22日国际数学界大会的开幕式上,国际数学家联盟宣布授予佩雷尔曼菲尔兹奖,但其本人已经拒绝)
  2. 称国外媒体(包括华尔街日报发表署名文章、美国数学会的会刊《Notices》两个出处)都谴责了国内这些关于猜想的不实报道。
  3. 杨乐,曹怀东、媒体就中国数学家在猜想上贡献的说法上有出入。
在这里,未经详细的考证,我无从知道事情的真相并发表评论,我也没有足够的时间去一一核对这些说法,并且分析各类旁证(仅分析一个人提供的说法显然是不够的,即使国外的杂志上也可能有不同说法的文章,贸然的将国外杂志的一两片文章当作圣经一样作为佐证显然也是不足的),我只是很疑惑:
  1. 中国数学界已经多年没有出过像样的成果了。
  2. 中国数学界多年内很少出有分量的数学家了,即使加上所有华裔,其数量依然不足以称道。
  3. 中国人口占世界的1/5,并且基础教育还可以,几乎所有的有数学潜质的人都有受到足够基础教育的机会。
我很遗憾的是,我没怎么听说过国内的数学界就数学问题本身进行广泛的争论,而是就人品、道德问题进行不断的攻击。不论是丘,还是丁。然而,就道德问题而言似乎并没有改善,纵观这二十年来,中国整个学术界都在滑向道德败坏的深渊。

2006年8月26日星期六

与外挂的持续斗争中

自从采用了运行中抓查外挂使用者并处以罚款之后,就这几天的观察来看,在和外挂的较量中我们暂时处于上风。但是这种状态是通过杀敌一千,自损两千的手段来维持的,由于外挂也顺势更新,躲藏抓查,导致核查手段越发的诡秘,结果就是不够可靠,误抓率较高,导致普通用户也受害。

仔细思考下,虽然对自身伤害不轻,但是仍在可以接受的范围内,既然如此,就有必要坚持,只要把外挂扼杀在萌芽中,逼迫外挂的制作者转行,那么就达到目的了,解除了长期的隐患。

问题在于,如何尽量减少自己的损失呢?

仔细想来,关键在于减少更新,更新的次数越多,就越容易出错,而且自己的手段也将越匮乏。但是你一旦更新,外挂制作者也会跟着更新,然后停掉旧版本,号召大家更换新版本,这样就逼迫你也尽快更新。那么,我们该如何做?

首先,我们的目的是为了震慑外挂的使用者,惩罚这些人,所以,我们并没有必要时时刻刻检查,只需要随机抽几段时间进行检查就可以了,比如每次检查以后,隔random(60)分钟再进行检查,虽然检查的次数减少了,但是因为挂机是一个长时期的行为,所以你总是能抓到他们,一样可以进行处罚。而对于外挂制作者来说,他们很难获得检查手段,因为必须至少等待半个小时才有机会。因为逆向工程必须经过多次跟踪,测试,所以如果检查的频度少了,对手破解和验证的时间就加长了。另外,外挂制作者为了避免自己的客户遭到损失,所以可能在游戏更换了检查手段以后,暂停外挂的登录,此时,我们也可以相应的关闭服务器端的检查,让外挂制作者无从验证自己的反外挂手段是否生效。也就是说,他必须让自己的客户陪着自己一同冒险,这样,就能够使得他的客户动摇对制作者的信心,从而达到遏制外挂蔓延的目的。

但是,如果我们平时不检查,偶然才检查,那么外挂只要一遇到检查就立刻切断连接,等过了风头再登录不就可以绕过检查了么?为了避免这种情况的发生,我们可以平时依然做检查,但是只采用比较常规的,早已被外挂制作者破解的方法,而且这些代码都是随机打乱的,让外挂无法通过程序判断收到的检查方法是更新的,还是老方法的变种,这样,外挂就不能采用下线躲避的方法了。

总结说来,就是反外挂服务器时时刻刻都进行常规检查(这些检查稳定可靠,另外会不停的变种),每隔random(60)分钟进行一次强力检查(采用最新手段),如果外挂制作者关闭了验证,我们也关闭强力检查。

通过以上手段,我们可以使得外挂制作者需要更长的时间才能找到破解方法,并且在这段时间内,不能关闭外挂的登录,相当于我们挟持了所有的外挂用户,让他们承担破解期间的惩罚风险。

其次,我们还需要采用其他技术手段上避免外挂用户长时间挂机。目前,我们在内测区试验了汉字识别码的技术。这是所有中文游戏的一个优势,英文、阿拉伯数字识别即容易,实现方案也很多,而中国人相当于大脑里自带了一个庞大的字符集,可以进行更大范围的模式匹配,所以,我们就可以利用生成汉字图像,让用户来识别的手段避免外挂长时间自动挂机。汉字通过选择字体、旋转,变形的手段可以大大的增加程序识别的难度(普通的噪音一般没有必要,因为降噪技术是非常成熟的),另外,还有一种较为极端的手段,就是将两个汉字部分重叠在一起,需要用户识别其中某一个字(相当于强力噪音),因为某些地方有重叠,倘若试图分离它们,可以说,一般的程序员几乎没有足够的知识来做到这一点。

究竟效果如何,也许还要到两周以后才能知道了。

2006年8月24日星期四

与外挂之间的斗争

这两周一直集中力量针对反外挂进行更新,经过一番角逐,到达了一个高潮阶段。目前很难说谁能压倒谁,但是的确有了不少心得。

通过间单技术手段(即不考虑服务器端使用类似图灵测试方式去分析客户端行为的话),是不可能一劳永逸的封堵外挂的。如果抱有这个幻想,那么必然会在这场角逐中失败。

考虑到和外挂之间是一个长期的较量,那么:服务器端必须有快速反应的机制,也就是说客户端能够动态的处理服务器端的检测要求,服务器端能够进行低成本的快速部署。如果满足这两条,那么就有了一定的技术基础。但是单凭这两点还不足以和外挂抗衡,考虑到你的对手和你一样聪明甚至比你更高一筹,你应该利用掌握了服务器端,是规则制定者的优点强化自己的有利地位。换言之,配合检测手段,还必须有一定的惩罚机制用以警戒违规玩家,这个惩罚机制不能过于暴力比如封号,也不能过于温柔比如只是踢下线。

问道采用的策略是发现后就进行处罚,需要缴纳游戏币才能够继续进行游戏,在一定时间内被抓获的次数越多,则惩罚的越厉害。最终,我们期望到达这样的效果:外挂制作者提供版本,服务器端针对此版本下传检测代码,抓获所有在线使用外挂的用户和后续登录的用户并予以处罚;外挂制作者很快破解此手段,然后更新版本。接下来重复此过程,最终导致用户无法承受高额处罚而只能放弃使用外挂。

可以说,在这场斗争中,大部分情况反外挂系统属于被破解的状态,但是每次反外挂系统都能捕获一批违规用户,也就达到了用户不愿意使用外挂的结果了。如果得不到大量用户的支持,外挂制作者就无利可图,只能停止更新并转行。

至于如何能够快速部署,保证客户端可以动态执行检测服务器端的检测手段,则是一个具体的技术问题了。

2006年8月20日星期日

双输的局面

这两天问道的脱机外挂终于出现了。

为了防止脱机的泛滥,我在用户登录时发送了一段自动生成的 LPC 脚本代码到客户端,并且询问客户端利用这段脚本计算出的结果,如果没有获得应答或是应答错误则断开连接。

很快,脱机外挂将自己转为嵌入客户端的内挂。随即,某些用户发现利用客户端在外挂成功登录进入游戏成后,客户端就没有作用了(因为我只在登录时挑战了客户端一次),于是他们就很聪明的让客户端帮助登录,然后关闭客户端,实现了一种脱机的替代方案,并且很得意的在外挂论坛上宣布了这个方法。

看了他们的帖子,我颇为无奈。其实,对于服务器端来说,连续挑战客户端是何等容易。只是我不愿意为了这个消耗额外的资源,在发现这个技巧以后,自己闷声发财就好了,又何必出来炫耀呢?我加上了持续挑战以后,使得他们无法再利用这个漏洞,而且也浪费了服务器端的资源,最终也会影响用户自己的正常游戏。正所谓是双输的局面啊。

超频的乐趣

今天新的计算机基本安装完毕,尝试了一下超频,表现还不错,从2.1G超到了3G。各项 benchmark 测试表明性能的确进步不少,而且到目前为止似乎都还稳定。

超频本身带来的性能其实可能微不足道,虽然看上去性能指数高了不少,但是实际上系统的瓶颈往往不在增长的部分,之所以带来乐趣,主要还是觉得没有花钱就获得了更佳的效果,也就是有种物超所值的感觉。

把这种心理代入到游戏中,也是类似的。如果玩家发现了某个BUG,即使并没有带来什么重大的利益,很多人也会乐此不彼的利用这些BUG并且获得了心理的满足感。如果是这样,那么又何必一定要修改这些BUG呢?

2006年8月4日星期五

不要让未经证实或有争议的论据削弱文章的说服力

这是我在OGDEV上阅读到的一篇文章,被作为精品推荐,阅读了以后,姑且不谈文章本身的价值,就其所举证的论据而言,有很多不正确的地方,很难想象这样的文章对了解游戏制作和有能力决策制作方向的人会产生影响,如果面向的不是这些人,那么这篇文章又能起得什么作用呢?

——2D游戏一般是指平面游戏,游戏中通过层来勾画整个世界;而3D游戏则不同,它是通过在虚拟的空间中搭建3D模型来实现3D空间的。
——无论是2D游戏还是3D游戏,在国内都有着大量的作品。其中最成功的代表就是网易的大作《梦幻西游》和暴雪的大作《魔兽世界》了。
——以前与很多游戏策划者聊天,其中有人说我玩的游戏太偏了,我明白他指的应该常玩的游戏应该是那些国产的在排名榜上前几位的作品。
——其实那些作品我无一例外的都玩过,可就是觉得很难像一个玩家一样投入的去玩。我把自己的这个现象归咎于经常上网浏览那些“大作”的结果。
——2D游戏在国内总体来说仍旧占据着主导地位,至少我感觉是这样的,而且我也承认这一点。不得不承认!记得以前看过流传在网络上的一篇《一个网管的自述》的文章。里面说到了一些,在网吧里的网民们对网络对计算机知识的匮乏。
——我们的玩家有多少是那样的人呢?我没统计过,不过2D游戏的火爆,或许可以说明一些问题。
——2D游戏,从开发到运营,从制作游戏到服务器构建,都要比3D游戏省钱的多。不过这些对于我们的上帝——玩家来说不重要。重要的是简单。
——这个简单是从方方面面来描述的。
——首先,技术上2D成熟。所以客户端通常不大,玩家下载速度快,安装容易,更新便捷,客户端程序稳定。这对于那些还没有学会灵活使用计算机或者网络的人来说,是最重要的了。例如:那些什么基本配置、推荐配置,对于电脑知识的小白门来说,无疑是一行又一行的天书。


显然,同等内容的情况下(有模型的RPG),2D的客户端会远远大于3D的客户端的,很多人认为3D比2D多一个D,因此占据的空间也应该更大;也有一部分人认为,像WOW,远远超过了一般的2D游戏,因此3D游戏客户端大于2D游戏的,但是这里忽视了一点,就是WOW的内容庞大,相对应作对比的2D游戏内容并不在一个量级上。这一点,如果了解程序或美术知识,就不应该犯此错误。

——其次,上手简单。大部分2D游戏都是极其简单的操作,所谓一鼠走遍天下。前两天教一个朋友玩WOW,她使劲的在电话的另一边问我怎么进入游戏,我告诉她输入账号密码然后建立角色啊。她说人物已经进来了,然后怎么进入游戏啊。我晕,这叫什么问题啊,后来我充分发挥想象力,终于明白了,她的意思是怎么让人物走起来,也就是基本操作。30分钟的刻苦教学,最后她还是决定不玩了,虽然她也觉得WOW得世界很漂亮。

如果在真正的3D世界中任意行走,显然目前的情况下难以简化操作界面;但是如果是客户端3D界面,服务器端2D世界,那么,操作完全可以简化到和2D游戏一样简单;或曰,这算什么3D游戏,这是伪3D!问题在于:为什么一定要制作纯粹的3D游戏,所有的游戏都需要这样来表现吗?这本身就是一个很有争议的问题,引入这种观点,无形中削弱了读者对最终结论的关注程度。

——我当时似乎明白了一个道理,简单意味着让人能够来玩,别管游戏好不好,没人玩一切都是空谈。那么WOW里面各种战斗技巧与梦幻西游的回合制相比,到底哪个更适合中国的玩家呢?
——最后,游戏市场简单。您看咱们的市场上,《大话西游》、《梦幻西游》、《梦幻大话》、《大话梦幻》,这么多游戏都是2D得,咱们到底玩哪个啊?要我说啊,哪个都一样,没啥差别。只要随便玩会了一个,其他的也就绝对不需要从新上手了。仔细看,某些游戏连界面都和某某西游几乎一致呢。


这点看上去没错,但是实际上,2D游戏难道界面就一定限制死必须和梦幻西游这些作品一样吗?当然不是,至少问道在制作时,完全可以避免和梦幻西游操作一致,但是有必要这样做么?事实上,这是出于市场考虑的结果,策划放下了自己的尊严而采用兼容的方式进行界面设定,比如各种软件更新换代的版本总是需要保持和前辈一致,甚至不惜保留很多过时的,粗糙的设计。制作任何一个作品,都需要考虑易于上手,和现有系统相似,这也是大量成规的原因之一。因此,实际上这和简单没有直接关系,3D游戏也可以普遍的抄袭其他著名游戏比如WOW的界面设定,这点难以作为2D/3D的区别。

——在这样的市场环境里,玩家对2D游戏很容易形成一种习惯,这时,2D游戏就不仅仅是一个游戏了,更成为玩家的一种习惯性标准,当玩家进行别的游戏的时候,总回来与以前的游戏相比较,所以突破2D游戏模式就变成了打破玩家游戏惯性,难度显而易见。
——不过,这里还想顺便提一句,玩家对游戏的态度,仅仅是娱乐,他们是因为这个原因才会来进行游戏的。千篇一律、一成不变的游戏是早晚要被淘汰的。
——2D游戏除了比3D游戏简单以外也更适合国内网络环境的发展。
——2D游戏由于比3D游戏制作简单,所以网络数据的传输量通常远小于3D游戏,服务器要求也远小于3D游戏。最近某游戏利用这个特点,把一台电脑多个帐号同时在线的多开当成了游戏的特点来宣传,再次证明2D的优势。


这点对绝大部分制作通讯部分的程序员来说,是明显错误的。对服务器端人员来说,完全看这个游戏怎么设计,我看到的大部分3D RPG游戏而言,服务器端的消耗显然不会增加。

——国内网络的质量在几年前得到了一个飞速发展,56K Moden很短的时间就被淘汰了,随之而来的就是adsl时代。可是自从南北的电信、网通分家以后,国内网络质量在4年左右的时间里几乎没有任何发展和进步。
——游戏在电信的网络环境影响下,几乎原地踏步地发展2D产品,这是个偶然环境造成的必然结果。

关于网络质量的问题,以我在通信领域(这是我的本行)的了解,这4年显然发展的不错,而不是没有任何发展和进步(真正卑劣的是两大运营商之间的人为壁垒)。至于消耗的网络带宽是否被2D/3D的表现形式所决定,多数通讯设计程序员都不会认可。

——自从2D《梦幻西游》西游出现后,这个“伟大”的游戏,不但影响了数以百万计的玩家,还同时影响了一代游戏开发者、运营者。国内游戏开发者,在摆脱韩国的泡菜风格后就只能死死抱者《梦西》模式瓜分市场份额。这即是说明我们在3D技术上的不成熟,也证明2D依旧有坚实的市场。
——农村包围城市的市场战略不仅在运营上,在产品开发定位上依旧可行。
——2D游戏虽然成本比3D游戏普遍要低一些,可是在运营上赚取的利润不但不低于3D游戏,甚至大部分都比3D游戏要高。从市场风险上来看,2D游戏的风险要比3D游戏低很多。代理国内的2D就更是物美价廉,总比追者老外的屁股,求他帮你改进更新游戏缺陷要风光。
尽管如此,由于2D游戏在国内仍旧有着庞大的客户群,所以,时至今日,梦幻的姊妹篇仍旧被不断的克隆。
——我们不得不担心,未来2D“家常菜”,是否能代表中国的游戏研发水平?未来,我们用什么样的产品去出口国际市场?去赚取国际网民们的“刀乐”呢?

在阅读完这片文章以后,我很惋惜。毕竟里面有一些整理过的材料和分析内容,但是这种文章难以对一个决策者产生作用,其中的谬误足以打消他们采信这片文章的信心。我认为,这也许是一种传统的说服手段,通过大量举证(不论正确与否)甚至夸大其词来博得读者认同。我当年做文字MUD时就有很强的感觉,某个门派偏弱,为了让巫师修改,门派的玩家夸大其词甚至胡编乱造,期望引起巫师的重视。但是实际上,如果你的论证中有一小部分错误、或是一些争议性很强的论据,那么,你几乎已经先丧失了说服别人的机会。

2006年7月28日星期五

搬家

今天公司搬家,恰逢格美离境,余孽尚在,雨下个不停,给搬迁工作带来了不少麻烦。上午我和杨煦、陈拓琳前往科技局做项目答辩,晚上我还要回深圳看望女友...

真是繁忙的一天啊。

2006年7月24日星期一

捕捉事件并传递处理的过程

今天和叶振华讨论了一下他在XLIB_D(脚本支撑库)中关于捕捉并处理事件的过程,和我最早的版本(简单事件捕捉)不同,他引入了子事件的概念,因此组成了一个事件树,如下:

                [战斗情况变化]
                      |
           /----------+----------\
           [战斗结束] [新一轮战斗]
                |
      /---------+----------\
    [攻击方胜利] [防守方胜利]

如果脚本捕捉[攻击方胜利]事件,[战斗结束]事件,那么当系统遇到了具体的[防守方胜利]事件,则将发生[战斗结束]事件(其中传递的参数说明了这是防守防守方胜利),因为没有捕捉子事件,所以就传递给父事件。那么,如果在处理[攻击方胜利]事件时,还希望执行[战斗结束]事件中的一些代码呢?我认为只要在[攻击方胜利]的脚本中的合适位置简单的调用[战斗结束]事件的处理脚本就可以了。

感觉这个思路是很不错的,虽然支撑系统复杂了许多,但是的确有利于脚本简单轻易的捕捉它所关心的事件并安插处理代码,在新项目中可以继承这个思路,只要重构一下实现代码就可以了。

如果单条记录小,数据库的性能能否提高?

记录小速度快是显然的,但是我要讨论的并不是泛例,而是具体的日志系统。

游戏运行中会产生大量的日志,为了便于管理,日志越详细越好,但是日志量太大,又会影响数据库的性能,所以有必要在两者之间达成一个最佳结合点。

问道一个服务器每天产生近千万条的日志(已经过滤了一部分不重要的日志),当服务器日志超过四千万条时数据库的性能会有比较明显的下降,所以数据库大概只能记录最近三天的用户日志。但是我需要记录更长的时间,比如7天甚至一个月。

服务器的硬件配置已经足够好了,只能从软件角度考虑解决方案。

可以做的事情是,把日志记录的字符串字段转为整数类型,以此减小记录的长度。这样做肯定可以减少数据库的大小,但是能不能带来更好地性能?也就是记录超过四千万条以后,能不能对性能没有什么太大的影响?如果对性能没有明显帮助,那么磁盘空间本身并不值得珍惜。

日志系统主要是进行插入操作,我认为插入记录本身所需要的时间不应该受到已有记录数量的限制(简单的申请PAGE就可以了,申请PAGE的时间显然不应该随着库变大而有什么明显变化),关键时间是花在索引上了。如果记录的索引变小,那么B树变小,相同的内存缓存可以保留更多的B树节点,这样可以使得查找、建立索引的时间变少。但是,如果记录比原先缩小一倍的话,也许B树的I/O操作仅仅多了一次,如果是这样,小记录能获得明显的效率提升么?

需要测试才能有结果。

2006年7月22日星期六

竞争与服务质量

今天在天涯上看到一帖,如下:

『IT视界』 [大话IT]神舟电脑,你对得起我的血汗钱吗?

作者:程序员or民工 提交日期:2006-7-9 15:30:00

我两年前买了个神舟P203C笔记本,当时是这样想的:1,我从来都只买国货;2,我没有多少钱(告诫兄弟们,没钱别玩笔记本,丢人);3,神州一年包换!!!
刚买没有多久(两个月吧),鼠标开始忽悠我了,不听使唤了,必须重起电脑才行!汗!!!我当时忙赶项目,也就没有去管它了。快到一年的时候,键盘上的"{"不能使用了,不停的自动按键,我是程序员呢,这个键不能用怎么行?于是我和他们的售后联系,叫我周一送修(他们的维修站是双休的,周六、日维修站没有人!!!)。
星期一我一大早就赶到他们的售后服务部,他们说是我人为损坏,我操!!!换键盘要200元!我换个毛啊,他妈的外接键盘都不能用,我操!!!没有办法,我认了,回到公司,写了个程序,用低级键盘钩子把"{"建换到"F9"键,将就着用了。
可是今天键盘上的"-"键又不能用了(也是不停的自动按键)!!!我操!!!
神舟,你他们别提什么民族工业了,你就是垃圾!!!以后大家别买神舟!!!

--------------------------------------------------------------------------------------------------------------------------------

对神舟并无什么评价,毕竟没有打过交道。不过某些设备供应商无法保障售后服务这类事情是常有听闻,遇到的人也不少。

那么,如何提高售后服务?改善商家经营理念?提高监管力度?这一切当然有作用,但是我想:某类产品(不论是软件抑或硬件)在当前的质量条件下(也就是该产品供应商的质量保障体系的成果),故障率符合统计学上的分布,不妨架设为p(单位产品故障率)。维修一个故障的平均成本如果为c(这个成本可能包括客服人员,技术支持,配件更换,物流),那么保证解决单位产品故障的成本则为c*p。

所以,如果需要提供优质的售后服务,前提就是必须在销售中考虑这个成本即c*p,如果基于市场竞争的原因从而在销售定价时无视c*p,结果就是不可能提供优质的售后服务。

简单说来,优质的服务并不能单纯的通过竞争获得,竞争是一种淘汰手段而非优化手段,如果市场导向为低廉的成本,那么竞争将导致最低价格者生存,这点恰恰和优质服务相反;如果市场导向为其他因素,那么则会淘汰最不符合相应因素的选手。

或曰:如果供应商不提供好的服务,那么就会被购买者所拒绝,最终被淘汰、逐出市场,那么剩下的不就是服务质量较高的吗?我不同意这样的分析方法,因为这里面有太多的推论,而且有许多尚未验证的假设(如不提供好服务就会被消费者拒绝),事实上,如果主流消费者更青睐低价,那么,试图提供好的服务的供应商一开始就死亡了,因为它的高价本身就是和市场选择背道而驰的。

诚信也是相同的道理,如果竞争环境决定道德沦丧的人可以获得更大的利益,那么必然迫使越来越多的人丢弃道德。教育可以改善诚信缺失的问题,但是我认为教育的目的并不是赋予所有人自律的诚信之心(历代王朝不正是这样做的么?),而是赋予大部分人鄙夷缺乏诚信者的意识,也就是说,去改变这个环境的竞争规则。

回到刚才的话题,企业在一个价格竞争的市场中需要生存,则需要降低成本,降低成本的方法之一就是加大质量保证的投入,看起来成本提高了,实际上,质量提高以后将会降低p,从而降低c*p,找到曲线的驻点,就是最佳的质量成本投入点。不要丢弃质量保证,也不要盲目的在质量上进行无限制的投入。

2006年7月16日星期日

文王何以王天下

想必初中生都可以回答这个问题:纣王失道寡助,文王反之。事实上书本上从来都是这么说的,这是一个简易的泛理论的答案。

史书上有言:文王实施各种良政,如“有亡荒阅”,低税政策,开放山林湖泊,废除酷刑,最终团结了周内部的各种力量,影响了其他方国和商王朝直接统治下的部分贵族和平民,最终商益弱,周益强,于是乃有天下。

然而,真是这么简单么?

即使是一个公司,小到只有几十人,如果你为员工着想,不去做其他公司那些令员工厌烦的事情,是不是就能团结一致,专心向上,最终脱颖而出呢?当然不见得,至少我这里就可为佐证。为何如此?要知道即便是至亲之人如父母、子女、兄弟,为你尽心着想,也可能落得一身埋怨,抗拒重重。比如小时候家长督促你做作业,你心中厌烦之极,只恨父母未经自己允许就强迫自己来这人世间。

又比如项目中,你苛求细节,想把项目做的尽善尽美,有人觉得你吹毛求疵;你培训辅导,希望大家能够迅速成长,以便作出更好的作品,有人觉得你自以为是;你调和矛盾,避免激化,以便彼此能够精诚合作,减少内耗,有人觉得你是非不分,赏罚不明。便有一颗赤心,又有何用?或曰,你水平太差,手腕太少,所以众戚不服,诚然!

所以说来,文王能王天下,岂是一句简单的“得道多助”能概括的来的?多助固然需要诚心(道),也需要各种方法(术),方法并非纸面上简单描述可说得清楚的,毕竟时势,人物皆不相同,哪有定理可循?若有,天下文王多矣。

又出现了刷钱的BUG

早晨还在睡梦中,就听空空找徐超,有玩家举报有人刷钱,当时就是心中一凉,不过料想着急也是无用,于是该干什么还干什么,继续睡觉。

中午起来,徐超确认了刷钱BUG的存在,行为日志中记录某个角色流出数亿游戏币,没有找到什么端倪。我再查阅了行为日志,异常日志,登录日志,确认了不是通过回档,任务执行故障造成的刷钱,唯一能够入手的地方只有监视玩家的指令,然而为了赶进度,服务器端的录像功能迟迟未做,这个时候只有抓瞎。

在屋子里来回走了三圈,下定决心,先补功能,再查问题。打电话找到王呈,叶振华,下午跑到公司接头,正商议实施方案时,空空打电话过来,说那个玩家飘上线来,在线监听发现他似乎在完成了某个任务后,然后卖出东西金钱就会突然飚升。我想想觉的这样似乎不可能,毕竟卖出道具和任务并没有任何关联,于是让空空想办法截一下图,看看是什么任务。挂了电话,继续讨论,还没说上三分钟,空空又打电话来,说查到玩家买入一个道具,再卖出9727个道具,于是就获得了相应的金钱。

听到这里,我觉得简直就是不可思议 - 不可思议的并非会不会有这样的BUG,而是 - 且先不表,我翻到卖出道具的代码仔细看看,果然,卖出不可叠加的道具没有判断数量,而是简单的析构道具,然后按照客户端发送过来的数量计算金钱...... @(#*!@#&(!&@#

总之,这是问道亘古以来就有的BUG,而且服务器端到客户端的通讯数据一直都是明文,没有刻意加密,使用WPE甚至是FPE都可以轻松的利用这个BUG,但是似乎开放服务一年来,这个问题从来没有泛滥。我想,唯一能解释的是:发现这个BUG的那些人耐心极好,直到今天,才跳出了一个愣头青。

问题侥幸被秒杀了,但是服务器端的录像究竟做还是不做,当然要做,而且要尽快做好 - 有寒号鸟为先例。

任何一个BUG都永远不会是最后一个BUG。

2006年7月15日星期六

也许是个值得纪念的日子?

虽然blog热门了很久,但是我从来不曾打算涉足这个新(可能已经过时了)领域,我对新事物总是缺乏兴趣,除非有足够的理由。

然而,这段时间有了一个充分的理由让我去接受blog。在经历了一段艰难的寻觅软件技术人才的过程后,陈拓琳说写blog可能会结交更多志同道合之士。基于这么一个功利的目的,我开始尝试blog。

看过几个ISP提供的blog的空间,都让我无法决定落脚,要么觉得网站可能某一天会蒸发,要么就是界面花哨让我觉得难以使用,直到今天无意中从天涯看到百度提供的空间,它让我没有挑剔的理由,百度做的很不错。

ps:这是最早发布在baidu空间的,后来搬迁到了blogspot。