INTRODUÇÃO A PADRÕES DE CRIAÇÃO:

CONSTRUINDO LABIRINTOS


abstract class ElementoDeLabirinto {
    public abstract void entra();
}

class Sala extends ElementoDeLabirinto {
    private ElementoDeVizinho[] vizinhos = new ElementoDeVizinho[4];
    private int númeroDaSala;

    public void Sala( int númeroDaSala ) {
        ...
    }
    public void entra() {
        ...
    }
    public ElementoDeLabirinto getVizinho( int direção ) {
        ...
    }
    public void setVizinho( int direção, ElementoDeLabirinto vizinho ) {
        ...
    }
}

class Parede extends ElementoDeLabirinto {
    public void Parede() {
        ...
    }
    public void entra() {
        ...
    }
}

class Porta extends ElementoDeLabirinto {
    private Sala sala1, sala2;
    private boolean estáAberta;

    public void Porta(ElementoDeLabirinto sala1, ElementoDeLabirinto sala2 ) {
        ...
    }
    public void entra() {
        ...
    }
    public Sala salaDoOutroLado( Sala sala ) {
        ...
    }
}

class Labirinto {
    private Vector salas = new Vector();

    public void Labirinto() {
        ...
    }
    public void adicionaSala( Sala sala ) {
        ...
    }
    public Sala getSala( int númeroDaSala ) {
        ...
    }
}

class Jogo {
    ...
    public Labirinto criaLabirinto() {
        Labirinto umLabirinto = new Labirinto();
        Sala sala1 = new Sala(1);
        Sala sala2 = new Sala(2);
        Porta aPorta = new Porta( sala1, sala2 );

        umLabirinto.adicionaSala( sala1 );
        umLabirinto.adicionaSala( sala2 );

        sala1.setVizinho( NORTE, new Parede() );
        sala1.setVizinho( LESTE, aPorta );
        sala1.setVizinho( SUL, new Parede() );
        sala1.setVizinho( OESTE, new Parede() );

        sala2.setVizinho( NORTE, new Parede() );
        sala2.setVizinho( LESTE, new Parede() );
        sala2.setVizinho( SUL, new Parede() );
        sala2.setVizinho( OESTE, aPorta );

        return umLabirinto;
    }
    ...
}