1

我一直在尝试为我在 Jess 中构建的游戏代表某个场景,到目前为止,我有一个特定的事实可以告诉每个场景的所有元素。由于此游戏场景将以文本格式表示(仅使用文本字符),因此我非常想根据从场景事实中检索到的信息,使用二维数组将某个字符与某个位置进行匹配。

任何人都可以给我一些关于如何实现这一目标的见解?

4

1 回答 1

1

Jess 本身没有这样的数据结构。您可以使用 Java list-of-lists,但从 Jess 操作会很尴尬。幸运的是,棋盘通常是一个稀疏矩阵,这意味着大多数位置都是空的,因此您只需要表示不是的位置。您可以将坐标直接放入您的游戏对象模板中——即,xy这里:

(deftemplate game-object (slot name) (slot type) (slot x) (slot y) ...)

或者您可以使用单独的“位置”模板并使用 id 将其与游戏对象匹配,例如

(deftemplate game-object (slot name) (slot type) (slot id) ...)
(deftemplate location (slot id) (slot x) (slot y))

一个重要的见解是模式匹配使得对所有对象的循环变得不必要。例如,假设您想检查与您的“英雄”角色在同一行中是否没有其他角色。你可以写这样的东西,不需要循环:

(defrule no-character-in-same-row-as-hero
    (game-object (name hero) (y ?y))
    (not (game-object (name ~hero) (y ?y)))
     =>
    // Do whatever you want, knowing that no other characters are in the same row
    )
于 2013-03-14T11:34:07.410 回答