2013-03-12 18 views
1

我一直在試圖描述一個我在Jess建的遊戲的特定場景,到目前爲止我有一個確定的事實,它會告訴每個場景中的所有元素。由於這個遊戲場景將以文本格式(僅使用文本字符)表示,我基於從場景事實中檢索到的信息,使用二維數組將特定字符匹配到特定位置。在Jess中使用二維數組

任何人都可以給我一些關於如何實現這一點的見解?

回答

1

Jess本身沒有這樣的數據結構。你可以使用Java的列表清單,但是從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 
    )