使用MUDCORE框架从零开发LPMUD游戏:基础架构

《使用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.hmaster.csimul_efun.c,但没有任何代码。

现在,我们引入 mudcore 框架,为了方便直接用 WEBSOCKET 访问,还需要配置 websocket http dir 目录 www 和相关文件,这里使用 FluffOS 提供的文件。

在这里,我们推荐规范使用 git 来管理我们的项目,如果你不懂 git 使用,请百度自学。

我们先初始化 mud 项目,命令行进入 mud 根目录,输入如下指令:

git init
git add .
git commit -m 'init mudlib'

然后,引入 mudcorewwww

git submodule add https://gitee.com/mudcore/mudcore.git
git submodule add https://gitee.com/mudren/www.git

现在我们的项目中新增了 mudcorewww 目录,这二个目录下都有文件,以后的开发中,只可调用不要修改。

现在我们在项目中引入 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 目录中的指令,后续章节我们会讲解指令开发,这里先使用框架提供的。

提示:进入游戏后可以updown体验迷宫和区域环境模式,这些功能为框架封装好的模块,后期开发我们可以直接继承使用。

file

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

git checkout www

file

git checkout main

file

现在我们可以看到,系统自动创建了data目录,在目录下生成了存档文件,也自动在log目录下生成了debug.log日志文件。

存档和日志都是生成的,我们现在是用git管理代码,为了方便和安全,这二个目录中的内容不加到项目库,我们在datalog目录下都建一个名为.gitignore的文件把这些生成的文件过滤掉,内容如下:

*
!.gitignore

最后 commit 我们当前版本:

git add .
git commit -m 'v1.0'

代码总结

本节课程我们只是建了几个目录和文件:

include\globals.h
system\kernel\master.c
system\kernel\simul_efun.c
config.cfg

以上文件中的内容都非常少,datalog目录下的内容由系统自动生成。但项目通过mudcore框架可以正常启动注册,而且切换www分支还能有不同的界面效果。

附本节版本源码下载地址,如果下载使用,请在项目目录执行 git submodule update

补充说明

使用MUDCORE做框架开发新MUD推荐直接使用提供好的基础模板:https://github.com/mudcore/mud

这样做要比从以上教程中零建项目代码更省事方便,具体见模板项目说明。

京ICP备13031296号-4