2013-03-12 3 views
1

저는 제스에서 제작중인 게임에 대한 특정 시나리오를 표현하려고 노력 해왔고 지금까지 각 시나리오의 모든 요소를 ​​알려주는 특정 사실을 가지고 있습니다. 이 게임 시나리오는 텍스트 형식으로 표현 될 것이므로 (텍스트 문자 만 사용) 2 차원 배열을 사용하여 시나리오 사실에서 검색 한 정보를 기반으로 특정 문자를 특정 위치와 일치시키는 것이 중요합니다.Jess의 2 차원 배열을 사용합니다.

누구나 내게이 목표를 달성하는 방법에 대한 통찰력을 줄 수 있습니까?

답변

1

Jess 자체에는 이와 같은 데이터 구조가 없습니다. 목록의 자바 목록을 사용할 수는 있지만 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 
    )