zine 发表于 2010-9-11 20:11:05

一个生成随机区域的设想

MUD至少北侠里只有小范围的随机的迷宫,并没有随机的大面积地图(或者有但是我不
知道)。而即时战略游戏多有一个功能随机生成地图以供对战使用,并避免玩家的审美
疲劳。MUD里如果能有随机产生一块地图,那么最直接的功能就是奖励手动。

假设用多米诺效应(A产生随机方向影响B,B影响C)可行是可行,生成的地图完全无法控
制地图的走向,并生成很多不合理的回路。而且我生成的地图,看起来完全不像合理的
地形,比如山路eastup到草地了westup又能回到山路。总之就是乱七八糟,完全不符
合真实世界的地形。

构想:已经确定某固定位置节点。以华山五峰为例:莲花峰连接地图文件A,朝阳峰连
接地图文件B,文件A,B之间用2个随机路段α,β(中间固定位置C)C点连接朝阳峰形
成回环。α,β段以及C地名都是同样的山路。

这样实际生成的地图总算有模有样了~
附上1个文件,请各位大大帮助修正。





// 山路
// edit: by zine 11 Sep 2010

inherit ROOM;
#include <ansi.h>

string* sl = ({

__DIR__"shanlu",

__DIR__"shanlu2",

__DIR__"shanlu3",

__DIR__"shanlu4",
});

void create()
{

object nextdoor=load_object("/d/test/shanlu2");

int n=random(100);

set("short", "山路");

set("long", @LONG
这是一条蜿蜒曲折的山路,雾中的山顶若隐若现。
LONG

);

if (n>74)

{

set("exits", ([

"westup" : __DIR__"shanlu2",
    ]));

nextdoor->set("exits/eastdown", __DIR__"shanlu");

}

if (n>49)

{

set("exits", ([

"eastup" : __DIR__"shanlu2",
    ]));

nextdoor->set("exits/westdown", __DIR__"shanlu");

}

if (n>24)

{

set("exits", ([

"southup" : __DIR__"shanlu2",

    ]));

nextdoor->set("exits/northdown", __DIR__"shanlu");

}

else

{

set("exits", ([

"northup" : __DIR__"shanlu2",

    ]));

nextdoor->set("exits/southdown", __DIR__"shanlu");

}

setup();
}

void init()
{

object me=this_player();

object nextroom = load_object( sl );

if (userp(me) && (random(10)>7))

{

me->move(nextroom);

tell_object(me,HIY "山上滚下落石,你慌乱地躲避,不知不觉,越走越远。\n"NOR);

tell_room(environment(),"一个人影匆匆奔了过来,十分狼狈。\n");

}

return;

}

本来生成随机方向的那部分是用switch的,但Jason指点random小的时候随机性非常差。

随机方向加上20%几率的乱入加上前面方向上的回环。Grin,不过手动还是很容易走出来的。我做
的第一个版本,就是自己一分钟刷新方向,因为没刷新一个方向,下一个路段就生成一个反方向,
所以路径变得四通八达(直接成迷宫),本意是随机地图而不是随机迷宫,所以改成了这个比较简
单的,只随机4个方向。

dinglf 发表于 2010-9-11 20:18:08

看不懂!
果断加精!

xieshuren 发表于 2010-9-11 21:18:34

对迷宫深恶痛绝,我是纯手动玩家,如果产生的是随机密宫的话,
对自动不一定是灭顶之灾,对手动却肯定是增加了难度,所以支持随机地图,但坚决反对随机迷宫

jason 发表于 2010-9-11 23:55:23

随机地图,首先要定义好房间。比如草地,山地,沼泽,沙漠,不同的地形有不同的描述。
其次,房间要有属性,否则生成了地图也没有意义。属性包括npc,物品等
然后,要有一个算法,让房间合理连接,这个已经有了。

zine 发表于 2010-9-11 23:58:07

房间连接易,合理难啊
比如草地下一个是小山,合理应该是xxxup,但如果随机给一个xxxdown,那这是什么山啊~~盆地嘛~

jason 发表于 2010-9-12 00:16:25

那就不要updown了,只有e,w,n,s四个方向好了

reallove 发表于 2010-9-12 14:09:52

原帖由 zine 于 2010-9-11 11:58 PM 发表 http://pkuxkx.net/forum/images/common/back.gif
房间连接易,合理难啊
比如草地下一个是小山,合理应该是xxxup,但如果随机给一个xxxdown,那这是什么山啊~~盆地嘛~

有些草地,他就是在山顶上的,往下走遇到个小山,不稀奇

seagate 发表于 2010-9-19 18:46:58

过几天我来写一个我的版本的随机地图。不过我现在自己机器上没有mudos环境,还要等一两天搭建一个环境熟悉熟悉再说

frankli 发表于 2010-9-19 18:50:21

就是,就是,真大

zgbl 发表于 2010-9-19 18:51:15

我有个想法
先生成迷宫,立体式的迷宫,也就是三维矩阵,这样就包括了游戏里会出现的方向
然后根据up、down的层面顺序,把描述塞进去就行了
页: [1]
查看完整版本: 一个生成随机区域的设想