2013-06-05 1 views
2

비디오 게임 코스 용 게임을 쓰고 있습니다. (불행히도 아무것도 가르쳐주지 않았습니다) 게임 실체와 게임을 실제로 실행하는 클래스 간의 상호 작용을 디자인하는 데 어려움을 겪고 있습니다.내 GameManager 클래스가 대부분의 것들과 친구가되는 것을 피하려면 어떻게해야합니까?

내 문제는 상당히 줄어 듭니다. 엔티티가 위치를 가지고 있다고 가정하면 게임 관리자가 게임 단계를 실행하기를 기다릴 필요없이 직접 수정할 수는 있지만이를 수행 할 수 있어야합니다. 액세스하고 AI 검사를 실행하는 등의 작업을 수행합니다.

내 솔루션 친구가 GameManager로하는 Position 클래스를 작성하는 것입니다, 그리고 따라서 관리자가 실체 '위치를 수정할 수있을 것이라고이

class Entity { 
    public: 
     Position & getPosition() { return pos_; } 
    private: 
     Position pos_; 
}; 

같은 엔티티 클래스를 만들 수 있지만, 다른 클래스는 것 오직 관찰 할 수 있어야합니다. 그러나이 추론은 많은 다른 속성들에 대해서 유효 할 것이고 엔티티 클래스는 사실 더 많은 속성을 가진 일련의 하위 클래스로 파생되기 때문에 거의 모든 곳에서 friend 속성을 배치해야 할 것입니다.

이 문제를 해결하기위한 더 좋은 방법은 무엇입니까?

+0

나는 당신이 너무 복잡하다고 생각합니다. 엔티티는 게임 컨텍스트 외부에서 요청되거나 수정 될 수있는 위치를 가지므로 엔티티는 해당 위치에 대한 getter와 setter를 제공해야합니다.엔티티의 위치 설정자가 적절한 시간에 호출되도록 보장하는 것은 엔티티의 책임이 아닙니다. – bengoesboom

+0

@bengoesboom 따라서 Entity 인스턴스를 유지하는 사람은 단순히 관리자가 아닌 클래스의 참조 만 Manager 클래스에 반환해야합니다. 그렇다면 어떻게 작동할까요? – Svalorzen

답변

0

특정 클래스를 친구로 식별하고 특정 다른 클래스를 비 친구로 식별하는 아이디어는 여러 가지 이유로 좋은 생각이 아닙니다. 이것이 의미하는 바는

또한이 클래스의 사용 방법도이 클래스의 관심사입니다.

그러나 이것은 전혀 문제가되지 않습니다. 이 수업은 어떤 수업이 고려 되든간에 그 자체의 책임을 수행하도록 고안되어야합니다.

이제 귀하의 경우, 위치 변경의 행동/행동이 어디에 속해 있는지를 결정해야합니다. 그것이 Entity, Entity Manager 또는 다른 어떤 것인가?

  1. 법인은 X2에 X1에서의 위치를 ​​변경 : 예를 들어, 이러한 이가지 경우 이는 더 의미합니다.
  2. 엔터티 관리자가 x1에서 x2로 엔터티의 위치로 변경됩니다.

이 동작이 엔티티 관리자 (사례 1)가 아니라 엔티티에 실제로 속한다고 판단했다고 가정 해 보겠습니다. 이 경우, @bengoesboom의 코멘트에서 지적한 바와 같이, 클래스의 사용자가 위치를 변경하는 데 사용할 수있는 설정기를 제공해야합니다.

이제이 클래스가 바람직하지 않은 방식으로 사용될 수 있다고 생각되면이 클래스 내에 제약 조건과 비즈니스 규칙을 적용해야합니다. 예를 들어 (단순한 예) 작업에서 특정 범위의 값만 허용하려면. 범위를 벗어나면 입력을 검사 한 다음 예외를 throw합니다.

일단 규칙과 제약 조건을 적절하게 처리하면 누가이 클래스를 사용할 지 신경 쓰지 않아도됩니다.

+0

내 관심사는 이런 식으로 게임의 규칙을 위반하는 방식으로 코딩하는 것이 좋습니다. 'Entity'를 확장한다고 가정하고 저는 음식에 가기를 원하는'Animal' 클래스를 만듭니다. 'setPosition (gameManager.getFoodPosition())'을 실행하는 것이 받아 들일 수있는 해결책이 될 수 있다고 생각 하겠지만 실제로는 그렇지 않습니다. – Svalorzen

+0

컨텍스트에 대한 자세한 정보가 없어도 더 이상 언급 할 수 없습니다. –

관련 문제