游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: sjinny

[讨论]关于多个状态机的配合

[复制链接]

8

主题

71

帖子

71

积分

注册会员

Rank: 2

积分
71
发表于 2004-11-20 04:05:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

如果用状态机实现太复杂, 可以用规则库来实现, 可以动态增加, 修改, 删除规则库中的规则. 偶想你要的可扩充性就可以实现了.

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-11-20 05:09:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

规则是用来表示状态之间的逻辑关系的,状态机是用保存状态的。
你要新加魔法,就在状态机里新增加一个状态,然后增加一个新的规则来表达他和其他状态之间的逻辑关系即可。

比如,你新加了一个状态属性叫:体力
这个时候你的规则和逻辑并不知道有这个状态属性,只有当你改了规则和逻辑之后,才能让这个状态属性真正有它的意义。

整个的模型应该是:

读入所有的状态属性->读入所有的规则->接收客户端的操作指令->根据指令调用规则->规则访问状态属性。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-11-20 05:12:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

具体的实现模式,状态机用hash表,规则用规则树
其实很多逻辑往往是很多规则的集合,比如说死亡,其中会包含多条规则。
而不是简单的一条规则,这个时候,这组规则的集合,就可以称为一个command,用设计模式中的command模式来实现。

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-11-20 10:37:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

谢谢大家~
也许我应该先把这个问题放下来,不然我永远都会两手空空的 ;-)
我先用一个状态机来描述每个对象,先把整个架构搞出来,反正都是外界调用仿真对象的send_event()成员函数,用它作为对外的AI接口,以后不管用什么AI机制都没问题……

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2004-11-20 21:51:00 | 显示全部楼层

好好学数学吧……同胞们

用这个实现(类的成员)
bool Condition[1..MAXCONDITION];//这个常量是所有单位中最多同时可能拥有的状态数
//想要动态的数量可以用动态数组
int DataOfUnit[1..MAXDATA];
//同上,存储任务的各种数值,可以把hp,mp什么的定义成常量活用脚本实现。
//+/-各种数值用本单位的成员函数实现。
//虽然不懂状态机是什么,但是也不会这么乱吧……

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2004-11-21 01:08:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-11-21 01:51:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

不懂什么是状态机就去看。
去搜finite state machine
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-23 09:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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