1
我一直在試圖描述一個我在Jess建的遊戲的特定場景,到目前爲止我有一個確定的事實,它會告訴每個場景中的所有元素。由於這個遊戲場景將以文本格式(僅使用文本字符)表示,我基於從場景事實中檢索到的信息,使用二維數組將特定字符匹配到特定位置。在Jess中使用二維數組
任何人都可以給我一些關於如何實現這一點的見解?
我一直在試圖描述一個我在Jess建的遊戲的特定場景,到目前爲止我有一個確定的事實,它會告訴每個場景中的所有元素。由於這個遊戲場景將以文本格式(僅使用文本字符)表示,我基於從場景事實中檢索到的信息,使用二維數組將特定字符匹配到特定位置。在Jess中使用二維數組
任何人都可以給我一些關於如何實現這一點的見解?
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
)