一起做网游吧【1】

很早之前写过网络游戏的外挂教程,现在,将网络游戏的服务器教程提供出来。每个游戏商制作网游使用的技术都是不一样的,但我似乎已经习惯了孤独的写程序了,或者我的程序已经习惯了孤独了,看上去都没什么人采用这些技术(据我所知),因此,我希望我的这个游戏的整个代码(服务器和客户端)可以一个人的能力独立的完成,从目前的角度来说,是这样的。
如果某个人告诉你一个人独立完成网络游戏的服务器端和客户端,是一件遥不可及的事情,那么,现在,可以忘记这一切了。我的目标是写一个一个人可以完成的网络游戏,从目前角度和进步来说,这是一件可以完成的事情,如果你非常熟悉的话,完成一个中型的也不成问题。
关于这个教程中提供的游戏的历史:
1.这个代码从很早之前,我刚开始接触erlang的时候已经有此计划了,大约在两年前(2007年10月份)
2.这个项目中的代码(包含这个项目的教程)遵从GPL版权,不管是客户端还是服务器端,均遵从最新的GPL版权。
3.这个项目中的代码,经过很多次的变更,有些时候,随着我的兴趣不同而变更,我希望目前的游戏可以持续下去,目前来看,也比较可能最终完成。
4.项目持续的时间很长,并不是因为代码量的关系,而是因为很多时间,我都比较忙,无时间铺代码,或者心情不好等等,最长的中断时间大约至少达半年之久。
5.项目服务器端使用erlang与C++描写,如果你对erlang不感兴趣,以后的也不用关注了。
6.目前贡献的代码,是目前进度的代码根据回忆,进行整理的,因为我也觉得有必要整理了,里面很多的缺少注释的地方也应该补全了。这样,我也可以稍作休息,因为贴代码的速度比写代码的速度要快。而且,开始长时间中断的概率较少。
下面是正文的开始:

1.服务器的技术细节
我希望服务器可以类似与分布式的进行操作,因此,只要要有节点的概念,还有容错等等,简单的来说,如果一台服务器挂掉了,会自动被其他相同功能的服务器接替,客户端这边几乎完全不受影响(甚至没有感觉到所在的服务器挂掉了)。同时,要便于扩展,如果当前的服务器所承受的玩家数量是100人(谁的服务器,这么烂),如果想要达到1000人的效果的话,不用关闭服务器,只要将新的服务器打开,联入节点即可,类似这样,理论上可以承担无数的玩家。对于更新,如果可以不关闭服务器的话,最好。
2.语言的选择
我最初尝试使用C++来做达到上述服务器的目的,尝试弄过一些些代码来测试,效果非常不理想(现在那些代码早就嗖的一声消失了)。后来,朋友给我提到了erlang,被它吸引,决定使用erlang来做这件事情。对erlang不熟悉的可以用google搜下。erlang具有分布、容错、热加载的特性,这些特性可以让我节省不少的时间。
3.客户端的选择
我希望客户端可以在几乎任意的平台上运行,玩家可以不在乎对方的平台,比如说一个玩家从web中登录,另外一个玩家在手机上登录,还有一个玩家从控制台登录,但这三个玩家可能组成一个队伍在做同一个任务,或者玩同一个游戏。目前的客户端只有j2me的手机端,使用j2me的手机端来进行测试,是因为我对这一方面相对来说,比较熟悉,而且,可以专注于解决问题。但我的代码,使用了宏来控制语言,通过宏,可以生成java的语法或者c++的语法。网页目前不做考虑,因为我对复杂的网页基本上没有编写过,可以说非常的不熟,如果你很感兴趣,可以联系我,可以商量接口,从而使客户端支持web(这一点,相对来说,会非常的简单)。
4.数据库的选择
如果你希望我使用例如mysql或者db或者更高级的数据库的话,很抱歉,我做不到,因为我几乎没有学过数据库,我在对别人介绍自己的时候,也告诉别人我的数据库知识几乎为0,这并非意见羞耻的事情,对我来说,不懂装懂才是件可耻的事情。游戏中的数据库使用的是erlang自带的mnesia数据库(这可能是我目前所会的惟一的一个数据库了)。
5.游戏的选择
虽然我希望做一个很宏伟的计划和一个很大的游戏,但我不是一个美工,不是一个策划,不是一个音效,因此,太好的游戏我没办法表现出来。而且,大的游戏很难让人持续下去(想象一下,长的故事,长的工期),我的目标是一个人可以独立完成的游戏。因此,这个游戏比较小,但面面俱到,刚开始的时候,我选择了连连看,但发现,有点太简单了,我测试的时候都没有太大的兴趣。前段时间看同事们玩三国杀,所以就想做个看看(也顺便锻炼下逻辑)。虽然目前还没有完成(目前准备做游戏逻辑),但房间什么的,还是有的。
目前的服务器进度截图和说明(炫耀用):
1.服务器启动,游戏未启动

router节点和server节点已经启动了,端口绑定在5000。
2.启动三国杀游戏服务器

3.一个玩家登录进入游戏

4.该玩家登录进三国杀游戏中某个房间,由于该房间服务器不存在,所以自动启动了一个房间的节点。(不同的房间有不同的节点)

5.该玩家加入了房间中的某张桌子,由于房间中该桌子的节点不存在,因此自动启动了一个桌子的节点。(不同的桌子有不同的节点)

6.该玩家直接退出了游戏,桌子节点和房间节点启动之后,将不关闭,这样下一个玩家进入的话,就不用创建节点了。

8.相关节点的说明

由于需要翻墙写blog,以上图像暂时未补上,等我切换完系统,再把图像补上。自由门不支持socket代理。我的ubuntu又未配置好tor。

发布者

rix

如果连自己都不爱自己,哪还有谁来爱你

  • Awesome post ! Cheers for, commenting on this blog page mate. I’ll email you soon. I didn’t realise that.