您的位置:首页 > 其它

最近有功夫研究写的一个socket的游戏引擎

2009-08-14 22:16 169 查看
下面是开发日志,没整理,很多内容被重新整合了。现在的代码是mudserver端保留单独的端口,没功夫做多端口的还。mudcommon端已经写了数据库查询什么的,调试还没通过,是包的问题,应该能解决。这样整个核心部分mudserver+mudcommon就可以脱离具体的数据库单独发布了。在开发具体游戏时就引用mudcommon就可以了。mudserver也提供了method穿透的方法,是不是适用就看以后怎么用了。

--20090730

把服务端和客户端整合在一起,数据库用最简单的jdbc链接,将来要改成iBatis连接数据库

地图暂时用内存临时生成,其他数据结构还没定

1.随身携带的物品

2.地图的结构

--20090731

定义命令参数的格式

1.用户输入时用:命令 参数1 参数2...

2.发送至服务端时用:[命令][参数1][参数2]...

无法解析的数据用:[异常][数据]

3.服务端返回的结果为:[模块][参数1][参数2]...

服务端返回map的情况:[模块][<key1,value1><key2,value2>...]

<!--考虑server端写一个ActionManager的工具,返回当前状态下可供操作的菜单项。这将使现有平行的动作选择变得有层次。比如进入房间后,可以退出房间,但不会退出程序。

Menu应该放到一个xml文件中,用程序写层次关系太复杂了。

-->

菜单列表只做最简单的动作,其他的如每个场景中的动作 采用MENU动态插入,不再用xml或复杂的编程去搞

先写一个猜骰子大小的游戏放到神秘房间里去

游戏规则,3个骰子

和[19,36] 算大

和[1,18] 算小

3个骰子相同 算豹子 通杀

--20090812

由于在保存当前状态这里遇到了问题,暂停client编写,着重处理服务端的流程

1.客户端不用保存当前的状态,服务端要保存状态,而且随时可查

2.服务端的core只处理系统命令,其他则由专门的包来完成

3.争取做到游戏单独打包,服务端代码基本不动

4.数据格式统一为:

客户端发送

<?xml version="1.0" encoding="UTF-8"?>

<root>

<action name="help.common"/>

<!--

<action name="login.common">diablo;password</action>

<action name="dice.game">

<item name="enter"></item>

or

<item name="return"></item>

</action>

-->

</root>

服务端返回

<?xml version="1.0" encoding="UTF-8"?>

<root>

<action name="help.common">

<item name="help.common">当前状态</item>

<item name="exit.common">退出系统</item>

</action>

<!--

<action name="search.game">

<item name="dice.room.game">神秘房间</item>

<item name="shop.room.game">神秘商店</item>

</action>

or

<action name="dice.room.game">

<item name="big.dice.room.game">买大</item>

<item name="short.dice.room.game">买小</item>

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

<description>你赢了/你输了,再来一局?</description>

<item name="continue.dice.room.game">继续</item>

<item name="exit.dice.room.game">退出</item>

</action>

-->

</root>

4.服务端设立一个对象池,也就是一个hashmap.key是公共变量,map随时传递,可以向里面添加或移除数据。

--编写代码时去掉了这个对象池,如果包分的够细,应该不需要这个东西

5.用映射的方法处理相应,包括创建对象,执行方法,映射关系文件为actmodule.xml,这样单独打包以后可以通过ant汇集到一个文件中去

--20090813

1.一旦登录成功,则每次双向发送用户的roleid

<root>

<userinfo id="ashfmnwfop3j23901uxj1e1j">

<item name=""></item>

</userinfo>

异常时

<error>

<item name="login.common" id="12345">已经登录</item>

</error>

2.MudServer改成线程,有必要调优

3.流程

连接-登录-(进入game,进入chat-room)

-帮助

-退出

4.map也可以不放在common中,而作为独立的模块,只保留接口

5.完成了mudcommon和mudserver的剥离,这样mudserver就可以仅保留很少量的代码

分成了4个工程mudserver,mudcommon,mudbetroom,mudclient

6.区分了客户端退出和服务端退出两种状态,有必要加入一个system组件和服务端整合在一起,提供socket服务端的操作,

如关闭,重新连接,重新读取文件等,最好在服务端内部实现,不对外公布接口

7.调整后的服务端只提供指定命令的关闭,重启,重置端口这三个服务.在编写多线程之前,server没什么要改动的内容了

close.system, reload.system, restart.system

8.可以另做一个socket端口 专门捕获系统操作员发出的命令,这样不会有客户端发送系统级请求,也可以关闭这个端口的对外权限,防止被黑

操作简单 不是用xml结构,仅采用 命令 参数1 参数2...这样的形式

9.执行其他包的方法,有了这个功能,相当于可以执行脚本了,而且可以跨工程的执行方法

关键在于如何将reader的hashmap传递给CommonExecute

有空要对server想要实现的功能做一下整理

--20090814

任何配置的类中,实现setActionClassMap就可以获得server中提供的全部action,以及class的映射。不用接口的方式实现,使代码的耦合性更小。子包不必引用server的内容就可以使用。

但这一规则有必要在其他文档中说明,否则不会被人注意到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: