`

单一世界十万在线webgame的设计思路(三)--地图模块设计思路

    博客分类:
  • Game
阅读更多

地图模块:

地图在传统策略类webgame里都是以平面的方式展示和存储的。地图的移动都是在这个平面上实现。但一般来说,平面地图的设计容量都会有一个上限,一般来地图多为400*400,他的人数上限就是16w,实际上服务器容纳3~5w人后,整张地图就会显得很拥挤了。如果要想容纳几百万人在线,平面地图的尺寸就需要扩容得相当大了,这样玩家从地图中间移动到边缘的时间会相当恐怖,因此平面地图在这里不是很合适。因此,地图不能用平面来构造,必须是立体的方法构造。在这里我设计了两组方案:

立体平面空间:

image

如上图所描述的,立体平面空间,就是把多块地图一层层叠加在一起,形成一个立体的空间。这样如果用户不够,再增加一个新的平面就行。游戏的背景可以根据需要做调整(例如整个世界是被大海隔开的5片大陆组成,在这5片大陆之外,还有其它的超位面空间,这些空间自身是互不相连的,但是可以通过传送阵进行位面传送)。这样做的好处是,用户容易理解,以往用户的操作习惯不用改变,毕竟都是在平面地图上战斗。只不过要做跨位面的战斗的移动计算上会存在问题(逻辑上的问题:是否允许跨大陆的远征军)

用户坐标的表示方法:地图层次、x坐标、y坐标

数据库设计方案:

采用了层次结构,只需要增加一个地图层次的字段,这个地图表就能沿用。(参考字段:ID、地图层次、X坐标、y坐标、地图类型、玩家ID、城池ID)

虽然说,加入了一个地图层次的字段能解决地图的表示问题,不过,因为整个游戏世界是单一世界的服务器,当所用地图信息存储到一张表的时候,这数据量就不容小视。在这之前做webgame项目的时候,整张地图是预先生成好数据库记录的,当有玩家加入游戏的时候,就去修改表里的玩家ID和城池ID。同时因为地图大小只有400*400,整张表也就16w条记录。但如果是要做一个承载500w人的服务器,那地图的尺寸最好是要800*800,并且地图的层次为15~20层,就算最小的15层,按照原先的设计思路,至少需要预先插入960w条记录。

数据量看上去比较夸张,不过对于SqlServer来说也不是处理不了,并且我们还将计划把地图表单独用一台服务器来处理,其压力远小很多。不过也不能不考虑当发生性能瓶颈时的优化处理。优化的方法有两个:

1. 拆分:按照地图层次,把这张表拆分成15~20张表,或者拆分到15~20个数据库里

2. 用疏矩阵存储:地图不预先生成用户的地图信息,而是有玩家加入时才插入数据。这个方案在服务器早期人数比较少时会得到良好的性能效果,但当用户人数达到一定量时,还是避免不了因为记录函数过多而导致而外的开销。

 

全立体空间:

image

全立体空间就是取消了平面的坐标显示,用户都是在一个三维的立体地图里战斗。好处是地图不用那么分散,在移动计算让很好处理,存在的问题就是游戏在显示的时候,如何表现地图的三维效果会比较困难。

用户坐标的表示方式:x坐标 y坐标 z坐标

数据库存储方案:

三维空间的数据库表设计结构可以和上面的表一样,而且也只能采用疏矩阵的方式存储,因为做成三维空间后,可表示的位置的记录数更多了。

 

 

可移动基地在全立体空间的设想:

早在两年前,看过《超时空要塞F》的时候,就产生了一个想法http://www.cnblogs.com/yahle/archive/2008/05/27/1208355.html,就是玩家的基地是可以移动的。玩家的母舰在游戏的过程中,已一定的速度在整个世界里移动。

可以移动体系的设计要点:

1. 用户的基地可移动

2. 用户基地只能拥有一个(武林三国、travian都能建立多个)

3. 空间坐标由x坐标 y坐标 z坐标 组成,并且坐标的值应为小数

4. 同一个坐标里运行多个玩家存在,玩家的航线交叉并不会造成影响(只是为了方便计算减少判断过程)

5. 移动的数据通过后台定时刷新

a) 每个短周期(1~60s)在内存里更新坐标

b) 每个长周期(10~100个短周期时间)将坐标的数据更新的数据库

6. 攻击舰队移动的时间是按照2个阶段来进行的

a) 第一个阶段是从母舰移动到目标坐标的时间

b) 第二个阶段,在快到达时(前60分钟),做一个判断,判断攻击舰队的雷达能否搜索到目标的母舰坐标,能则做攻击坐标的新修正,如果不能则继续按照原先的坐标点移动。以上判断将每隔1分钟做一次,直到到达目标坐标点。如果到达目标坐标点仍然无法视为攻击失败,舰队返回

7. 舰队的移动距离和舰队所携带的能量有关,超过移动范围的坐标,舰队是无法出发的。

8. 部队和母舰应该是可以进行空间跳跃实现长距离的移动,不过空间跳跃需要在制定地点消耗大量的能量才能实现。

9. 默认情况下,母舰移动速度为1格(x、y、z坐标)/天。

10. 默认舰队的雷达查询范围为1格

11. 默认母舰的雷达查询范围为3格

 

作者:Yahle
原载:http://www.cnblogs.com/yahle
版权所有。转载时必须以链接形式注明作者和原始出处。
分享到:
评论

相关推荐

    webgame开发简明教程

    - **地图结构设计**:地图是Webgame中非常核心的组成部分。一般情况下,会为每个地图设定一个唯一的ID(Map_ID),并通过坐标系统(X, Y)来表示地图上的各个位置。 - **城市模型**:除了地图之外,城市也是游戏中不...

    webgame开发简明教程(经典)

    #### 三、具体实现案例——地图系统 - **地图数据模型**: - **Map表**:存储地图的基本信息,如地图ID、坐标等。 - **City表**:存储城市的详细信息,包括城市ID、资源等级等。 - **Build表**:记录建筑物的...

    webgame asp javascript在线游戏源代码

    【标题】"Webgame ASP JavaScript在线游戏源代码"揭示了这是一个使用ASP(Active Server Pages)技术和JavaScript编程语言构建的在线游戏平台的源码资源。ASP是微软开发的一种服务器端脚本环境,常用于动态网页的...

    WebGame:SSM 25-1

    项目文件"WebGame-master"很可能包含了以下结构: - `server.js`: 主服务器文件,包含Node.js应用的启动代码,可能还包括数据库连接和路由配置。 - `models/`: 存放与MongoDB交互的模型文件,定义了数据的结构和操作...

    webgame客户端通信VO设计构想

    通过对父类Message、通信连接类Connection、VO身份识别配置类VOIdentifyMap以及Socket命令类SocketCommands的详细介绍,旨在为Webgame开发者提供一种高效、可靠的通信VO设计思路。此外,还提出了具体的使用流程和...

    webgame-with-the-bois

    在"博伊斯网络游戏"的源代码中,我们可以逐一分析每个模块,探究Python如何被用来实现游戏的功能,从而深化对Python编程以及Webgame开发的理解。通过这个项目,无论是初学者还是有经验的开发者,都能从中学习到实际...

    webgame-【源代码包】

    这个【webgame-【源代码包】】显然包含了多个关于Webgame开发的源代码和资源,对于想要学习和理解AJAX(异步JavaScript和XML)在Webgame中的应用非常有价值。 首先,AJAX是一种在不刷新整个网页的情况下,能够更新...

    WebGame大型游戏架构书

    **标题与描述**:“WebGame大型游戏架构书”这一标题简洁明了地概括了文档的主题,即介绍一个基于网络的大规模游戏架构的设计思路和技术要点。该文档描述部分重复了标题内容,没有提供额外的信息,但从整体来看,...

    webgame(最终幻想)源码

    这可能意味着在项目的某些部分,如后端服务或特定功能模块,可能会看到C#的影子,或者开发者可能参考了ASP.NET的一些设计理念和技术。 标签中的"webgame"是一个宽泛的概念,涵盖所有基于Web的在线游戏。这类游戏...

    webgame 在线棒球赛

    【标题】"Webgame 在线棒球赛"是一款基于网页平台的体育竞技游戏,它将传统的棒球运动搬到网络上,让玩家可以在浏览器中体验到棒球比赛的乐趣。这款在线游戏充分利用了Web技术,使用户无需下载安装客户端,只需通过...

    最终幻想webgame(access)

    《最终幻想webgame(access)》是一款基于网页的在线游戏,其源码可供学习和研究。这款游戏使用了big5编码,这是一种繁体中文字符编码,主要用于处理台湾、香港等地的中文文本。通过分析这款网页游戏的源码,我们...

    侠域网页游戏WebGame源代码

    通常,这样的命名可能是游戏资源、模块或者数据库表的简写,比如可能包含游戏日志记录、用户数据、游戏地图、游戏逻辑代码等。 综上,"侠域网页游戏WebGame源代码"涵盖了PHP编程、Web开发基础、数据库管理和游戏...

    webgame游戏策划

    - **总体思路**:通过将现实世界中的元素(如地产交易、商业运营等)融入虚拟游戏世界,简化虚拟流程的同时保持世界观的统一性。 - **目标**:创建一个既有深度又易于上手的游戏环境,让玩家既能享受游戏的乐趣又能...

    FLEX WebGame源码

    总结而言,FLEX WebGame源码提供了一个深入学习FLEX游戏开发的宝贵平台,尤其对于“MapDemo”模块,开发者可以深入了解人物行走机制和地图动态加载的实现,从而提升自己的技术实力和开发效率。通过研究和实践这些...

    FLASH WEBGame 多人游戏社区(源码+服务端)

    SGS RPG地图多人同步,表明该系统支持角色扮演游戏(RPG)的地图设定,并且实现了多用户间的地图同步,保证了玩家在游戏中可以共享同一个虚拟世界。 源码的提供对于学习和改进这个系统至关重要。"AS3客户端代码.rar...

    rpg地图编辑器(webgame)

    基于air的地图编辑器,可编辑背景、npc及人物

    webgame网页游戏源码

    3. **Webgame源码**: 这个源码包含了开发网页游戏所需的核心组件,例如人物行走模块和地图动态加载。这些模块是游戏交互性和可玩性的重要组成部分。 4. **人物行走模块**: 在游戏中,角色的移动是玩家与游戏世界...

    一个js的webgame引擎

    【一个js的webgame引擎】是一个在2007年夏天研发的JavaScript游戏开发框架,专为构建Web游戏提供基础支持。尽管这个引擎在当时可能处于不完整状态,特别是其人工智能(AI)部分尚未实现,但我们可以从这个项目中探讨...

    网页游戏开发入门教程(webgame design)

    ### 网页游戏开发入门教程(webgame design) #### 一、基础知识点概述 本教程旨在为初学者提供一个简单易懂的网页游戏开发入门指南,并为有经验的开发者提供一些新的启发。通过本教程,您将了解网页游戏开发的...

Global site tag (gtag.js) - Google Analytics