MMO中随机生成地下城的一点随想

  找了下,网上关于这方面的资料大多是讲随机迷宫生成算法的,但是MMO中的地下城不仅仅是迷宫这么简单,不是只要生成一条或多条通路就算完成,还包括怪物的摆放,一些事件触发器类物件的摆放,地表景观类物件的摆放,还有地表Tile块的指定等。就生成的通路来说,也不可能只有一种简单的石头地形,或者全是沙地路,而在遇到拐弯或小坡小坎的地形时,地形块的指定会更加的复杂。

  当然,这些问题都可以通过技术手段一个个来解决,但还有一个问题,如何保证随机生成出来的地图具有可玩性。这要求生成的道路即不能太直,也不能绕的太厉害,会有一些比较巧妙的区域来给玩家采用一些攻防的战略,怪物的颁布也比较合理。这些属于有些类似于艺术创作的东西,全部让计算机来处理还过于复杂。

  这两天想到了一个方案,以类似于拼图的方式来组装出随机地图。并且可以再简单些,所有的拼图块都是固定大小的正方块,块中间的道路以及地表装饰物等是事先制作好的,这样在拼图时只需要按这些块定义出的接口来确定是否可拼接即可。

  为了让问题再进一步简单,我们可以要求所有块的连接处的通路宽度必须相同,位置也必须固定在每条边的正中间,限制多了当然会让制作时的自由发挥度降低,但复杂度也会降低不少,这个可以适当做些取舍。

  服务器在生成随机地图时需要知道两个块是否能拼接,我们可以对每个块及其连接属性做一些定义,这些定义至少要包括:

  1。该块用到的TileSet编号,只有使用相同TileSet的块才能拼合到一幅地图中。

  2。该块四条边的连通情况,要为每条边都定义是否可连通,通路的Tile块编号属性。

    只能让两边都可连通或都不可连通的块拼命,否则一条路突然中断,那将会是很尴尬的场景。

    另外,拼接块两边通路的Tile编号也必须相同,否则一条沙地路可能会连到另一条石板路上去。

  在为地图摆放怪物及触发器类物件时也有一点点不同,指定位置必须采用相对于当前块的相对坐标,在服务器生成完随机地图后再根据每个块的偏移来修改这些坐标为绝对坐标。

  在生成地图时也有一些细节需要处理,比如某幅地图中一定要出现某个或某几个块,用来放入口出口等。还有一些必须拼合在一起的块,用来实现单独一个块无法容纳下的超大自然景观或是城堡等。可能还需要限制一下某个块只能出现的位置,用来定义地下城的离的比较远的前门和后门等。

  我们可以为每幅要生成的地图定义一个模板,其中就包含这些限制条件,还有其他策划们可能会想到的一些限制条件,要生成指定的随机地图时,从该模板开始,选择合适的块来进行拼接。

  最后是随机地图的使用。因为地图是服务器临时生成的,客户端之前并没有该地图的数据,所以在传统的进入地图命令发送之前,需要多加一步处理:如果要进入的地图是随机生成的,则先将该地图数据发送给客户端,待客户端在内存中创建好该地图后,剩下的过程就与传统过程没有区别了。

  至于服务器如何把生成的地图发给客户端。如果是完全随机生成的地图,要将整幅地图发送给客户端那将是一件很消耗带宽的事,而采用块来拼装的方式后,实际需要发送的数据只有块编号。每个块的定义数据都保存在客户端。

  服务器也需要保留有每个块的格子阻挡信息,在生成完随机地图后,服务器和客户端都要按此块列表来生成完整的格子阻挡信息,用于寻路及客户端行走的合法性检测等。

  以上只是这两天的一点随想,不知道暗黑中的随机地下城是如何生成的,google了下没有结果,有相关资料的麻烦共享一下,或者对此主题提供一些相关思路,不胜感激。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值