《使用MUDCORE框架从零开发LPMUD游戏》系列内容,通过教程既能熟悉 MUDCORE 框架的使用,也能学习LPCMUD游戏的开发,版权所有 mud.ren。
在开发前我们先构思一下想开发的游戏应该有哪些元素和玩法,做个基本的策划,当然,这里是以教程为主,策划不用搞得太专业,有个样子就好,有基础的架构和蓝图,保证后期不太乱。
和很多新WIZ交流发现,在他们的眼中MUD就等于国内的武侠游戏,国内都以ES2为底层的武侠游戏是MUD,但MUD不只是这样的,所以为了给大家直观的体验,游戏背景不再设置为武侠,我们教程开发一款完全不一样的游戏。
游戏背景
游戏以日式RPG游戏勇者斗恶龙为背景,关于《勇者斗恶龙》不熟悉的可以搜索百科,教程以《勇者斗恶龙9》为背景开发,这款游戏有着丰富的职业和剧情,游戏会开发部分职业和剧情做演示,大家在学习后可以在这基础上完善整个游戏。
勇者斗恶龙系列(ドラゴンクエスト,Doragon Kuesuto,Dragon Quest)是由日本艾尼克斯(现为史克威尔艾尼克斯)研发的电子角色扮演游戏(RPG)系列,其作为游戏史上最畅销的长寿游戏系列之一,在日本具有“国民RPG”之称。我们开发的这款MUD游戏简称DQMUD。
关于DQMUD游戏的基础策划可以参考以下内容:
而教程开发完成的项目可以在此体验:https://mud.ren:8080/
第一版教程计划用小说《诡秘之主》为背景开发,考虑到教程比较慢,而DQMUD也是最早准备用来做教程的版本,所以现在用开发进度比较高的DQMUD做教程。
目录结构
本游戏计划按以下目录结构开发:
| 目录 | 说明 |
|---|---|
| system | 系统文件目录 |
| system/kernel | 系统核心文件,包括master对象和simul_efun对象 |
| system/daemons | 系统守护进程 |
| system/object | 系统核心对象,包括登录对象、基本玩家对象和 VOID 环境 |
| cmds | 玩家指令目录 |
| data | 玩家数据存档目录和系统缓存目录 |
| docs | 游戏开发者文档,包括系统规范和模拟外部函数说明文档 |
| feature | 游戏特色文件,包括职业、技能等相关内容 |
| help | 游戏帮助文档,玩家游戏指南 |
| include | 游戏头文件 |
| inherit | 游戏特性继承文件 |
| log | 游戏日志文档 |
| obj | 游戏具体对象文件,继承标准对象的实物 |
| std | 游戏标准对象文件,不要直接放置到游戏中,需要被继承使用 |
| wizard | 游戏管理员工作目录 |
| world | 游戏世界地区文件 |
| www | websocket服务,由 fluffos 驱动提供 |
基本MUDLIB
基础章节已经讲到 MUD 驱动的运行时配置文件,我们先配置这些最基本的文件和目录,本项目使用 FluffOS v2019 驱动(下载地址:https://bbs.mud.ren/threads/4 ),文件编码为 utf-8 格式,先按如下结构建立基础目录和文件:
.
├── config.cfg # 运行时配置文件
├── include # 头文件目录
│ └── globals.h # 全局包含头文件
├── log # 日志记录目录
└── system # 系统目录
└── kernel # 核心文件目录
├── master.c # 主宰对象
└── simul_efun.c # 模拟外部函数对象
以上为最基本的MUDLIB文件结构,除了 config.cfg 这个驱动调用的配置文件,游戏文件只有三个:globals.h、master.c和simul_efun.c,但没有任何代码。
现在,我们引入 mudcore 框架,为了方便直接用 WEBSOCKET 访问,还需要配置 websocket http dir 目录 www 和相关文件,这里使用 FluffOS 提供的文件。
- mudcore 项目地址:https://gitee.com/mudcore/mudcore
- www 项目地址:https://gitee.com/mudren/www
在这里,我们推荐规范使用 git 来管理我们的项目,如果你不懂 git 使用,请百度自学。
我们先初始化 mud 项目,命令行进入 mud 根目录,输入如下指令:
git init
git add .
git commit -m 'init mudlib'
然后,引入 mudcore 和 wwww:
git submodule add https://gitee.com/mudcore/mudcore.git
git submodule add https://gitee.com/mudren/www.git
现在我们的项目中新增了 mudcore 和 www 目录,这二个目录下都有文件,以后的开发中,只可调用不要修改。
现在我们在项目中引入 mudcore 框架:
globals.h文件增加如下内容:
// The global include file is included automatically.
#ifndef GLOBALS_H
#define GLOBALS_H
// mudcore框架头文件(请放在最底部)
#include <mudcore.h>
#endif
master.c文件增加如下内容:
inherit CORE_MASTER_OB;
simul_efun.c文件中增加如下内容:
inherit CORE_SIMUL_EFUN_OB;
config.cfg内容如下:
name : 勇者斗恶龙
mudlib directory : .
log directory : /log
include directories : /include:/mudcore/include
master file : /system/kernel/master
simulated efun file : /system/kernel/simul_efun
global include file : <globals.h>
debug log file : debug.log
external_port_1 : telnet 3160
external_port_2 : websocket 8000
websocket http dir : www
现在最基本的 MUDLIB 已经完成,自带注册登录和聊天功能,我们启动服务器:
driver config.cfg
注意:本教程为LIB开发教程,不讲驱动编译相关,driver部分请看:https://bbs.mud.ren/threads/2
默认WEB访问端口:8000,打开试试吧,可以登录注册,可以聊天(chat),且具有基本的指令功能,登录注册信息存在新生成的 data 目录中。
请注意:框架默认提供了一些示例指令,在
/mudcore/cmds/下,注册ID为mudren的ID为管理员,可以使用wizard目录中的指令,后续章节我们会讲解指令开发,这里先使用框架提供的。提示:进入游戏后可以
up和down体验迷宫和区域环境模式,这些功能为框架封装好的模块,后期开发我们可以直接继承使用。

提示:你可以进入 www 目录,使用
git checkout <分支>切换网页端的界面样式,如:
git checkout www

git checkout main

现在我们可以看到,系统自动创建了data目录,在目录下生成了存档文件,也自动在log目录下生成了debug.log日志文件。
存档和日志都是生成的,我们现在是用git管理代码,为了方便和安全,这二个目录中的内容不加到项目库,我们在data和log目录下都建一个名为.gitignore的文件把这些生成的文件过滤掉,内容如下:
*
!.gitignore
最后 commit 我们当前版本:
git add .
git commit -m 'v1.0'
代码总结
本节课程我们只是建了几个目录和文件:
include\globals.h
system\kernel\master.c
system\kernel\simul_efun.c
config.cfg
以上文件中的内容都非常少,data和log目录下的内容由系统自动生成。但项目通过mudcore框架可以正常启动注册,而且切换www分支还能有不同的界面效果。
附本节版本源码下载地址,如果下载使用,请在项目目录执行 git submodule update。
补充说明
使用MUDCORE做框架开发新MUD推荐直接使用提供好的基础模板:https://github.com/mudcore/mud
这样做要比从以上教程中零建项目代码更省事方便,具体见模板项目说明。