北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 13077|回复: 11

动态地图接口-jason进来看

[复制链接]
发表于 2010-9-27 15:01:51 | 显示全部楼层 |阅读模式
差不多把动态地图的接口文件完成。根据实际任务进度来说完成了差不多20%左右工作量。先送点成功出来让大家指正指正。反正

只是一些算法函数,没有非常具体的东西,就是提供出来应该来说关系也不会特别大。语法错误今天已经全部除掉了。编译
应该能够通过,但是逻辑错误还没有开始除!如果有人测试建立样板房间出什么意外都非常正常。
使用方法:继承这个文件。根据不同选择实现覆盖对应的函数,按照自己需求调度init_dynMap函数更新地图。
本接口一共提供了三种动态地图类型,第一种类型是动态方向,每个房间会出现随机2-4个方向,每个方向通行随机房间。接口保证
肯定存在一条连接所有房间的路径。第二种类型是动态谜题,也就是说房间出口之类都是固定的,由开发者设计随机动态谜题函数,
接口会自动调用你设计好的动态谜题函数,并且保证每个动态房间的谜题都是不一样的。至于能否解谜就看你设计的谜题随机程度和
房间数对应比例是否足够好了。第三种类型是动态迷宫,房间出口固定,但是每个房间通向的房间是随机的,接口保证肯定存在至少
一条通向出口的路径。


动态房间的基础属性:和别的房间不一样但是是所有动态房间共同的属性有以下几点。
int query_dynamic()
string *query_static_exits()
其中函数query_dynamic表示动态房间类型,1表示动态房间,0表示固定房间。固定房间则在动态计算的时候会被忽略掉,该函数默认
返回值为1-动态地图,如果固定房间则覆盖该函数,返回返回值0。还有一定要注意的是由于动态地图产生的时候是按照目录
全目录搜索的所以最好该目录下所有房间都继承该文件,最多固定房间覆盖函数query_dynamic置返回值为0,就和普通房间一样了。
函数query_static_exits()返回字符串阵列表示该房间那些方向在计算动态地图的时候不想改动,在地图类型为1(动态方向)和3(动态
迷宫)的时候有效。

动态地图中动态房间分为HEAD Room和Common Room,其中普通房间设置的东西非常少,头房间设置计算动态地图所需的所有内容,
下面说一下和头房间相关的一些设置。
string query_dynamic_function()
string query_dynamic_dir()
int query_dynamic_type()
nomask string *query_dynamic_desc()
nomask mapping query_dynamic_full_desc()
第一个是函数query_dynamic_function()是返回动态地图计算函数名以方便调用,在地图类型为1(动态方向)和2(动态谜题)的时候
有用,函数的原型是固定的,地图类型为1(动态方向)的时候函数原型是string dynExit(string *ExitList),返回值是一个随机方向,输入
的是需要过滤的方向列表,具体随机方向算法需要开发者在开发头房间的时候实现该函数,并把函数名写入query_dynamic_function()的
返回值中。地图类型为2(动态谜题)的时候函数原型是mixed dynMath(object dynRoom),送入一个动态房间,计算该房间的动态谜题,
并将谜题作为返回值返回来。
query_dynamic_dir()返回动态地图所在的目录。
query_dynamic_type()返回动态地图类型,默认值为1,一共提供三个值1(动态方向),2(动态谜题),3(动态迷宫)
函数query_dynamic_desc()和 query_dynamic_full_desc()都是动态更新房间描述用的(注意这两个函数不允许被覆盖),其中
query_dynamic_full_desc()返回的映射是房间名-房间描述的映射对,query_dynamic_desc()返回的阵列是房间描述阵列,要想实现那种
动态描述方式,只要将该函数对应的变量值实现了就行。其中query_dynamic_full_desc()对应private mapping dynamicDescFull=([]);
query_dynamic_desc()对应private string *dynamicDesc=({});只要在头房间中实现了对应的变量则在更新地图的时候会自动根据变量值随机
更新所有动态房间的描述。其中实现query_dynamic_full_desc()的优先级比query_dynamic_desc()更高,系统会优先选择使用
query_dynamic_full_desc()的返回结果。

最后讲一下动态地图更新函数:
nomask void init_dynMap(string dir,object dynHead)
这个函数输入参数是动态地图所在目录和动态地图头房间对象就会自动完成动态地图更新。

[ 本帖最后由 seagate 于 2010-9-27 03:22 PM 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-9-27 15:02:04 | 显示全部楼层
普通动态房间例子

inherit ".../dynroom.c"

void create() {....}
void init() {....}
//如果想设置成固定房间则覆盖本函数,取返回值为0,否则不需要覆盖函数query_dynamic()
int query_dynamic()
{
  return 0;
}

//如果房间中存在固定方向,则实现本函数,本函数设置的方向要和create中的set("exits",...)对应的方向一一对应。
//如果不存在固定方向,则不需要实现本函数,默认返回为({});
string *query_static_exits()
{
  string *exits=({"east","south"});
  return exits;
}

[ 本帖最后由 seagate 于 2010-9-27 03:06 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-9-27 15:02:12 | 显示全部楼层
头房间例子
inherit ".../dynroom.c"
//实现这个变量就会随机描述,当这个变量有3条或者以上记录的时候就会起作用
private string *dynamicDesc=({"这里有一颗树","这个树上有一个桃子","桃子旁边有一只猴子","猴子旁边有一个猎人"});
//实现这个变量就会随机更新房间的地名和描述。注意这个变量优先级比上一个变量优先级高。当这个变量有2条或者以上记录的时候就会发生作用。
private mapping dynamicDescFull=(["小树林":"树林中非常寂静。","林中空地":"空地上有几只蜜蜂飞行","小溪":"小溪中有几只青蛙。","大树":"一株千年古木"]);


void create() {....}
void init() {....}
//如果想设置成固定房间则覆盖本函数,取返回值为0,否则不需要覆盖函数query_dynamic()
int query_dynamic()
{
  return 0;
}

//如果房间中存在固定方向,则实现本函数,本函数设置的方向要和create中的set("exits",...)对应的方向一一对应。
//如果不存在固定方向,则不需要实现本函数,默认返回为({});
string *query_static_exits()
{
  string *exits=({"east","south"});
  return exits;
}


//动态方向的时候开发的计算随机方向的函数。
string get_random_exits(string *exitArray)
{
string *initExits=({"east","south","north","west","enter","out","up","down"});
string *effExits;
effExits=initExits-exitArray;
return effExits[random(sizeof(effExits))];
}


//返回动态方向计算函数名
string query_dynamic_function()
{
return "get_random_exits";
}


//返回地图所在目录
string query_dynamic_dir()
{

return __DIR__;
}

//实际上当返回值为1的时候并不需要覆盖这个函数,因为默认值为1,当选择类型为2,3的时候就必须覆盖本函数了。
int query_dynamic_type()
{

return 1;
}

[ 本帖最后由 seagate 于 2010-9-27 03:18 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-9-27 15:24:15 | 显示全部楼层
动态地图才是防全自动的大杀器啊
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-9-27 15:50:25 | 显示全部楼层
seagate的程序看着舒服,基本全加了注释:)
加油啊
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-9-27 18:46:54 | 显示全部楼层
0
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-9-27 22:15:00 | 显示全部楼层
基础太差,就是没看明白= =,算了,我只提供创意好了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-9-27 22:18:05 | 显示全部楼层
这个不需要你看明白接口函数的,就像你看不明白windows操作系统的源代码不要紧,关键是会用就行。基本上我开发这个接口的目的是如果有人要写一个动态地图,基本上和以前写传统房间工作量上不会有非常明显的落差。看一下我的例子就知道了,基本上对默认值没有疑议的话需要加的东西并不多。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-6-19 14:07:24 | 显示全部楼层
这个做完了么。。。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2013-1-7 22:49:15 | 显示全部楼层
回复 9# picewolf


    现在有好多房子是动态的吧?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-12-25 01:21 AM , Processed in 0.010899 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表