ptouch 发表于 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类 调用 基础类 来实现复杂的逻辑

ptouch 发表于 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 编辑 ]

littleknife 发表于 2011-5-23 10:36:48

收藏。。期待ptouch的新作。ttk_00

sundevil 发表于 2019-4-6 15:49:15

回复 46# sauron

反复读了几遍,没有发现启发函数h()啊。
没有这个似乎不能称为A*。
--回完才发现是远古坟......不好意思
页: 1 2 3 4 5 [6]
查看完整版本: mush机器人框架设想