
整个系统只有一个大厅服务器(Hall Server), 大厅服务器收集房间服务器(Room Server)的连接信息, 提交给Web Server. 为了让Room Server的实现简单, 不让Room Server直接同Web Server交互.
当用户请求进入某个房间时, Web Server向Hall Server发送指令, Hall Server将指令转交给相应的Room Server. Room Server在这里可视为游戏服务器(Game Server)的接口.
当用户的请求得到允许后, 他将得到一个密钥, 用于进入Room Server. Web Client创建一个游戏进程, 并将密钥和其它信息通过参数或者stdio传给新起的游戏进程. 游戏进程连接Room Server, 开始进行游戏.
Written by benegg
at 2009-06-20 13:50:16 | tags: 网游开发, 网游架构
游戏中不可缺少动画. 在之前的图形界面实现中, 程序是基于用户输入事件驱动的, 除非使用单独的线程, 否则无法实现动画. 所以, 把程序改为基于时间驱动, 并使用精灵(Sprite)的概念. 精灵包含一个或者多个图像资源(帧), 以及其它状态信息. 这时, 使用C++来开发会更接近这种抽象.
主循环每隔一个时钟周期轮询所有的精灵, 获取它们的当前图像帧, 并blit到屏幕上页面. 也可以让它们自己blit到屏幕上面.
这就要求, 所有的逻辑处理都必须由开发者分解成流水线, 流水线的每一个片段都能在一个时钟周期内完成, 而且所有逻辑的流水线也必须能在一个时钟周期内完成.
while(1){
foreach(sprites as s){
s->tick();
}
others->tick();
sleep();
}
Written by benegg
at 2009-06-03 17:31:44 | tags: 游戏开发, 连连看开发实践
在前一篇日志(连连看游戏开发实践(1) – 算法)中, 已经做了一个命令行下的文字界面的连连看. 这一回, 我要给它加一个图形界面外壳, 将数字转换为图片显示, 用鼠标点击代替输入文字坐标.
程序运行界面如下:

Continue reading »
Written by benegg
at 2009-06-01 22:57:22 | tags: libsdl, SDL, 游戏开发, 连连看开发实践
从本篇文章开始, 我将写一序列游戏开发的文章, 讲述做一个连连看游戏的例子, 既锻炼自己, 也帮助别人. 最终, 游戏会加上网络功能.
连连看算法

如图, 为了找出A, B两点之间的连接路径, 首先过这两点作4条线段, 线段的两端便是地图边缘, 两条与横坐标轴平行, 另两条与纵坐标轴平行. 先考虑与横坐标轴平行的两条.
在两条线段上各取一点C和D, 此两点处在一条与纵坐标轴平行的直线上. 那么, ACDB这条路径便是一条可能的A, B两点的连通路径.
Continue reading »
Written by benegg
at 2009-05-31 13:41:30 | tags: 游戏开发, 连连看开发实践
Recent Comments