使用MUDCORE框架从零开发LPMUD游戏:建设我们的村庄(area模式)

《使用MUDCORE框架从零开发LPMUD游戏》系列内容,通过教程既能熟悉 MUDCORE 框架的使用,也能学习LPCMUD游戏的开发,版权所有 mud.ren。

游戏环境开发有多种模式,最常见的普通房间模式在前面自定义登录中已经演示了,普通房间模式下环境是一个抽像的点,同一个环境内的对象之间没有距离的概念,每个房间是一个独立对象,不***间对象是不同的坐标节点,由这些节点组成一个面,如果用地图表示,应该是这样:

file

下面我们实现另一种模式-区域模式,这种模式下这个地区是一个环境对象,同一个环境内的对象之间有距离的概念,可以动态的显示相对位置,如图所示:

file

这是mudcore框架内置的area模式,现在我们直接把新手村使用这种模式打造。

示例MUD以前规划的原因,是计划了多个世界,这里不做探讨,直接分析村庄的实现,具体代码为world/dq9/1/village.c,内容很简单:

/**
 * @brief 区域模式示例,进入区域后可用sa指令建设地区
 *
 */
inherit STD_AREA;

void create()
{
    set("name", "沃尔罗村");
    set("x_axis_size", 49);    // 橫向大小
    set("y_axis_size", 29);     // 縱向大小
    setup();
}

代码只是设置了地区名称和大小,几乎没有什么内容,只是继承了标准地区STD_AREA,而标准地区文件std/room/area.c的代码如下:

/**
 * @brief 区域模式示例,进入区域后可用sa指令建设地区
 *
 */
inherit AREA;

void create()
{
    set("name", "虚空幻境");
    set("x_axis_size", 38);    // 橫向大小
    set("y_axis_size", 11);     // 縱向大小
    setup();
}

标准地区的代码和具体地区类似,唯一不同的是继承的是地区功能模块AREA,地区模块文件inherit/area.c的代码如下:

inherit CORE_AREA;
inherit CORE_NAME;

目前我们还没有写任何游戏自由的特色功能,只是直接继承了mudcore框架的地区模块和名称模块,但就是这么简单的代码,足以实现我们的需求。

地区模式的移动处理和普通环境是不同的,普通房间移动是真的从一个环境移动到另一个环境,而地区模式移动时所以环境environment并没有改变,只是改变了所在的具体坐标属性,所以移动指令go需要做调整,具体代码请参考cmds/std/go.c中关于area模式的处理方法int do_area_move(object me, object env, string dir),普通移动是调用对象身上的move方法,区域模式移动则是调用区域环境中的moveObject方法,具体可分析项目代码。

注意房间模式和区域模式在代码加载方式的不同,区域模式要指定进入点坐标,如下示例:

/**
 * @brief VOID_OB 房间模式示例,出口可为普通房间或区域坐标
 *
 */
inherit CORE_STD_ROOM;

private varargs void create(int x, int y, int z)
{
    set("short", "时空中转站");
    set("long", @LONG
这里是多维宇宙的时空中转站,正常情况下,没有人能来到这里。
LONG);
    set("void", 1); // 特殊环境标记
    set("exits", ([
        "up" : CORE_DIR "world/area/maze/entry",
        "down" : ([
            "filename" : CORE_DIR "world/area/void",
            "x_axis" : 55,
            "y_axis" : 5,
        ]),
    ]));
    setArea("void", x, y, z);
}

如果调用move方法从普通房间模式进入地区模式,mudcore框架目前的实现是传送到地区随机坐标位置,具体代码参考CORE_MOVE模块,可以使用以下测试指令测试:

eval me->move("world/dq9/1/village.c")

进入新地区后,会发现啥也没有,因为地区模式的数据是存档处理,而不是写在代码中,mudcore框架提供了专用指定sa来建造地区,具体指令用法请help sa查看,地区环境装饰成什么样只看你的创意了,这里不做演示,请直接参考项目目前村庄的样子。

file

京ICP备13031296号-4