北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: lzkd

mush机器人框架设想

[复制链接]
发表于 2011-5-22 23:00:51 | 显示全部楼层
自进入北侠接受mush之后,一直有一个想法——将机器人编程框架化,模块化。经过一段时间的思考,
有了一个不怎么成熟的想法,现在拿出来,大家讨论一下,看看是否有可能。

我也有这个想法,玩了10年mud。
首先 LUA是可以面向对象,具体可以看下 LUA In programming 这个书。
要做框架就先要对 MUD系统 进行分层

MUD 框架我分了这么几层
1 Sqlite 层 数据库,存放地图房间信息。我看了有些人把数据写在LUA文件中,类似C写法,个人喜好。
数据库修改起来方便点
2  基础层 map 类 地图路径查询类  walk 类 行走类  room 类 房间类  busy 类 等待类 combat 类
3 具体业务逻辑类 各个job 类 lian 类 lingwu 类 learn类 调用 基础类 来实现复杂的逻辑
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-5-23 08:28:39 | 显示全部楼层
使用框架的缺点,你会需要张类图,搞明白各个类的功能和使用方法,学习成本。
优点是框架可以让各个不同的人的机器人通过接口方式连接起来,只需要简单修改几行代码。代码维护,修改成本下降,可靠性提高。
比如 A 君 写了个学习模块 B 君写了任务模块。当 C 君觉得有必要两个模块衔接起来一起工作时候,实例化学习模块接口,调用 任务模块,然后任务模块实现接口,任务结束时候调用学习模块。
我用lua 写个例子
A 类
A={
   new=function()
     local a={}
    setmetatable(a,{__index=A})
    return a
   end,
   --A 类属性
   myname="world",
}
--A类的方法
function A:hello()
  print("hello ",self.myname)
--执行接口
self:finish()
end
--A类的接口
function A:finish()
  --默认空值
end

--B类声明
B={
   new=function()
     local b={}
    setmetatable(b,{__index=B})
    return b
   end,
   --B 类属性
   place="here",
}
--A类的方法
function B:look()
  print("look ",self.place)
--执行接口
self:finish()
end
--B类的接口
function B:finish()
  --默认空值
end

-- 具体类调用的方法
local _case_A
_case_A=A.new()
_case_A:hello() --会看结果到 hello world
_case_A.myname="bd xkx"
_case_A:hello() --会看到结果 hello bd xkx
--A  衔接 B
_case_A.finish=function()
   local _case_B=B.new() --实例化
  _case_B:look()
end
_case_A.myname="bd xkx"
_case_A:hello() --会看到结果 hello bd xkx 然后接下去会看到 look here

[ 本帖最后由 ptouch 于 2011-5-23 09:58 AM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-5-23 10:36:48 | 显示全部楼层
收藏。。期待ptouch的新作。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2019-4-6 15:49:15 | 显示全部楼层
回复 46# sauron

反复读了几遍,没有发现启发函数h()啊。
没有这个似乎不能称为A*。
--回完才发现是远古坟......不好意思
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 02:58 PM , Processed in 0.008593 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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