문제

2D 타일 기반 SIM 게임을 만들고 있습니다. 2D 배열의 그리드 쿼트가 있는데, 이는 다양한 클래스와 방법에서 액세스하고 변경됩니다. 매번 2D 배열의 그리드 쿼트를 통과해야합니까, 아니면 전 세계로 만들어야합니까? 모범 사례는 무엇입니까?

나는 모든 클래스가 확장 될 수있는 일련의 변수를 포함하는 클래스를 만들 수있는 옵션일까요? 좋은 아이디어입니까? 좋은 관행입니까?

나는 여전히 Java를 처음 접했기 때문에 여전히 많은 것을 배우고 있습니다!

미리 감사드립니다.

rel

도움이 되었습니까?

해결책

데이터 구조 측면에서 설계해서는 안됩니다. Java는 객체 지향 언어입니다. 객체가 상호 작용할 때 문제에 대해 생각해보십시오. 2D 배열이 아닙니다. 보드 개체입니다. 상태를 문제로 조작하기위한 동작을 구축하고 2D 배열을 선택했다는 사실을 숨기십시오.

나는 보드의 모든 세부 사항이 해결되지 않았지만 다음과 같이 시작할 것입니다.

public class Board
{
    // This is what you're passing around now; Board hides it.
    // Square is the abstraction of a position on the Board
    private Square[][] grid;

    public Board(int nRows, int nCols)        
    {
       this.grid = new Square[nRows][];
       for (int i = 0; i < this.grid[i].length; ++i)
       {
           this.grid[i] = new Square[nCols];
       }
    }

    // Now add methods for adding Pieces to the Board, rules for moving them, etc.
} 

다른 팁

그것들을 생성자로 전달하고 멤버 변수에 보관하십시오.

너무 많은 곳에서 액세스하면 디자인 문제가있을 수 있습니다.

당신의 경우 확실한 당신은 단 하나의 '2D 배열의 그리드 쿼트'를 가질 것입니다. 당신은 항상 싱글 톤 패턴을 사용할 수 있으며, Essentailly는 그것을 글로벌로 만들 수 있습니다.

그래도 이에 대한 논쟁이 있습니다. 언젠가지도를 예압 할 수 있기를 원하지만 싱글 톤은 방해가됩니다 (싱글 톤의 두 번째 인스턴스를 만들 수 없습니다).

절대적으로 필요한 경우 그리드 함유 클래스 (a)에서 그리드를 공개로 선언 한 다음 A 클래스를 정적으로 가져옵니다 (import static A;). 이렇게하면 최소한 A 클래스를 연장하지 않고 그리드와 상호 작용할 수 있습니다.

코드가 너무 많은 장소에서 그리드에 액세스하지 않아야합니다. 모든 곳에서 그리드를 조작하지 않도록 코드를 재현하는 것을 고려하십시오. 우려 사항을 분리하십시오. 그리고 당신이 언급했듯이 상속을 사용하는 것은 확실히 좋은 생각이 아닙니다.

Gridsquaresacessor는 정적으로 만들기 위해 권장하는 것이 있지만 데이터를 읽을 수있는 하나의 명확한 클래스를 작성하십시오. 이 클래스에서는 배열에 액세스하기 위해 모든 방법을 작성합니다. 더 좋은 점은,이 클래스에서 정의되지 않은 방식으로 조작 할 다른 코드를 피하기 위해이 클래스의 개인 정적 필드로 만드십시오.

모든 클래스에서 배열에 액세스해야합니다. 배열에 하나의 그리드 쿼세이저를 생성자의 매개 변수로 전달하고 로컬 변수에 저장할 수 있습니다.

나는 개인적으로 싱글 톤을 좋아하지 않습니다. 왜냐하면 그들은 코드를 테스트하기가 매우 어렵 기 때문에 ...

코드가 멀티 스레드 인 경우 2D 어레이를 동기화하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top