我一直试图代表我在Jess建立的游戏的某个场景,到目前为止,我有一个事实,它将告诉每个场景中的所有元素。由于这个游戏场景将以文本格式表示(仅使用文本字符),我试图使用二维数组根据从场景事实中检索到的信息将某个角色与某个位置相匹配。
任何人都可以给我一些关于如何实现这一目标的见解?
答案 0 :(得分:1)
Jess本身没有这样的数据结构。你可以使用Java列表列表,但是从Jess操作会很尴尬。幸运的是,游戏板通常是稀疏矩阵,这意味着大多数位置都是空的,因此您只需要表示那些不是。您可以将坐标直接放入游戏对象模板中,即x
和y
:
(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
)