SUMTEC -- There's a thing in my bloglet.

But it's not only one. It's many. It's the same as other things but it exactly likes nothing else...

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  207 随笔 :: 19 文章 :: 1637 评论 :: 12 Trackbacks
昨天发了一个帖子,说想做网络游戏,结果马上就有人附和了!反应真是快啊,Blog这个东西就是好!

嗯,那么我们讨论些什么呢?我想可以讨论一下下面的几个方面:
1、我们这个开发采取什么协议?GPL还是别的?
2、我们如何组织这个项目?
3、我们这个游戏的是什么样子的?剧本?

呵呵,前两个留给大家说说,我先说说对于这个游戏有什么样的设想:

一、网络穿越能力
  之所以前一段时间我那么关心NAT穿越,主要就是因为网络游戏必须能够穿越NAT,否则中央服务器就必须要有很强大的计算能力,我们这种因为兴趣而参与的朋友肯定没有办法支付这样的费用。如果能够穿越NAT,那么就很可能让部分的计算分布到每个玩家身上,并且大部分的数据流量都不需要经过服务器。关于这方面的知识真的很重要,大家不妨看一下我的这两个帖子,虽然说我也是才开始学的,但是自己瞎想总不是路吧?我的这两个帖子基本上已经把穿越NAT的原理探索了一下:
关于P2P穿越NAT/防火墙的困惑
关于穿越NAT进行P2P通讯

其中里面提到了一篇文章,非常的重要,几乎是编写穿越所有类型防火墙的核心原理,我在这里再贴出来一次,不过是英文的:
http://www.watersprings.org/pub/id/draft-takeda-symmetric-nat-traversal-00.txt

实际上Terrarium之所以能够发动起来,主要就是对于服务器几乎没有什么太大的要求,只是提供一个用户登录以及技术统计平台,本身几乎不参与什么运算,运算都是由客户端自己承担的。哦,对了,顺便提一下,Terrarium的服务器端可以下载的:
http://www.windowsforms.net/terrarium/server/download.aspx?tabindex=6&tabid=42

这个Terrarium的服务端几乎就是用户在上面注册,登录的时候在服务器上面登记一个地址,然后别人就可以通过连接这个地址的5000端口和你互连了。所以Terrarium必然无法穿越NAT,实际上我们只需要改进一下这个服务端,增加NAT穿越能力的协议就基本上OK了。嗯,这个Terrarium似乎有计划要开发下一个版本,并且打算公开下一个版本的源代码。不过目前似乎已经有接近两个月没有消息了,这个Terrarium的开发这似乎是MS里面的一个员工,参与Longhorn的任务,不知道是否看错了。如果没有看错的话,那也许是他最近工作比较忙吧。

二、关于游戏背景的设想:
    我觉得Terrarium本身的背景还是蛮好玩的,所以我想还是以动物为背景,也就是尽可能把Terrarium的元素复现出来,甚至做得比Terrarium要优秀。但是我们再往里面添加另外一种可控制的角色,我们就可以参与到里面去了。这个添加的角色是什么呢?比如说原始人怎么样?我们就可以去打猎了!出了打猎还可以参加种族战斗啊!当然,我们必须要让这个添加进去的角色能够和原有的角色兼容,有所有的属性比如攻击力、“肉量”等等,这样原来的那种人工智能生物才能够攻击我们,杀死了人控制的角色之后还可以吃“尸体”。此外,为了配合这个原始人,我们还可以增加另外一类东西:比如刀啊枪啊。这个嘛,就还没有仔细考虑清楚,到底是直接由我们用程序设计刀枪呢?还是在游戏里面提供原材料让人来打造呢?比较复杂,涉及到游戏的平衡性问题。

三、关于分布计算的设想:
   我觉得这个游戏必须要能够分布计算,理由如下:
1、如果我们不分布计算,那么强大的中央服务器群的费用,包括运行费用谁来提供呢?
2、如果我们采用Terrarium那种方式,CPU占用率太高了!基本上应该每个终端负责一部分人工智能生物的计算能力,并且将计算结果直接告诉其他参与的中断……当然这样的话会有其他的复杂问题,但是至少这样才能够制成大量的人工智能生物的存在啊。除非大家不打算有人工智能的Object存在或者有哪一个大款能够提供几百万的经费出来采用集中式服务器方式。
3、顺便可以学习一下分布式计算方面的东西,主要是深入了解这里面会遇到的问题。

四、关于安全性的设想:
   如果你玩过Terrarium的话,你不得不赞叹设计者考虑得那么周到,使得你无法写出有恶意的代码——反射功能被禁止了;不允许出现静态类、静态函数、静态变量;不允许访问外部资源如硬盘;获得其他生物(包括同种)的信息是通过一个接口,这个接口背后的东西实际上是一个结构,这个结构里面的所有数据是从某个生物里面拷贝出来的,所以你无法通过获得的信息访问对方生物的任何不期望让你知道的内容;等等。这个是一个考虑的方面,但不是全部。我还希望加入加密和验证的能力,杜绝诸如木马攻击、诈骗攻击、中间人攻击以及DOS攻击等,因为涉及到分布式计算,还需要防止用户篡改数据。


大家说说我想得是否太过于复杂了?其实我觉得不会啊,人家那个Terrarium也就是一两个人能够完成的,我所说的基本上只是在他的那个基础上增加NAT穿越、更多的角色类型、分布式计算能力以及加强安全型而已。(……而已?)

好了,剩下的大家来讨论一下吧。
posted on 2004-05-11 12:35 Sumtec 阅读(2853) 评论(26)  编辑 收藏 所属分类: 游戏

评论

Terrarium是一个什么样的游戏?
每个人通过编写程序来玩吗?那不是会很无聊(对大多数人来说)
  回复  引用    

#2楼  2004-05-11 13:14 sumtec      
对的,Terrarium是这样的,这个本来就是给程序员玩的游戏。不过我想做的是,程序员能够玩,同时普通人也能够玩的游戏。简单点讲就是在Terrarium的基础上,添加普通人都能够控制的角色。
  回复  引用  查看    

#3楼  2004-05-11 13:17 steeven [未注册用户]
不错 ~~~~

反对NAT, NAT是个很好的技术,但是在.net里面实现会不会比较辛苦?
另外,很多人都是用proxy上网,比如在公司里面的,NAT就不能照顾他们了。

如果游戏不需要很大的数据传输,我倾向WebService或者HTTP连接。

当然用了HTTP就相当于放弃了分布式计算。如果分布式了,那动作游戏或者即时战略的,怎样让每个分布式服务器都知道需要的信息呢?需要一个核心server来收集信息&分配工作?如果这样HTTP也可以。

如果分布式服务器运算完了还需要把相应信息告诉玩家,这就需要每个玩家有自己的Listener端口。。。

可否这样,采用BT的策略,有公共IP的客户端提供服务。没有的利用有独立IP的客户端对外联系。



Sumtec是要作个强大的在线游戏吗?成千上万人在线的那种?
  回复  引用    

#4楼  2004-05-11 13:20 steeven [未注册用户]
就是普通游戏,但是能自己写一部分角色之类的。
最好能允许玩家拥有自己写的角色。就象拥有核武器一样NB
  回复  引用    

#5楼  2004-05-11 13:51 sumtec      
@steeven:
最终的目的也许是成千上万的,但是目前不考虑这个,首先先要把框架打起来啊。其次,我不知道你说反对NAT是什么意思?NAT是我们现在几乎每个人都会遇到的东西,除非你直接拨号上网,否则不可能拥有一个公网IP。如果说是用Proxy上网的话,那就完全没办法了。Proxy一般来说都是指HTTP的Proxy,顶多是FTP的Proxy。换句话说,Proxy是应用层的东西,如果我们自己需要一套协议的话,就不可能通过Proxy连接,或者需要一个专门开发的Proxy。顺便说一下,Terrarium似乎已经有一个Proxy了,不过没有公开,也不知道什么时候能够公开,似乎要等到Terrarium2发布的时候才公开。继续……也就是说,在中国几乎所有宽带上网的都会经过NAT,因此必须要有穿越NAT的能力才能够实现客户端之间的点对点连接。

关于分布式,也许你理解错了。我的意思并不是分布式服务器计算,而是说每个客户端各自负责一部分的计算,并且把结果发布给其他所有需要该信息的客户端。听起来有点复杂吧?不过仔细描述一下也许能够稍微减轻一点你的恐惧:

每一个人连到服务器的时候会把自己的连接方式注册到服务器上面,这样其他人就能够通过该方式连接到你上面。当你连接完服务器之后,将会负责一个特定逻辑地理区域上面的对象的计算,比如在(0,0)-(100,100)上面有一只猫、两头大象、三只猪等等,他们的人工智能就由你负责了,甚至在这个区域上面的战斗都可以由你来负责运算。其他不在这个区域的人显然不需要知道这些信息,所以并不是所有人都需要你发布信息的。同时,你所负责的区域也会在服务器上面注册,如果有人在这片区域,那么就会自动查找服务器,看看谁负责这片区域的工作,然后直接跟这个人连接,并且请求获得这些信息。

当然,这么看来客户端的工作量似乎非常巨大,但是事实上我觉得完全可行。因为你看Terrarium,它是所有的计算都是你负责的,在这种情况下,你都能够承担接近300个对象的人工智能计算,为什么多几个人同时负责计算还会更慢呢?人越多,划分的区域必然越小,单台机器需要计算的数量必然越少。此外,我们还可以考虑一些智能的转发机制,比如:

我们可以探测得知每一台连接的客户端的连接类型,有的可能比较好连接有的则比较难连接(请看我上面推荐的那篇英文资料),难连接的负责进行计算,好连接的作为中间转发代理。假设A进行计算,B做代理,那么A算完之后连接到B,把结果发出去,B则转发给所有需要该消息的客户端。由于A不需要发送大量的信息,所以可以进行更多的计算。而B不需要计算,所以可以承担更多的发送任务。此外代理可以代理多片区域,同一片区域可以有多个代理,这样大家可以动态选择比较快速的代理。

当然,由于多了一个代理层,也许会比直接连接要慢,但是我想目前的网络游戏也不是要通过服务器进行数据交换的吗?B不就是一个数据交换服务器嘛!层数至少是一样的,应该不会由于网络延时的原因造成很大差别,要有差别也就是机器处理能力以及带宽的问题。但是我不相信如果用户数量达到了10W,其中的代理假设有3W,这样大的数量还不能够产生足以和游戏运营商的服务器群的数据交换能力!一般游戏运营商的服务器群最多也就1k台,而且还是分区的,每个区能够有几十台就不错了!

核心Server的作用是:
1、进行身份/数据验证,甚至包括数据保存备份。
2、提供p2p连接所需要的协议功能。
3、提供环境平衡性——例如修正某个加权系数,类似修正某个兵种的属性。
4、提供分布计算平衡性的功能。例如记录并决定哪些客户端应该是代理,哪些负责计算,那片区域需要更多的代理等等。
5、提供运行状态维护与记录。


当然,目前我们没有必要做得那么复杂,例如不需要什么代理。只要能够穿越NAT,能够支撑8个人的运行环境就可以了。
  回复  引用  查看    

#6楼  2004-05-11 13:54 hBifTs      
用WebService不行,速度太慢了的...
使用Http可以的.但是这样一来,对服务器的要求就比较高了...

  回复  引用  查看    

#7楼  2004-05-11 14:10 steeven [未注册用户]
sumtec:

是不是NAT让没有公共IP的人也能象有公共IP一样,可以接收第三方数据?

倾向RPG游戏?最好是在茶余饭后就能切磋几局的。

  回复  引用    

#8楼  2004-05-11 15:03 hBifTs      
@steeven
是的,他就是这个意思..:P
就像SoftEther一样...
  回复  引用  查看    

#9楼  2004-05-11 15:23 PM_2004 [未注册用户]
我觉得你这个游戏开发到的最高境界可能和现有的网络游戏几乎差不多。技术是关键,脚本、运营业务模式也是非常核心的。所以你这个思路难以成大气候,没有这么多用户供你来检验你的技术!我到觉得你可以开发一个平台,让众多程序员在上面比武,谁开发的怪兽厉害!或者基于一种配置和组装的模型。
一家之言!
  回复  引用    

#10楼  2004-05-11 15:42 Stephen [未注册用户]
是否可以用脚本来实现角色的设计。这样可以将难度减低。任何人都可以去设计
  回复  引用    

#11楼  2004-05-11 15:47 sumtec      
@ hBifTs:

没有打算让中央服务器参与运算啊,所以慢一点也许都不是问题。所以后面那个对服务器要求比较高这个……似乎不是我所讨论的问题了,或者真是我力所避免的问题。对服务器的连接很少,甚至对服务器的数据传输都会很少——相对于目前的网络游戏而言。

@steeven:

应该是策略游戏。不完全对,NAT的作用就是,NAT本身有一个或一组公共IP,然后把内部请求连接的IP:Port映射到公共的IP:Port上面去。IP肯定不一样,甚至Port都不会一样(大部分的情况都是不一样的)。所以才会有需要知道NAT上面的IP:Port,用于和对方进行连接。
  回复  引用  查看    

#12楼  2004-05-11 16:00 sumtec      
@PM_2004:
你的说法跟我的一个朋友的说法一样,其实我不懂这种说法为什么成立。既然我的设想是现在的网络游戏的一个超集,那么如果我的设想不可能成气候,那么现在的网络游戏一样不会成气候。关于游戏平衡性的问题,完全有办法可以控制和修正的,这个我想应该是有办法的。我同样提供普通玩家的功能,同时提供一个程序员玩的平台,揉合到一块来而已。

@Stephen:
我正有此意,但是,目前先不要做这个了吧?太麻烦了。实际上考虑.NET的Reflection能力,其实直接用C#/VB.NET来写就可以了,就足够了!参考Terrarium。
  回复  引用  查看    

#13楼  2004-05-11 17:03 Young      
我覺得現在還是來個簡單的"21點"吧!!
可以把所要用的一些關鍵技術方面的東西先實現,然後在去考慮其他的.
畢竟需求是不可完全預見的~~~~~
哈哈,看了幾天<敏捷软件开发:原则、模式与实践>亂說幾句:)

  回复  引用  查看    

#14楼  2004-05-11 18:00 sumtec      
对啊,我也是这个意思,所以一开始并没有要做得很复杂的意思,只是我的意思是这样的,希望以后能做成这样。
  回复  引用  查看    

#15楼  2004-05-11 18:09 steeven [未注册用户]
利用这样的思路,做一个超大的即时战略游戏也可以吧?

真难想像没有OO的时候,写游戏会有多恐怖
  回复  引用    

#16楼  2004-05-11 19:00 steeven [未注册用户]
光说不练, 什么时候开始啊?
进度太慢了
  回复  引用    

#17楼  2004-05-11 19:27 sumtec      
@ steeven:
我怎么觉得似乎就我们两个最热心了……看看能否煽动一下其他人的热情?此外,我觉得不能够这么简单的说开始就开始吧?总得有人来阻止吧?总得有个讨论的地方和共享代码的方法吧?先说说这个,最重要了。
  回复  引用  查看    

#18楼  2004-05-11 20:16 steeven [未注册用户]
呵呵,组织

共享代码用sf.net吧.
讨论呢...找不到就也去sf.net吧.
  回复  引用    

#19楼  2004-05-11 21:35 steeven [未注册用户]
以前在玩过PDA版的C&C,很好玩.
先简单实现一个最原始的版本吧.

初步设想:
CCServerEngine: 中间服务器, 负责逻辑计算, 通知客户端数据.
CCForm: 客户端窗口. 里面有Map/雷达/状态/信息/武器等UI元件
CCClientEngine: 负责客户端逻辑, 传递ServerEngine指令. 产生事件给
UI元件, 比如MoneyChanged.
CCMission: 当前局 Players/Map
CCPlayer: 玩家. 姓名/颜色/资源/...
CCMap: 提供地图信息. 图上CCObject信息
CCObject 地图上元素的基类 Location/Size/Image/Color/...
CCUnit: 可建造元素. 士兵, 机车, 建筑的基类 Cost/Power/...

没写过游戏,暂时想这么多
  回复  引用    

#20楼  2004-05-11 22:01 dudu      
sf.net不支持中文, 只能用英文进行讨论。
  回复  引用  查看    

#21楼  2004-05-11 22:31 steeven [未注册用户]
论坛可以找宝玉帮忙, 他是专家
  回复  引用    

#22楼  2004-05-11 23:29 hBifTs      
其实讨论的地方,可以就放在这个里面,
一个想法,起一个Blog,别人(开发者)就这个想法进行讨论,看是否可行...

就像国外一些开发者使用的Email List,把开发者在开发过程中的一些想法,一些争论等,都记录下来,而且可以让别人的来看:P

不光对自己,对别人了解这个项目,都有很大的帮助:P

如果只是放到一个论坛中,那么参与的可能相对会少一些的吧.毕竟不是大部分人都知道它的存在...

你们觉得呢??

btw,嘿嘿,不知dudu觉得酱紫如何?嘿~
  回复  引用  查看    

#23楼  2004-05-11 23:35 steeven [未注册用户]
晕, 到处写blog. 感觉象随地... :)
  回复  引用    

#24楼  2004-05-11 23:40 hBifTs      
..不是这个意思...专门用一个做为交流之用啊~

而且通过这个,别人也可能通过这个了解更多的开发信息,设计思想:P
  回复  引用  查看    

#25楼  2004-05-12 00:07 Stephen [未注册用户]
已经讨论到实际的行动了。好现象。关键是要坚持。什么工具其实不重要,我觉得SF.NET也不错,可以将此项目成为International的,也可以锻炼一下英语的写作能力嘛。呵呵。现在,谁来发起组织呢。拭目以待哦。
  回复  引用    

#26楼  2005-03-07 12:54 joevan [未注册用户]
一个游戏,很感兴趣。
市面上好网游不多,轻松耐玩就更少了啊
偶对技术并不是懂太多啊,觉得轻松耐玩是最重要了,偶觉得MUD是一个很好的开发啊,图形化的如梦幻,很轻松啊,呵呵
关注ing
  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接: