MAB 240 - Computação II

Gabarito P1 2012.2 - 21/12/2012

1.

a)

public void tecla(String tecla) {
        estados[estadoAtual].tecla(tecla);
    }

    public tique(Set<String> teclas, double dt) {
        estados[estadoAtual].tique(teclas, dt);
    }

    public void desenhar(Tela tela) {
        estados[estadoAtual].desenhar(tela);
    }

b)

public void mudaEstado(int estado) {
        estadoAtual = estado;
    }

c)

Em MeuJogo:

public List<ObjetoJogo> getObjetos() {
        return objetos;
    }

Classe GameOver:

public class GameOver implements Jogo {
    private MeuJogo jogo;

    public GameOver(MeuJogo jogo) {
        this.jogo = jogo;
    }

    public void tecla(String tecla) { }

    public tique(Set<String> teclas, double dt) { }

    public void desenhar(Tela tela) {
        for(ObjetoJogo o : jogo.getObjetos()) {
            o.desenhar(tela);
        }
        // posição, tamanho e cor são livres!
        tela.texto("GAME OVER", 400, 300, 30, new Cor("branco"));
    }
}

2.

a)

public class ObservaImprimeN implements Observador {
    private Sujeito s;
    private int c;

    public ObservaImprimeN(Sujeito s, int c) {
        this.c = c;
        this.s = s;
        this.s.observar(this);
    }

    public void evento(Sujeito fonte) {
        System.out.println("EVENTO RECEBIDO");
        c = c - 1;
        if(c == 0) s.esquecer(this);
    }
}

b)

Declaração:

public class MeuJogo implements Jogo, Sujeito {
    private HashSet<Observador> observadores = new HashSet<Observador>();

Métodos de Sujeito:

public void observar(Observador o) {
        observadores.add(o);
    }
    public void esquecer(Observador o) {
        observadores.remove(o);
    }
    public void notificar() {
       for(Observador o: observadores) {
           o.evento(this);
       }
    }

    public void mudaEstado(int estado) {
        estadoAtual = estado;
        notificar();
    }