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();
}