卧龙先生 发表于 2010-11-19 23:45:27

检查代码必须做这个判断,要知道是否可以用这些数字代替 引号内的字符

一个规则最多容纳多少个 事实 或 动作,以及 or and not 范围内的多个 事实 是否当作一个来计算?现在弄清楚,可以早日开工

[ 本帖最后由 卧龙先生 于 2010-11-19 23:48 编辑 ]

老胡V1 发表于 2010-11-20 00:02:32

不会 这些使用比的语句

卧龙先生 发表于 2010-11-20 00:19:32

我的帝国删除了,所以这些要拜托你。勉为其难吧!

老胡V1 发表于 2010-11-20 08:36:02

哦,我一开始误解了,我是说自动补全的数字没用。而数字固然可以代替字符串。如果直接写在两引号之间不会有问题,就直接说出数字。或者使用另外的专门用来发字符串号码的语句,就没用引号,而且是送出在language.dll里面的对话。
总而言之,有上面提到的CHAT和LOAD什么的就有双引号,内容是什么都不会违法

老胡V1 发表于 2010-11-20 08:38:12

送出字符串号码的有专门语句,额,据教程说必须是有用的字符串号码,但另外一方面如果写别的似乎不会报错。(这说的报错是游戏开始时弹框)

卧龙先生 发表于 2010-11-20 08:49:54

老胡: 刚发现,chat-to-all 用于发送自定字符,至于内置的常量字符串用的是另一个命令 chat-to-player-using-id
787918944: 很感谢!现在可以开始了。不过 or and not 尚未明确之前,不做判断!

我的 qq: 117289747 谁愿意加我!:)

[ 本帖最后由 卧龙先生 于 2010-11-20 08:50 编辑 ]

卧龙先生 发表于 2010-11-20 10:58:26

把你所知道的告诉我吧:

#load-if-defined 判断语句会出现在 规则 里吗?就像这样:

(defrule
  #load-if-not-defined PERSIAN-CIV
        (goal unit-goal knight)
  #end-if
        (goal control-goal 0)
        (unit-type-count villager > 90)
        (or
                (strategic-number sn-current-age >= ci-transit)
                (and
                        (food-amount > 400)
                        (gold-amount < 200)
                )
        )
=>
        (set-goal control-goal militiaman-line)
        (disable-self)
)

这种结构的 if 语句正常吗:

#load-if
#load-if
#else
#else
#if-end
#if-end

[ 本帖最后由 卧龙先生 于 2010-11-20 11:36 编辑 ]

老胡V1 发表于 2010-11-20 16:51:48

第一个,不能…只能LOAD包含DEFRULE。
第二,不正常,应该是LOAD.LOAD.ELSE.ENDIF.ELSE.ENDIF(如果你指的是一个条件性读取包含另一个)

老胡V1 发表于 2010-11-20 17:28:20

那个,我问过了,简单地说,一个规则内,最多能有16个开括号,不包括defrule那一个。别的不用理,解释起来麻烦。另外至少一个事实和动作

卧龙先生 发表于 2010-11-20 21:05:55

很不错!不过下面还有...

(or

  ()
  ()
)
上面的当作几个? 一个?两个?三个?

那么就是说,一个规则内 动作 和 事实 相加不能超越 16 个?不仅仅是 动作?

[ 本帖最后由 卧龙先生 于 2010-11-20 21:11 编辑 ]

老胡V1 发表于 2010-11-20 21:40:43

说了,不理会动作还是事实也不管逻辑判断 只要数左括号

(defrule
(or
()
()
)
)

就是是3个

[ 本帖最后由 老胡V1 于 2010-11-20 21:42 编辑 ]

卧龙先生 发表于 2010-11-21 00:10:32

你不能理解严谨的态度在开发方面的重要性!

老胡V1 发表于 2010-11-21 08:52:32

额 详细一点的描述是 “一个规则最多可以有16个成分,事实、动作、逻辑判断符等都视作成分”

我觉得对于你编写程序来说直接数左括号更简单罢了

卧龙先生 发表于 2010-11-21 09:05:22

描述的好!

语法检查是个严谨的过程,要考虑的问题很多,比如 (chat-to-all "1234 (56) 789") . 这句正确的语句,单纯搜索符号 ) 来做判断,那就错的离谱了.所以,尽管现在不判断语句的参数正确性,但包含字符串参数的语句还是要优先处理的.这就是我问题那么多的原因.

考虑过这种格式正确的语句吗: 

(
chat-to-all
"123"                    )

从编译角度来讲是正确的,帝国应该也要并且会支持这种方式.

这不是个小工作,目前虽然写了 500 多行,不过距离成功还有很长的路.

[ 本帖最后由 卧龙先生 于 2010-11-21 09:20 编辑 ]

老胡V1 发表于 2010-11-21 09:36:05

哦 也对我疏忽了 感谢提醒

卧龙先生 发表于 2010-11-21 11:08:09

加了不发信息,找不到人{38}

卧龙先生 发表于 2010-11-23 13:56:11

0.99i 发布!

写了一千多行代码.脚本检查测试版最终搞定.



下面的 delphi 常量是这次工作的脚印,也让大家见识下本人的 chinesenglish:


const
  _diUnknowNumber = '未知用途的数字:';
  _diUnknowName = '未知用途的单词:';
  _diUnknowText = '不可识别的内容:';
  _diUnknowEmblem = '未知用途的符号:';

  _diUnknowElse = '#else 前方缺乏 #load-if* 语句';
  _diUnknowEnd = '#end 前方缺乏 #load-if* 语句';

  _diNoFoundCharofEnd = '找不到期望的结束符: ")"';
  _diNoString = '找不到期望的字符串描述';
  _diLoadRandomPercentError = 'load-random 要求的百分比参数计数不正确.';
  _diLoadRandomItemCountError = 'load-random 项目数量少于两条,或者你应该调整"剩余百分比项目"作为最后一个项目.';
  _diDefconstValueError = '无效的常量值描述';
  _diRuleCountTooLong = '规则描述太长.提示:一个规则里最多容纳 16 个配对的括号,运算符 "OR AND NOT" 同样在计算范围内.';
  _diNoFoundFacts = '至少拥有一个"事实"';
  _diNoFoundActives = '至少拥有一个"动作"';
  _diRepeatBlock = '重复的分割符"=>"';
  _diOrAndNotError = '空白的逻辑运算符.';

  _diOddCharOfEnd = '多余的结束括号 ")"';
  _diNoSYM1 = '并非有效的系统定义符';
  _diPosError = '颠倒的"动作/事实"位置';
  _diRuleError = '存在错误的规则';
  _diAIfNeedEnd = '缺乏 #end-if 的判断语句';

[ 本帖最后由 卧龙先生 于 2010-11-23 13:58 编辑 ]

老胡V1 发表于 2010-11-23 22:58:00

恭喜哈!回去用几个错误样本测试下,争取不断完善,因为短时间内是无法全部列出来的…卧龙先生的编程水平果然强大…我还在为今年NOIP纠结呢,希望是省二等吧…反正省三等一定有

老胡V1 发表于 2010-11-23 23:06:14

如果能知道帝国AI编译器的运作方式就好了…就这样吧,先用一会,大家发现有错误没查出可以专门在这反映。最后对卧龙先生致以衷心感谢,以及对之前自己不了解的鲁莽表示歉意。

卧龙先生 发表于 2010-11-24 00:35:49

多谢支持!如此和谐,有啥过意不去的!  :)

找到错误时,编辑器输入焦点将转移到出错所在位置.用方向键可以快速找到.错误提示显示于右下边的小编辑器.

也许应该在出错的时候,将错误所在行用红色背景凸显一下.改天再看看!

该功能用 F5 调用,多用快捷键是个好习惯!

补充: 再次更新了一点点,版本依旧为 0.99i,如有需要,请重下一份 :     "当错误被找到的时候,错误所在行将被置于编辑器正中央"

更新到此,大概告一段落.

[ 本帖最后由 卧龙先生 于 2010-11-24 10:35 编辑 ]
页: 1 2 [3] 4
查看完整版本: [下载]AI Editor 0.99z 与 AI Builder